Hive学习之路-多分隔符的使用

通常情况下,我们创建的都是单分隔符的Hive表,但是在实际业务环境中,多数情况下使用的是多分隔符,本篇文章我们探究下Hive多分隔的用法以及注意事项。

单分隔符示例:

create table hello(name string,code timestamp) 
row format delimited fields terminated by ','   
lines terminated by '\n'                        
stored as textfile;   

说明:上述示例中采用“,”作为列分隔,“\n”作为行分隔。


多分隔符使用:

第一种:使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe接口

CREATE EXTERNAL TABLE IF NOT EXISTS inform(
BINGLIJLXH	STRING	,
JILUNR	STRING	
)COMMENT '内容注释'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ('field.delim'='\001$^#G','line.delim'='\002H-Q^V', 'serialization.format'='\001$^#G')
STORED AS TEXTFILE
location '/user/hive/temp'; 

说明:'\001$^#G','\002H-Q^V','\001$^#G'表示多分隔符,其中\001,\002表示Hive默认隐藏分隔符,是不可见字符,\001在vim里面表示^A,\002表示^B。

\001          ^A ,需要按照CTRL+V+A打出,不是shift+^+B

\002          ^B,需要按照CTRL+V+B打出,不是shift+^+B

 

sed -e 's/|/\^A$^#G/g' data.txt
sed -i 's/|/\^A$^#G/g' data.txt      替换但分隔符“|”为多分隔符“\001$^#G”,^需要转义

备注:-e表示只编辑不修改文件内容;-i表示修改文件内容。

第二种:使用org.apache.hadoop.hive.contrib.serde2.RegexSerDe接口(正则)

create external table inform(a string, b string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "^(.*)\\$\\%\\#(.*)$")
location '/user/hive/temp';

分隔符使用不正确,会出现count数目不正确或者insert会插入到第一个字段中,其余字段中没有数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值