在 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 中进行横向展平时重复主键的主要内容,如果未能解决你的问题,请参考以下文章
springboot 分布式全局唯一id的生成-雪花算法snowflake
springboot 分布式全局唯一id的生成-雪花算法snowflake