hive 字符串提取&json格式解析

前言

在数据存储时研发端经常为了方便很多字段为了冗余存储了文本格式:json或者固定分隔符,但是数仓和数据分析在处理的时候又要进行取出单独的某个字段,进行使用,本文会详解下平时在工作中遇到的问题与处理办法。

字符串固定分隔符处理

案例:

字符串以:|*|分隔,k-v以:分隔,取出其中scene_ids字段值
字符串:

|*|cityId:201|*|qId:4890f057-8c8d-4fd6-8029-9ec8a374ab3b|*|st:poi|*|sId:62778388|*|scene_ids:6,0|*|pos:0|*|hId:92091235|*|Tp:default|*|page_index:0|*|page_size:20|*

测试表:

with tab as (

select 

'|*|cityId:201|*|qId:4890f057-8c8d-4fd6-8029-9ec8a374ab3b|*|st:poi|*|sId:62778388|*|scene_ids:6,0|*|pos:0|*|hId:92091235|*|Tp:default|*|page_index:0|*|page_size:20|*|' as cl_name

)
方法一:正则表达处理

regexp_extract(str, regexp[, idx])

str是被解析的字符串或字段名

regexp 是正则表达式

idx是返回结果 取表达式的哪一部分  默认值为1。

0表示把整个正则表达式对应的结果全部返回

1表示返回正则表达式中第一个() 对应的结果 以此类推

注:使用标识符是需要\转义,比如正则数字\d需要使用\d

select cl_name,regexp_extract(cl_name,'scene_ids:(\\d+)',1) as scene_ids from tab
结果:
scene_ids
6
方法二:先转化成map再取key

str_to_map(text[, delimiter1, delimiter2])

Delimiter1将文本分成K-V对,Delimiter2分割每个K-V对。
对于delimiter1默认分隔符是’,’,对于delimiter2默认分隔符是’=’

select cl_name,str_to_map(cl_name,'\\|*\\|',':')['scene_ids'] as scene_ids from tab
结果:
scene_ids
6,0
方法三:使用split分隔函数

split(string str, string pat)

返回值: array 说明: 按照pat字符串分割str,会返回分割后的字符串数组

select cl_name,split(cl_name,
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值