雪花压平json SQL

问题描述 投票:0回答:1

我在

.csv
文件中保存了许多产品 ID 的列表。

我需要在 Snowflake 中查询产品 ID,其中每个产品 ID 都包含在名为 PRODUCTCODES 的字段中的 JSON 对象内。产品代码中的每个值都包含在一个数组中,因此单个记录和 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 的行。

是否有一个功能可以让我做到这一点?我目前编写的代码有什么可以用更好的方式编写的吗?

谢谢!

sql json snowflake-cloud-data-platform where-clause
1个回答
1
投票

您需要使用展平来提取每行的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');
© www.soinside.com 2019 - 2024. All rights reserved.