我在Snowflake中有一张表格,其结构如下,
----------------------------------------
Name | Number
----------------------------------------
Dim_1 | {'Table_1': 100}
Dim_1 | {'Table_1': 101}
Dim_2 | {'Table_2': 200, 'Table_3': 300}
Dim_2 | {'Table_2': 201, 'Table_3': 301}
而我试图将输出显示为:
-----------------------
Name | Table | Entries
-----------------------
Dim_1 | Table_1 | 100
Dim_1 | Table_1 | 101
Dim_2 | Table_2 | 200
Dim_2 | Table_3 | 300
Dim_2 | Table_2 | 201
Dim_2 | Table_3 | 301
有什么想法吗?
答案 0 :(得分:1)
FLATTEN
function的直接应用可以在这里工作。该函数使用每个源行的分解行创建一个侧视图。对于平面对象,所有键值对均爆炸成一行。
使用平坦化结果的KEY
部分将提供所需输出的Table
部分,而VALUE
部分将提供Entries
。由于FLATTEN
产生了横向视图,因此您仍然可以访问前面的源表行值,以继续在结果中保留Name
列。
执行转换的示例查询:
SELECT
t.name AS "Name",
lv.key AS "Table",
lv.value AS "Entries"
FROM
data_table t,
LATERAL FLATTEN(input => t.number) lv