开发者学堂课程【大数据 Hive 教程精讲:课时名称】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/90/detail/1384
Apache Hive--特殊分隔符处理
内容介绍:
一、特殊分隔符处理(扩展)
一、特殊分隔符处理(扩展)
hive 读取数据的机制:
首先用 InputFormat
<默认是:org.apache.hadoop.mapred.TextInputFormat >的一个具体实现类读入文件数据,返回一条一条的记录(可以是行,或者是逻辑中的“行”)
然后利用 SerDe<默认: org. apache. hadoop.hive.serde2.lazy. LazySimpleSerDe>的一个具体实现类,对上面返回的一条一条的记录进行字段切割。
Hive 对文件中字段的分隔符默认情况下只支持单字节分隔符,如果数据文件中的分隔符是多字符的,如下所示:
01||zhangsan
02| | lisi
可用使用 RegexSerDe 通过正则表达式来抽取字段
drop table t_bi_reg;
create table t_bi_reg(id string,name string)
row format serde
'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties(
'input.regex'='(.*)11/N1/(.*)".
'output.format.string'='%1$s %2$s'
stored as textfile;
hive>load data local inpath ' /root/hivedata/bi.dat' into table t_bi_reg;
hive>select * from t_bi_reg;
其中:
input.regex:输入的正则表达式
表示||左右两边任意字符被抽取为一个字段
output.format.string:输出的正则表达式
%1$s%2$s则分别表示表中的第一个字段、第二个地段
注意事项:
使用 RegexSerDe 类时,所有的字段必须为 string