我在
.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 的行。
是否有一个功能可以让我做到这一点?我目前编写的代码有什么可以用更好的方式编写的吗?
谢谢!
您需要使用展平来提取每行的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');