【问题标题】:SSIS detecting changesSSIS 检测变化
【发布时间】:2018-09-20 15:20:28
【问题描述】:

我目前正在学习如何使用 SSIS。我正在寻找更好的方法来做某事。

我正在将数据从 Oracle 数据库加载到 SQL Server。

Oracle 数据被加载、转换和排序。 SQL Server 数据也被加载、排序。

然后将它们放入合并连接(完全外部)。

然后发生条件拆分; 如果密钥不在源中,而是在目标中。记录被删除(实际上已存档)。 如果密钥在源中,但不在目标中。记录沿要插入的路径发送。

如果它们的键在两者中都存在。然后它被发送到另一条路径 - 这就是我的问题。

该表有 45 个字段(不是我的决定!),如果有任何更改,我需要更新记录。目前我使用查找,将存在的每个字段与其他字段匹配,这是一个非常尴尬的“从左到右拖动名称匹配”。有时它也被证明是缓慢的。更不用说维护起来很糟糕了。

简而言之:我正在寻找您将如何正确检查您的来源和目的地之间的差异?当每个字段都可以随时更改时。

谢谢。

【问题讨论】:

标签: sql-server ssis etl


【解决方案1】:

这是现场拍摄的 - 归功于 Veljko89

来源:Union All returns duplicates???

解决方案: 您可以分两步完成 SSIS:

  • 使用合并转换(如上所述)
  • 使用 SORT 转换,并根据 ContractID 对数据进行排序,确保选中“删除具有重复排序值的行”框。

【讨论】:

    【解决方案2】:

    假设前面的评论是正确的,表格是否有一个“上次更新日期”列,每次插入/更新行时,日期值都会改变?如果是,那么您的 ETL 只需要选择“上次更新日期”大于 ETL 上次运行时间的行,然后使用两列 ID 和“上次更新日期”而不是所有 45 列来加入源和目标。

    SSIS MERGE 组件当然适合这种情况,但公平警告它使用起来非常复杂。 Sentry One(前 Pragmatic Works)第三方工具 Task Factory ($$) 也可以使用,而且使用起来不太复杂。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2012-05-31
      • 2016-10-08
      相关资源
      最近更新 更多