1.Hive中的分隔符
默认规则
Hive默认序列化类是LazySimpleSerDe,其中支持使用单字节分隔符(char)来加载文本数据。根据不同文本文件的分隔符,我们可以通过在创建表时使用row format delimited来指定文件中的分隔符。
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION TIEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] -- Avilable in Hive 0.13 and later
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
特殊数据
情况一:每行数据的分隔符时多字节分隔符,例如:“||”、"–"等
情况二:数据的字段中包含了分隔符
解决方案一:替换分隔符
处理小批量数据的时候可以写代码将多字节分隔符替换为单字节分隔符
在处理大量数据时使用MR程序操作
解决方案二:RegexSerDe正则加载
Hive内置的SerDe
除了使用最多的LazySimpleSerDe,Hive内置了很多SerDe类
多种SerDe用于解析和加载不同类型的数据文件,常用的有ORCSerDe、RegexSerDe、JsonSerDe等
BUilt-in SerDes
- Avro (Hive 0.9.1 and later)
- ORC (Hive 0.11 and later)
- RegEx
- Thrift
- Parguet (Hive 0.13 and later)
- CSV (Hive 0.13 and later)
- JsonSerDe (Hive 0.12 and later in hcatalog-core)
方案概述
RegexSerDe用来加载特殊数据的问题,使用正则匹配来加载数据
RegexSerDe解决多字节分隔符
分析数据格式,构建正则表达式
原始数据格式:
01||周杰伦||中国||台湾||男||七里香
正则表达式定义每一列
([0-9]*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)
create table singer(
id string, -- 歌手id
name string, -- 歌手名称
country string, -- 国家
province string, -- 省份
gender string, -- 性别
works string -- 作品
)
-- 指定使用RegexSerDe加载数据
row format serde 'org.apache.hadoop.hive.serde2,RegexSerDe'
with serdeproperties ("input.regex" = "([0-9]*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)");
-- 加载数据
load data local inpath '/root/hivedata/test01.txt' into table singer;
RegexSerDe解决数据中包含分隔符
分析数据格式,构建正则表达式
原始数据格式:
192.168.88.100 [08/Nov/2020:10:44:33 +0800] "GET /hpsk_sdk/index.html HTTP/1.1" 200 328
正则表达式定义每一列
([^ ]*) ([^}]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]*) ([^ ]*
^:匹配输入字符串的开始位置,除非在中括号表达式中使用,当该符号在中括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配^字符本身,请使用\^
create table apachelog(
ip string, -- IP地址
stime string, -- 时间
mothed string, -- 请求方式
url string, -- 请求地址
policy string, -- 请求协议
stat string, -- 请求状态
body string -- 字节大小
)
-- 指定使用RegexSerDe加载数据
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
-- 指定正则表达式
with serdeproperties(

文章介绍了在Hive中处理具有特殊分隔符或多字节分隔符的数据,包括使用RegexSerDe正则表达式加载数据,自定义InputFormat解决多字节分隔符问题,以及URL解析函数parse_url和parse_url_tuple的使用。同时提到了行列转换的应用,如行转列和列转行的方法。
最低0.47元/天 解锁文章
1066

被折叠的 条评论
为什么被折叠?



