【问题标题】:Use SSIS Lookup Transformation to update ADO .NET Destination table使用 SSIS 查找转换更新 ADO .NET 目标表
【发布时间】:2023-03-08 23:07:01
【问题描述】:

我有一个 SSIS 包,我想使用它来根据代理键映射表的值更新数据仓库临时表中的列,该表包含与自然键配对的代理键。具体来说,我想使用缓存查找来更新事实登台表以包含库存维度的代理键,其方式与以下 SQL 相同。

 UPDATE A
      SET A.DWHSurrogateKey = B.DWHSurrogateKey
  FROM SaleStagingTable A INNER JOIN inventoryStagingTable on B.OLTPInventoryKey = A.OLTPInventoryKey

不幸的是,从查找转换到目标的数据流的性质意味着它会创建一个全新的行,而不是更新现有的匹配行。是否可以操纵 SSIS 来做到这一点?

几个约束:

  • 我的目标是 ADO .NET 目标,我们不能使用 OLE DB 目标或源(我们需要能够使用命名参数,而您不能通过 OLE DB 连接做到这一点)
  • 我需要对多个维度执行此操作以将它们链接到事实表,因此我不能每次都将映射的数据推送到新表,因为这变得非常混乱且难以管理

我希望能够按照这些人的建议进行操作,但使用 ADO 连接器而不是 OLE DB:

http://redsouljaz.wordpress.com/2009/11/30/ssis-update-data-from-different-table-if-data-is-null/

http://www.rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html

【问题讨论】:

  • 您有能力在目标服务器上创建工作/etl/stage 表吗?如果您没有创建它们的能力,您是否可以向具有足够权限的人请求创建它们。

标签: sql-server data-warehouse etl ssis


【解决方案1】:

对于这样一个简单的更新,我会使用执行 SQL 任务并省去处理数据流的麻烦。如果您有许多类似的更新但具有不同的字段和表,我将使用 Foreach 项目枚举器将列和表名称存储在 Foreach 循环容器中,然后我将添加一个脚本任务,它将获取项目名称并生成一些动态可以存储在变量中的 SQL,接下来添加执行 SQL 任务并让它使用 SQL 变量。

【讨论】:

  • 我完全同意。恕我直言,为了 SSIS 而使用 SSIS 是一个错误。这些类型的任务在使用基于集合的 T-SQL 解决方案而不是 SSIS 时更容易构建和维护,并且执行得更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
相关资源
最近更新 更多