雪花横向变平与JSON中的更改键

时间:2020-02-13 17:26:57

标签: json snowflake-cloud-data-platform flatten lateral

我在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

有什么想法吗?

1 个答案:

答案 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