美文网首页
hive多分隔符

hive多分隔符

作者: 轰鸣龙 | 来源:发表于2020-12-30 16:19 被阅读0次

    hive在建表时,通常使用
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY "|#" 来限定数据中各个字段的分隔符,这种方式只支持单个分隔符,即:实际只会按照"|"进行分割,若想实现支持多分隔符,有如下几种方式:
    1、hive从0.14版本以后支持MultiDelimitSerDe,可以比较优雅多解决多分隔符问题
    ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ("field.delim"="|#")
    参考:https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSerDe

    2、使用RegexSerDe,需要写正则表达式

    3、重写 InputFormat 中 RecordReader 类中的 next 方法,重写完成后打包成jar,放入到Hive目录的lib文件夹下面。创建表的时候再指定INPUTFORMAT

    之后遇到的问题:
    1、执行查询、join时报错:Class org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found
    根据网上的方案1:进入hive执行add jar /usr/hdp/3.1.5.0-152/hive/lib/hive-contrib.jar
    又报了如下的错误:
    does not have following privileges for operation ADD [ADMIN] (state=,code=1)

    根据网上的方案2:在hive-site.xml中添加如下配置,重启hive服务还是不生效
    <property>
    <name>hive.aux.jars.path</name>
    <value>file:///usr/hdp/3.1.5.0-152/hive/lib/hive-contrib.jar</value>
    </property>

    问题先记下来后续有时间再解决,这里通过对源文件进行逐行处理,将多分隔符"|#"中的"#"替换为空字符,从而变成单分隔符
    sed 's/#//g' data.txt > new_data.txt

    相关文章

      网友评论

          本文标题:hive多分隔符

          本文链接:https://www.haomeiwen.com/subject/ftmhoktx.html