簡體   English   中英

如何將數組解包到雪花中的行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM