merge - 在 SNOWFLAKE 中进行横向展平时重复主键
问题描述
我对使用 SNOWFLAKE 数据库中的数组很感兴趣。
我正在尝试使用合并语句将数据加载到SNOWFLAKE数据库中的维度表中,其中这些维度表的主键使用nextval在暂存表本身中生成并在维度表中使用。直到这一点我都很好。
现在,在我的场景中,我可能有数组(具有多个值),如下图所示,当我使用lateral 展平这些数组并将它们合并到我的维度中时,我会得到重复的主键(例如,如果我有两个值在我的数组,然后我两次得到相同的主键值)。
有人可以帮助我解决这个问题,还是我不应该在临时表中生成维度表的主键并在维度表本身中执行
具有值数组的数据集的屏幕截图
使用横向展平合并数组后我的结果的屏幕截图
解决方案
这就是 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 可能不是你所追求的。
推荐阅读
- r - 如何用R中命名向量中的值替换char矩阵中的元素
- sql - 插入集群中多个表的最佳方法
- apache-kafka-streams - 将 KTable 聚合动态物化到不同的状态存储
- mongodb - MongoDb 4.0.5 问题 - 通过将值从字符串转换为 int 将数组字段项从字符串更新为 int 不起作用
- python - python中的置信区间plotly
- google-apps-script - 运行 Google Docs Add On Drive 权限
- vue.js - 未定义属性或方法“handleSubmit”
- flutter - 在 Column Flutter 中展开一行
- .net - ,Net Core MVC 多浏览器登出
- memory - msp430 flash中的数据丢失