SNOWFLAKE 数据库中主键错误的合并语句

Merge statement in SNOWFLAKE database on primary key error

我对在我的场景中必须编写合并语句以将数据从 table 加载到维度和事实 tables 中的方式感到困惑。

下面是合并语句,我试图从 JSON table 将数据加载到我的 DIM 产品 table 中,但我加载的是 NULL 值。

我在合并时做错了什么吗?我不应该在主键上合并,而是在像 cityname

这样的字段上合并

我在尝试将数据加载到事实中时遇到同样的问题 table

有人可以帮忙吗?

merge into dim_product as a using (select productID, product from jsontable) as b
on b.productID = a.productID
when matched then update a.productID = b.productID
when not matched then insert (productID, product) values (b.productID, b.product));

以下是现有维度产品table

下面是示例 JSON,我试图从中合并新记录 Mango 并将其插入到我的 DIM table 中,并填充 PRODUCTID 变成我的事实 table

下面是事实table

如果我们在源上没有 ProductID 并且只在 Dim_Product 中设置它,我们应该使用业务密钥。在您的例子中,ProductName 是业务键。解决方案很简单,当您进行 MERGE 时,您应该使用 ProductName 作为键而不是 ProductID。

您的 MERGE 应该与此类似:

merge into dim_product as a using (select ProductName from jsontable) as b
on b.ProductName = a.ProductName
when not matched then insert (ProductName) values (b.ProductName));

如果您有更多描述产品的属性,应在 MERGE 中修改它们。