[英]How to unpack Array to Rows in Snowflake?
我在 Snowflake 中有一個如下所示的表:
ID | CODES
2 | [ { "list": [ { "item": "CODE1" }, { "item": "CODE2" } ] } ]
我想把它變成:
ID | CODES
2 | 'CODE1'
2 | 'CODE2'
到目前為止我已經嘗試過
SELECT ID,CODES[0]:list
FROM MY_TABLE
但這只能讓我:
ID | CODES
2 | [ { "item": "CODE1" }, { "item": "CODE2" } ]
如何將此列表的每個索引中的每個“項目”元素分解為自己的行,每個 CODE 作為字符串?
更新:這是我與下面的答案同時工作的答案,看起來我們都使用了 FLATTEN:
SELECT ID,f.value:item
FROM MY_TABLE,
lateral flatten(input => MY_TABLE.CODES[0]:list) f
因此,正如您所注意到的,您已經通過codes[0]
對代碼的訪問進行了硬編碼,這為您提供了該數組中的第一項,如果您使用 FLATTEN,您可以訪問第一個數組的所有對象。
WITH my_table(id,codes) AS (
SELECT 2, parse_json('[ { "list": [ { "item": "CODE1" }, { "item": "CODE2" } ] } ]')
)
SELECT ID, c.*
FROM my_table,
table(flatten(codes)) c;
給出:
2 1 [0] 0 { "list": [ { "item": "CODE1" }, { "item": "CODE2" }]} [ { "list": [{"item": "CODE1"}, { "item": "CODE2" }]}]
所以現在你想遍歷list
的項目,所以我們使用另一個 FLATTEN :
WITH my_table(id,codes) AS (
SELECT 2, parse_json('[ { "list": [ { "item": "CODE1" }, { "item": "CODE2" } ] } ]')
)
SELECT ID, c.value, l.value
FROM my_table,
table(flatten(codes)) c,
table(flatten(c.value:list)) l;
給出:
2 {"list":[{"item": "CODE1"},{"item":"CODE2"}]} {"item":"CODE1"}
2 {"list":[{"item": "CODE1"},{"item":"CODE2"}]} {"item":"CODE2"}
所以你可以拆開那個l.value
你需要如何訪問你需要的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.