蜂巢:从嵌套的JSON中提取数据并追加

时间:2019-06-12 19:03:51

标签: sql json hive hql cross-join

我有一个带有ID和JSON的配置单元表,如下所示:

id   json
----------
21 | {"temp":"3","list":[{"url":"aaa.com"},{"url":"bbb.com"}]}
42 | {"temp":"2","list":[{"url":"qqq.com"},{"url":"vvv.com"}]}

所需的输出如下:

id   url
----------
21 | aaa.com
21 | bbb.com
42 | qqq.com
42 | vvv.com

此配置单元查询会帮助任何人吗?

直接应用explode()无效,因为json列是字符串。

2 个答案:

答案 0 :(得分:0)

您可以将get_json_object()explode()方法一起使用

select id,
       get_json_object(jst.js,'$.temp.url') as url
  from ( select explode(json) as js FROM json_tab ) jst

答案 1 :(得分:0)

尝试以下查询:

hive> with cte as (
select stack(2,int(21),string('{"temp":"3","list":[{"url":"aaa.com"},{"url":"bbb.com"}]}'),
int(42),string('{"temp":"2","list":[{"url":"qqq.com"},{"url":"vvv.com"}]}')) as (id,json))  
select id,url from (
select id,
split(
regexp_replace(
        get_json_object(json,'$.list.url'),
  '(\\[|\\]|\")','')
 ,',')jsn from cte)t 
lateral view explode(jsn)asd as url;

输出:

id      url
21      aaa.com
21      bbb.com
42      qqq.com
42      vvv.com

功能说明:

Stack -用于创建示例数据

get_json_object -从json字符串中提取数据

regexp_replace -替换[,],"个字符

split -在,上分割,它将返回数组

explode -使用数组列爆炸

相关问题