【问题标题】:ssis lookup transformation for very large table非常大表的 ssis 查找转换
【发布时间】:2016-07-03 09:51:01
【问题描述】:

我有两张表 Person & Ownership 有一对多的关系(每个人都有很多所有权)。主键是 GUID 类型的 person_id。我正在开发 SSIS 包以将数据从两个表加载到目标。在目标表中,我想添加代理键,以便将来我的 sql 连接使用代理键而不是 GUID(因为 GUID 很慢)。我做了以下任务

  • 在目标表中,我创建了一个带有 bigint 类型的附加列 person_id_sk(身份列)的人员表。
  • 向人员加载数据
  • 类似地创建了 Ownership 表,其中包含一个额外的 bigint 列 person_id_sk
  • 通过“查找转换”将数据加载给人员。

这个过程非常缓慢,因为两个表中都有数百万条记录,并且包需要在一周内运行两次。

这是在父子关系中插入代理键值的唯一方法吗?或者还有其他有效的方法。

问候,

【问题讨论】:

  • 您还可以做的不是使用 Lookup,而是尝试使用 Merge。这可以加快您的总运行时间,因为它将同时开始加载两个表。

标签: ssis etl data-warehouse


【解决方案1】:

SQL 操作几乎肯定会比 SSIS 快。在 SSIS 中加载 Person 数据,数据库引擎创建 IDENTITY 代理键。保留 GUID 以便它转到表中。在 SSIS 中加载所有权数据,但在此阶段不对代理键执行任何操作。

然后在这样的 SQL 操作中更新子行 FK:

UPDATE o
SET person_id_sk=p.person_id_sk
FROM
Ownership o
INNER JOIN
Person p
ON o.GUID=p.GUID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多