• 注册
当前位置:1313e > 默认分类 >正文

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)

数据分析

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录