Azure 数据工厂更改行 |在源和接收器之间匹配数据时跳过列
Azure Data Factory Alter Row | Skip Columns while matching Data Between Source and Sink
我们正在使用 ADF 管道和 Alter 行转换来更新接收器中的数据。在匹配源数据和目标数据时,我们想在评估目标和接收器之间的数据时忽略一列。
例如,在下面的例子中,我们想忽略源和目标之间匹配的 TimeStamp 列。因此,如果只有时间戳不同,我们不希望在接收器中更新数据。有没有办法通过改变行来实现这个?
Table A - 来源
TimeStamp
First
Last
04:01:2021 18:30
Leo
Messi
03:08:2021 17:30
Neymar
Jr
Table B - 现有目标
TimeStamp
First
Last
06:04:2022 18:30
Leo
Messi
06:04:2022 17:30
Neymar
Jr
在 Alter Row 转换中没有忽略列的选项。如果您只执行更新,最好的方法是删除接收器映射中 TimeStamp 列的映射,以便在更新条件匹配时该记录不是 changed/updated。
如果您在接收器转换中使用 Upsert,
选项 1:
您可以将table中的Timestamp列设置为默认值,这样即使您在Sink转换中删除了该列的映射,每次插入新记录时都会添加默认值,什么也没有更新时发生变化。
选项2:
• 您添加第二个源(目标 table)并左连接源和目标 tables。
来源 1:
来源 2:
加入变换:左外
• 然后使用派生列转换,仅在目标时间戳值为空时获取源时间戳值。这样即使在更新目标 table 中的数据时,相同的目标时间戳值也会 re-update 在接收器中。
• 使用 Select 转换,删除目标列和不需要的时间戳列
• 更改行:
• 接收器:
我们正在使用 ADF 管道和 Alter 行转换来更新接收器中的数据。在匹配源数据和目标数据时,我们想在评估目标和接收器之间的数据时忽略一列。
例如,在下面的例子中,我们想忽略源和目标之间匹配的 TimeStamp 列。因此,如果只有时间戳不同,我们不希望在接收器中更新数据。有没有办法通过改变行来实现这个?
Table A - 来源
TimeStamp | First | Last |
---|---|---|
04:01:2021 18:30 | Leo | Messi |
03:08:2021 17:30 | Neymar | Jr |
Table B - 现有目标
TimeStamp | First | Last |
---|---|---|
06:04:2022 18:30 | Leo | Messi |
06:04:2022 17:30 | Neymar | Jr |
在 Alter Row 转换中没有忽略列的选项。如果您只执行更新,最好的方法是删除接收器映射中 TimeStamp 列的映射,以便在更新条件匹配时该记录不是 changed/updated。
如果您在接收器转换中使用 Upsert,
选项 1:
您可以将table中的Timestamp列设置为默认值,这样即使您在Sink转换中删除了该列的映射,每次插入新记录时都会添加默认值,什么也没有更新时发生变化。
选项2:
• 您添加第二个源(目标 table)并左连接源和目标 tables。
来源 1:
来源 2:
加入变换:左外
• 然后使用派生列转换,仅在目标时间戳值为空时获取源时间戳值。这样即使在更新目标 table 中的数据时,相同的目标时间戳值也会 re-update 在接收器中。
• 使用 Select 转换,删除目标列和不需要的时间戳列
• 更改行:
• 接收器: