hive处理json数据_Hive json数组解析 - 实现json数据的列转行

Hive json数组解析 - 实现json数据的列转行

hive中解析json字符串常用的函数是get_json_object, 但对于数组形式存储的, 如下名字marked_json的字段:[{"id":559,"labelType":3,"labelCode":"BUMANYI","labelName":"不满意","isGrouped":1},{"id":560,"labelType":3,"labelCode":"YTSBCW","labelName":"意图识别错误","isGrouped":1}]

这种格式的就无法直接解析.

平时在需求中, 常会有要提取其中多个id的需求, 碰到这种情形, 当然要感慨, 如果系每个json串是array的一个子元素多好啊.

这种感慨, 也就是处理的思路, 既然还不是array, 能不能分离成array?

于是乎, 掐头去尾后以'},{'分隔, split处理形成数组.split(substring(marked_json,3,length(marked_json)-4),'\\},\\{')

在此基础上, 再利用hive的lateral view explode语法。lateral view explode(split(substring(marked_json,3,length(marked_json)-4),'\\},\\{')) view_table_name as mj

现在, 我们的mj变成了 "id":559,"labelType":3,"labelCode":"BUMANYI","labelName":"不满意","isGrouped":1 这种光光秃秃的字符串, 要想提取其中的信息, 还要再转回json格式 concat('{', mj, '}') 下面, 可以提取我们感兴的内容了, 比如id:select get_json_object(concat('{', mj, '}'), '$.id') as id from hive_table lateral view explode(split(substring(marked_json,3,length(marked_json)-4),'\\},\\{')) vv as mj

当然, 如果我们的Array的元素是固定的, 比如上面的例子中, 元素不会超过两个, 那就可以这样简单处理select get_json_object(concat('{"jl":',marked_json,'}'),'$.jl[0].id'),get_json_object(concat('{"jl":',marked_json,'}'),'$.jl[1].id') from hive_table

发表于:2019-08-27 15:09:48浏览(1464)

评论(0)

数据分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值