【问题标题】:Guidelines for using Merge task in SSIS在 SSIS 中使用合并任务的指南
【发布时间】:2011-02-20 16:17:15
【问题描述】:

我有一个包含三个字段的表,一个是身份字段,我需要从具有其他两个字段的源添加一些新记录。我正在使用 SSIS,我认为我应该使用合并工具,因为其中一个源不在本地数据库中。但是,我对合并工具和正确的流程感到困惑。

我有我的一个来源(一个 Oracle 表),我得到两个字段,well_id 和 well_name,后面有一个排序,按 well_id 排序。我有目标表(sql server),我也用它作为源。它有三个字段:well_key(身份字段)、well_id 和well_name,然后我有一个排序任务,对well_id 进行排序。这两个都是我的合并任务的输入。我打算输出到一个临时表,然后以某种方式将新记录返回到 sql server 表中。

Oracle Well                     SQL Well
     |                           |
     V                           V   
Sort Source                     Sort Well
     |                           |
     ------->  Merge* <-----------
                |
                V
              Temp well table

但是,我怀疑这不是使用此工具的最佳方式。这种合并的正确步骤是什么?

我质疑这个方法的一个原因是我的merge有错误,告诉我“Merge Input 2”必须排序,但是它的来源是排序任务,所以是排序的。

示例数据

SQL Well (before merge)
well_key   well_id   well_name
1          123       well k
2          292       well c
3          344       well t
5          439       well d

Oracle Well
well_id     well_name
123         well k
292         well c
311         well y
344         well t
439         well d
532         well j

SQL Well (after merge)
well_key   well_id   well_name
1          123       well k
2          292       well c
3          344       well t
5          439       well d
6          311       well y
7          532       well j

将我的 Oracle Well 加载到一个临时的本地文件中,然后在其上使用 sql 插入语句会更好吗?

【问题讨论】:

    标签: sql-server sql-server-2008 ssis merge


    【解决方案1】:

    首先,我强烈建议在合并之前摆脱排序转换。排序是非常昂贵的阻塞异步转换,可以通过执行 order by 并将输出列的 ole db src 高级属性更改为 issorted = true 并将该列的 sortkeyposition 属性更改为 1 来轻松避免。不要忘记添加您的在您的 tsql 中排序,因为 ole db 源不会自动为您执行此操作:

    Synchronous vs Asynchronous

    Oledb Src IsSorted Property

    然后,我将使用 Merge 测试 pkg 的性能。看起来你要拉的字段没有那么大;但是,如果有 10 的数百万条记录,那么我还建议创建一个 pkg 将数据放入两个临时表中,将它们连接起来,然后按照您在上面的建议尝试插入数据,看看您是否获得更好的性能使用这种方法。

    希望这会有所帮助。

    【讨论】:

    • 我删除了排序任务,并在两个输入上添加了排序。我永远无法获得第二个输入来确认它已排序。你的方向很清楚,它在第一个输入上工作得很好。因为我与合并的斗争没有成功,所以我正在尝试一个完全不同的轨道,并尝试使用 SQL 代码对结果集进行合并。这也引起了问题,所以我可能会回到这个。只有10000条左右的记录,而且是字段中的小数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2020-02-06
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多