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
--使用数组列展开
我有一个带有 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
--使用数组列展开