Apache Hive 多字节分割数据文件导入

Hive默认的SerDe接口类不支持多字符分割,对多分隔符数据文件导入时易出问题。解决方案是使用正则接口,创建表时指定SerDe为正则的SerDe,并指定serde属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于hive默认使用的SerDe(序列化与反序列化)接口类是org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,而这个接口是不支持多字符分割的,所以对需要多分隔符数据文件进行导入时,即便指定多字节分隔符,出来的数据一般都是有问题的。

解决方案是使用: org.apache.hadoop.hive.serde2.RegexSeDe接口,即使用正则接口

案例文件格式如下

[hadoop@mycat01 movie]$ head -10 users.dat
1::F::1::10::48067
2::M::56::16::70072
3::M::25::15::55117
4::M::45::7::02460
5::M::25::20::55455
6::F::50::9::55117
7::M::35::1::06810
8::M::25::12::11413
9::M::25::17::61614
10::F::35::1::95370
.....

创建表时指定SerDe:

create table users(
    userid bigint,
    gender string,
    age int,
    occupation String,
    zipcode String
) 
row format serde 'org.apache.hadoop.hive.serder2.RegexSerde' 
with serdeproperties('input.regex'='(.*)::(.*)::(.*)','input.format.string'='%1$s %1$s %3$s');

指定SerDe为正则的SerDe: org.apache.hadoop.hive.serder2.RegexSerde

指定serde属性:

-- 由于hive是java开发的,所以正则完全遵循java的格式,例如\\|是对|的转义
input.regex=每一行的正则
-- %1即取上面正则匹配分组的第1组,%2即取第2组,$s则仅仅表示占位符
input.format.string=输出格式   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值