提问人:Tyler Moore 提问时间:10/12/2023 最后编辑:Tyler Moore 更新时间:10/13/2023 访问量:51
Snowflake 扁平化 json SQL
Snowflake flatten json SQL
问:
我有一个保存在文件中的许多产品 ID 的列表。.csv
我需要在 Snowflake 中查询产品 ID,其中每个产品 ID 都位于名为 PRODUCTCODES 的字段中的 JSON 对象中。PRODUCT CODES 中的每个值都包含在一个数组中,因此单个记录和 ROWID 可以有多个产品代码。
例:
[
{ "type": "product_id", "value": "BRB580900062" }
]
艺术
[
{ "type": "product_id", "value": "BRB580900062" } ,
{ "type": "product_id", "value": "G2G102341235" }
]
我编写了这个脚本来一次提取一个产品ID的记录,如下所示:
select ROWID, PRODUCTCODES, DESCRIPTORS
from PRODUCTTABLE
where PRODUCTCODES like '%BRB580900062%'
但是,这当然一次只有一行 - 我需要脚本来提取文件中所有 100 万个产品 ID 的行。
有没有一个功能可以让我这样做?我目前编写的代码中有什么可以用更好的方式编写的吗?
谢谢!
答:
1赞
ADITYA PAWAR
10/13/2023
#1
您需要使用 flatten 来提取每一行的 productId,然后您可以轻松地对其应用所需的任何筛选器。
以下脚本将为 productId 创建专用列以启用筛选。
如果您正在寻找其他东西,请告诉我。
with PRODUCTTABLE as (
select 1 ROWID,'DESCRIPTORS1' DESCRIPTORS,
parse_json('[
{ "type": "product_id", "value": "BRB580900062" }
]') PRODUCTCODES
union
select 2 ROWID,'DESCRIPTORS2' DESCRIPTORS,
parse_json('[
{ "type": "product_id", "value": "BRB580900062" }
,{ "type": "product_id", "value": "G2G102341235" }
]') PRODUCTCODES
)
select rowId,DESCRIPTORS,f.value:"value"::varchar product_id, PRODUCTCODES
from PRODUCTTABLE a
,lateral flatten(a.PRODUCTCODES) f
where product_id in ('BRB580900062');
评论
PRODUCTCODES
LIKE