Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 配置单元:从嵌套的JSON中提取数据并追加_Sql_Json_Hive_Hql_Cross Join - Fatal编程技术网

Sql 配置单元:从嵌套的JSON中提取数据并追加

Sql 配置单元:从嵌套的JSON中提取数据并追加,sql,json,hive,hql,cross-join,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 所需的

我有一个包含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
所需的输出如下所示:

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\u json\u object()
explode()
方法

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

您可以同时使用
get\u json\u 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
功能说明:

id      url
21      aaa.com
21      bbb.com
42      qqq.com
42      vvv.com
堆栈
——用于创建样本数据

获取json\u对象
——从json字符串中提取数据

regexp\u replace
--替换
[,],“
字符

split
--split on
将返回数组

分解
--使用数组列分解

尝试以下查询:

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
功能说明:

id      url
21      aaa.com
21      bbb.com
42      qqq.com
42      vvv.com
堆栈
——用于创建样本数据

获取json\u对象
——从json字符串中提取数据

regexp\u replace
--替换
[,],“
字符

split
--split on
将返回数组


分解
——使用数组列分解

我意识到json列是一个字符串。我得到一个错误
explode()将数组或映射作为参数
。我意识到json列是一个字符串。我得到一个错误
explode()将数组或映射作为参数
。谢谢,这太棒了!谢谢,这太棒了!