6.Hive函数重要应用案例

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

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(
  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值