在 SNOWFLAKE 中进行横向展平时重复主键

Posted

技术标签:

【中文标题】在 SNOWFLAKE 中进行横向展平时重复主键【英文标题】:Duplicate Primary Key while doing latteral flattening in SNOWFLAKE 【发布时间】:2021-12-25 00:15:08 【问题描述】:

我对使用 SNOWFLAKE 数据库中的数组很陌生。

我正在尝试使用 merge 语句将数据加载到 SNOWFLAKE 数据库中的维度表中,其中这些维度表的主键是使用 在临时表本身中生成的>nextval 并在维度表中使用。到目前为止,我都很好

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

有人可以帮我解决这个问题吗,或者我应该在暂存表中生成维度表的主键并在维度表本身中完成

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

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

【问题讨论】:

你能帮我们用一些样本数据重现这个案例吗? 请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。请在代码问题中提供minimal reproducible example。 How to AskHelp center 【参考方案1】:

这就是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 可能不是你想要的。

【讨论】:

以上是关于在 SNOWFLAKE 中进行横向展平时重复主键的主要内容,如果未能解决你的问题,请参考以下文章

雪花算法(SnowFlake)

snowflake算法

springboot 分布式全局唯一id的生成-雪花算法snowflake

springboot 分布式全局唯一id的生成-雪花算法snowflake

从 AWS S3 复制到 Snowflake 需要比平时更多的时间

MySQL主键设计盘点