首页 > 解决方案 > 在 SNOWFLAKE 中进行横向展平时重复主键

问题描述

我对使用 SNOWFLAKE 数据库中的数组很感兴趣。

我正在尝试使用合并语句将数据加载到SNOWFLAKE数据库中的维度表中,其中这些维度表的主键使用nextval在暂存表本身中生成并在维度表中使用。直到这一点我都很好。

现在,在我的场景中,我可能有数组具有多个值),如下图所示,当我使用lateral 展平这些数组并将它们合并到我的维度中时,我会得到重复的主键(例如,如果我有两个值在我的数组,然后我两次得到相同的主键值)。

有人可以帮助我解决这个问题,还是我应该在临时表中生成维度表的主键并在维度表本身中执行

具有值数组的数据集的屏幕截图

在此处输入图像描述

使用横向展平合并数组后我的结果的屏幕截图

在此处输入图像描述

标签: mergeduplicatessnowflake-cloud-data-platformprimary-key

解决方案


这就是 FLATTEN 函数的目的,如果你有一行 ID 为 1,数据为 [v1, v2],那么结果将是:

1 -> v1
1 -> v2

示例如下:

with t as (
    select 1 as id, parse_json('["v1", "v2"]') as data
)
select id, value::varchar 
from t, 
lateral flatten(input => data)
;

+----+----------------+
| ID | VALUE::VARCHAR |
|----+----------------|
|  1 | v1             |
|  1 | v2             |
+----+----------------+

我认为你需要回顾你想要达到的目标,而 FLATTEN 可能不是你所追求的。


推荐阅读