概述
一般情况下,Hive建表指定分隔符使用”row format delimited fields terminated by”语法,以下是一个最简单的例子,
hive> create external table t2 (a int, b string)
> row format delimited fields terminated by '|'
> location '/user/hive/warehouse/t3';
OK
Time taken: 0.045 seconds
使用此方法时,分隔符只能是一个字符,假如想使用多个分隔符如’$%#’,则虽然可以成功创建表,但查询的结果是不正确的,如下
hadoop fs -cat /user/hive/warehouse/t3/t3.txt
1$%#aaa
2$%#bbb
3$%#ccc
hive> create external table t3 (a int, b string)
> row format delimited fields terminated by '$%#'
> location '/user/hive/warehouse/t3';
OK
Time taken: 0.051 seconds
hive> select * from t3;
OK
1
%#aaa
2
%#bbb
3
%#ccc
Time taken: 0.105 seconds, Fetched: 3 row(s)
要解决使用多字符分隔的问题,目前从网上查到主要有两种方法,1 MultiDelimitSerDe 2 RegexSerDe
方法1
hive> create external table t4(id INT, name STRING)
> ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
> WITH SERDEPROPERTIES ("field.delim"="$%#")
> location '/user/hive/warehouse/t3';
OK
Time taken: 0.045 seconds
hive> select * from t4;
OK
1
aaa
2
bbb
3
ccc
Time taken: 0.092 seconds, Fetched: 3 row(s)
方法2
hive> create external table t5(a string, b string)
> ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
> WITH SERDEPROPERTIES ("input.regex" = "^(.*)\$\%\#(.*)$")
> location '/user/hive/warehouse/t3';
OK
Time taken: 0.046 seconds
hive> select * from t5;
OK
1
aaa
2
bbb
3
ccc
Time taken: 0.09 seconds, Fetched: 3 row(s)
最后
以上就是寒冷小伙为你收集整理的Hive表如何使用多字符分隔的全部内容,希望文章能够帮你解决Hive表如何使用多字符分隔所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复