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