Hive--字段中包含列的分割符

字段中包含列的分割符

问题

  • 列的分隔符不固定,一行数据中出现了多种列的分隔符【几乎很少,半结构化数据,跟数据生成格式有关】
name-age,sex phone	address
  • 列的分隔符固定,但是字段中包含了列的分割符【这种情况会比较多】
2019-08-28 00:03:00 tom
  • 解决方案

使用正则加载数据,将非结构化或者半结构化的数据,经过ETL转为结构化数据

实现案例

  • 创建数据
vim /export/datas/regex.txt

2019-08-28 00:03:00 tom
2019-08-28 10:00:00 frank
2019-08-28 11:00:00 jack
2019-08-29 00:13:23 tom
2019-08-29 10:00:00 frank
2019-08-30 10:00:00 tom
2019-08-30 12:00:00 jack
  • 创建表,加载数据

普通创建

create table logindate1(
longintime string,
name string
)
row format delimited fields terminated by ' ';

load data local inpath '/export/datas/regex.txt' into table logindate1;

select * from logindate1;
  • 问题:数据产生了错位,没有按照预想结果产生
  • 原因:数据的某个字段中包含了列的分割符
  • 解决:Hive运行自定义加载方式,常见的方式:通过正则加载数据

正则加载:

create table logindate2(
longintime string,
name string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
 "input.regex" = "([^}]*) ([^ ]*)"
);


load data local inpath '/export/datas/regex.txt' into table logindate2;

select * from logindate2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值