我是靠谱客的博主 寒冷小伙,最近开发中收集的这篇文章主要介绍Hive表如何使用多字符分隔,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一般情况下,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表如何使用多字符分隔所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部