Hive:从嵌套 JSON 中提取数据并追加

Hive: Extract Data From Nested JSON and Append

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

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 列是一个字符串。

您可以同时使用 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

尝试以下查询:

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 string

中提取数据

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

split --split on , 这将 return array

explode --使用数组列展开