如何使用 SQL 在 Snowflake 中解析 table 中的列表

How to parse a list within a table in Snowflake using SQL

所以我有一个 table 这样的:

ID   VALUE               KEY    DATE        USER
001  ["a"]               group1 2021-01-01  212
002  []                  group2 2021-01-01  212
003  ["a","c"]           group1 2021-01-02  212
004  ["apple", "pear"]   group3 2021-01-02  211

我想重组这些数据,使每个列表元素成为它自己的行。如果 VALUE 是一个空列表,则期望它不会出现在最终数据集中。

最终结果应该是:

ID   VALUE   KEY    DATE        USER
001  "a"     group1 2021-01-01  212
003  "a"     group1 2021-01-02  212
003  "c"     group1 2021-01-02  212
004  "apple" group3 2021-01-02  211
004  "pear"  group3 2021-01-02  211

我认为在 Snowflake 中使用 FLATTEN() 在这里应该可以,但我似乎无法理解。

嵌套替换函数只是删除方括号,因此 split_to_table table 函数可以完成它的工作。

select T1.ID, V1."VALUE", T1.KEY, T1."DATE", T1."USER"
from TABLE1 T1, table(split_to_table(replace(replace(VALUE, '[', ''), ']', ''), ',')) V1
where V1."VALUE" <> ''
;

我使用的是 FLATTEN 版本:

SELECT 
  ID, f.VALUE, t.KEY, DATE, USER
FROM
test t, table(
  FLATTEN(
    INPUT => STRTOK_TO_ARRAY(value, '[], "')
  )
) f;