Hive 多字节分隔符
- 默认序列化类只支持单字节分隔符(char),通过row format指定。
- 多字节分隔符可解决数据中含分隔符的情况。
文章目录
- Hive 多字节分隔符
- 解决方案一:替换分隔符
- 解决方案二:RegexSerDe正则加载
- 解决方案三:自定义InputFormat
解决方案一:替换分隔符
- 使用程序提前将数据中的多字节分隔符替换为单字节分隔符。
- 当数据量较大时,推荐使用MR程序分布式处理数据。
解决方案二:RegexSerDe正则加载
- 可通过官网地址查看Hive SerDe类
- 多种SerDe用于解析和加载不同类型的数据文件,常用的有ORCSerDe、RegexSerDe、JsonSerDe等。
- RegexSerDe用来加载特殊数据的问题,使用正则匹配来加载数据。
- 可解决数据中含分隔符的情况。
- 例:
分析数据格式: 01 || 周杰伦 || 中国 || 台湾 || 男 || 七里香
正则表达式: ([0-9])\|\|(.)\|\|(.)\|\|(.)\|\|(.)\|\|(.)
重新建表:
CREATE TABLE singer(id STRING,name STRING,country STRING,province STRING,gender STRING,works STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "([0-9]*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)\\|\\|(.*)");
解决方案三:自定义InputFormat
- 可以通过自定义InputFormat自定义解析逻辑,实现读取每一行数据。
- 与MapReduce中自定义InputFormat一致,继承TextInputFormat。
- 需要上传自定义next方法的jar包,不如直接用正则表达式。