在Azure数据工厂中实施SCD 2:行更新时重复问题

ekqde3dh  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(111)

我正在尝试在Azure Data Factory中实现SCD 2,但遇到了更新机制问题。我的过程没有更新行,而是将源数据中的所有行插入到目标数据中,从而导致重复。这个例子只是尝试更新,为了简单起见,我缩小了它-我使用AdventureWorksLT 2019数据库。以下是数据流的细分:

*取数:
***源数据:**从源数据中获取最新的数据集。
***目标数据:**从目标获取当前数据集。
*新数据哈希密钥生成:

  • 对于每个新的数据记录,根据以下字段使用SHA 2 -256生成哈希密钥:New_ProductIDNew_NameNew_ProductNumberNew_ColorNew_StandardCost
    *是否存在检查:
  • 确保为新数据生成的哈希键在目标数据集中不存在。
    *资料编号:
  • 对目标数据集执行查找。此查找的条件是Existing_ProductID == New_ProductIDExisting_Hashkey != HashKey
    *行变更:
  • 使用“AlterRow”操作,并将“updateif”条件设置为始终为真(true())。
    *列选择和重命名:
  • 从源数据集中选择前缀为NEW_的所有列。对于哈希键,保留目标数据集中的现有哈希键。
    *数据接收器(内联-增量数据集类型):
    *设置:
  • 表格操作:没有一
  • 允许更新:是的
  • 列列表键:Hashkey

尽管遵循了上述步骤,我仍然在目标中获得重复的行。我尝试了各种调整,比如在接收操作之前更改列键列表和过滤(例如,只插入ID = 707的行)。然而,这些尝试并没有解决这个问题。
我不知道该怎么补救。任何提示或帮助是赞赏!

rjzwgtxy

rjzwgtxy1#

在接收器设置中,给予键列为Product_id,而不是hash key

  • hash key作为键列时,行将根据hash key进行更新。由于hash key上没有匹配的列,我认为所有行都被插入了,这会导致重复的行。
  • 当键列指定为product_id时,匹配产品id的所有行都将使用新值更新。

neekobn8

neekobn82#

好的,结果我问的是苹果的解决方案,而我的问题是梨。我花了相当长的时间才找到问题的根源。
我正在通过Azure Synapse阅读我的数据。* 我想我应该在Azure Synapse中读取.parquet格式的数据 *。但是,由于我没有通过Azure Gen存储帐户gen 2(parquet)目标写入数据。**所以我实际上并没有使用 parquet 格式。**通过“.parquet”格式进行阅读实际上是错误的。由于我是通过DELTA格式写入数据,**我需要使用文件格式“delta”来读取正确的数据。**Delta格式- Microsoft

CREATE EXTERNAL FILE FORMAT DeltaFormat
WITH
(
FORMAT_TYPE = DELTA
)

因此,当通过正确的格式阅读数据时,我得到了正确的视图。
阅读.parquet格式的原因是给我“重复”,是当通过delta写入时,它写入新文件,并将旧文件设置为“不活动”或“不使用”。而delta格式则考虑了这个元数据。因此,即使Delta数据类型写入Parquet格式,它也不同于常规的Parquet文件。

相关问题