Hive-笔记(3)

Posted by hydra on 2019-12-22

Hive正则表达式数据抽取笔记

最近在处理一批数据时,原始数据很乱,没有规范化,需要进行按一定格式抽取,这必然就是正则的舞台了。

源内容:
湖南.怀化地区虚拟站/燃煤/总有功/日电量@日电量
筱溪/当日/电量
湖南.沙田/日电量
湖南.凤滩A2厂/当日/电量
省网发电火电计划值
500kV网损率
全省网损率
祁韶直流实际电量@日电量
葛洲坝计划值
湖南.常德地区虚拟站/打包.当日/电量

提取内容:
怀化地区虚拟站
筱溪
沙田
凤滩A2厂
省网发电火电计划值
500kV网损率
全省网损率
祁韶直流实际电量
葛洲坝计划值
常德地区虚拟站

HiveSQL如下

1
2
3
4
5
6
7
8
9
10
select src,c1 FROM
(
select src,
case when src like '%�%' then ''
else replace(regexp_extract(regexp_replace(src,'[\\u4E00-\\u9FA5]+\\.',''),
'[\\u4E00-\\u9FA5]*\\w*[\\u4E00-\\u9FA5]+\\w*(\\/||@)',0),'/','') end as c1
FROM ods.table_ods
)t
group by src,c1
order by c1 ASC

正则个人使用的还不是特别熟练,虽然实现了想要的效果,但使用过程发现有些写法不符合我的理解,不知道是Hive支持的正则就是有些不同呢,还是我理解的正则还不完善。