Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何从Snowflake字段解析_JSON?_Sql_Arrays_Snowflake Cloud Data Platform - Fatal编程技术网

Sql 如何从Snowflake字段解析_JSON?

Sql 如何从Snowflake字段解析_JSON?,sql,arrays,snowflake-cloud-data-platform,Sql,Arrays,Snowflake Cloud Data Platform,我有一张桌子,看起来像: ID|FIELD1 1|[ { "list": [ {} ] } ] 2|[ { "list": [ { "item": "" } ] } ] 3|[ { "list": [ { "item": "Tag1" }, { "item": "Tag2" } ] } ] 我想获取与此特定查询关联的

我有一张桌子,看起来像:

ID|FIELD1
1|[ { "list": [ {} ] } ]
2|[ { "list": [ { "item": "" } ] } ]
3|[ { "list": [ { "item": "Tag1" }, { "item": "Tag2" } ] } ]
我想获取与此特定查询关联的所有标记,这样我就可以得到一个列表:

Tag1,Tag2
我试过了

SELECT PARSE_JSON(FIELD1[0]['list'][0]['item']) FROM MY_TABLE
WHERE PARSE_JSON(FIELD1[0]['list'][0]) != '{}'
但我明白了

JSON: garbage in the numeric literal: 65-310 , pos 7
如何在SQL中正确解压缩这些值

更新:笨拙的解决方案

SELECT LISTAGG(CODES,'\',\'') AS PROMO_CODES
FROM
(SELECT DISTINCT FIELD1[0]['list'][0]['item'] AS CODES FROM MY_TABLE
WHERE FIELD1[0]['list'][0] IS NOT NULL
AND FIELD1[0]['list'][0] != '{}'
AND FIELD1[0]['list'][0]['item'] != ''
)

如果这对您的情况有帮助,请查看以下知识文章:


如我所见,笨拙的解决方案不能提供正确的结果。它只显示Tag1。因此,我的解决方案如下:

select LISTAGG( v.VALUE:item, ',' ) from MY_TABLE,
lateral flatten (parse_json(FIELD1[0]):list) v
WHERE v.VALUE:item <> '';
从MY_表中选择LISTAGG(v.VALUE:item,','),
横向展平(parse_json(FIELD1[0]):list)v
其中v.值:项目“”;
我建议添加DISTINCT以防止输出中出现重复标记:

select LISTAGG( DISTINCT v.VALUE:item, ',' ) from MY_TABLE,
lateral flatten (parse_json(FIELD1[0]):list) v
WHERE v.VALUE:item <> '';
从MY_表中选择LISTAGG(不同的v.VALUE:item,','),
横向展平(parse_json(FIELD1[0]):list)v
其中v.值:项目“”;
如果FIELD1数组中有更多项(即0,1,2),您可以使用此项:

select LISTAGG( DISTINCT v.VALUE:item, ',' ) from MY_TABLE,
lateral flatten(FIELD1) f,
lateral flatten (parse_json(f.VALUE):list) v
WHERE v.VALUE:item <> '';
从MY_表中选择LISTAGG(不同的v.VALUE:item,','),
横向展平(场1)f,
横向展平(parse_json(f.VALUE):列表)v
其中v.值:项目“”;

FIELD1是什么类型的<如果已经解析了JSON,则可能不需要代码>解析_JSON