hive:从嵌套的json中提取数据并附加

e0bqpujr  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(532)

我有一个带有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

有人能帮忙做这个Hive查询吗?
直接应用explode()不起作用,因为json列是字符串。

f8rj6qna

f8rj6qna1#

尝试以下查询:

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 --使用数组列进行分解

krcsximq

krcsximq2#

你可以用 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

相关问题