hive多分隔符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive多分隔符相关的知识,希望对你有一定的参考价值。

参考技术A

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中默认只支持单字节分隔符,不支持多字节(超过一个字节)分割符的。

      单字节:|   .   :   \t

      多字节:||    ::     ..

      create table test01(id int,name string) row format delimited fields terminated by ‘::‘;

      load data local inpath ‘/home/hadoop/apps/test01‘ into table test01;

      上面导入数据之后,是不行的。

二、分割方式

1、将多字节换成单字节

      ::à:

      这样做有风险的

      1::Toy Story (1995)::Animation|Children‘s|Comedy

      1:Toy Story (1995):Animation|Children‘s|Comedy

      一定对数据足够了解,知道里面的数据的分隔都是利用相同的多字节来的。

2、修改源代码

      将hive源代码修改为支持多字节的,这样做的话,以后所有的数据都得是多字节切分的,遇到单字节切分的还需在改过来,所以不建议用这种方法。

3、自定义字段分割符(正则表达式)

create table test02(id int,name string)

row format serde ‘org.apache.hadoop.hive.serde2.RegexSerDe‘

with serdeproperties(‘input.regex‘=‘(.*)::(.*)‘,‘output.format.string‘=‘%1$s %2$s‘) stored as textfile;

load data local inpath ‘/home/hadoop/apps/test01‘ into table test02;

 

以上是关于hive多分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Hive多分隔符支持示例

Hive多分隔符支持示例

0010-Hive多分隔符支持示例

Hive分隔符 『 单字节分隔符 | 多字节分隔符』

hive serde 中多分隔符字符串的正则表达式

使用多字符分隔符创建 HIVE 表