SSIS - ole db source/destination - 仅从 table 目标服务器中存在的源服务器检索行

SSIS - ole db source/destination - only retrieve rows from source server WHERE EXISTS in table destination server

我正在将 9000 万行从源服务器传输到目标服务器上的临时区域。 从暂存区,我通过在目标服务器上的 table 中执行 WHERE ID EXISTS,将 2000 万进一步转移到 ETL 过程中。

因为 table 存在于源服务器上,仅存在于目标服务器上。当我直接从源服务器拉取行时是否可以过滤(所以我只从源服务器传输 2000 万行到我的目标服务器)?

您可以通过在源计算机上创建链接服务器来实现。链接服务器允许连接不同实例上的表:

除了在源服务器上创建链接服务器。有两种纯 SSIS 方法。

  1. 在目标服务器上创建临时暂存 table,将源中的所有记录复制到该临时暂存 table,并使用 where exists 过滤器。
  2. 在数据流上,创建一个查找转换,查找集从目标服务器的 table 获取 ID。然后只处理匹配的记录。出于性能原因,您可以在完全缓存或部分缓存模式下使用查找;只有性能测试才能判断哪种模式更好。

Hadi 对 Linked Server 的建议很好并且会奏效。纯 SSIS 方法的优点是它不会对源服务器带来任何更改,所有连接配置都在 SSIS 内部。在某些情况下,它可能是有益的。它的缺点 - 性能可能比链接服务器差。

如果需要从源中传输尽可能少的行,最简单的方法是链接服务器方法。否则,可以在源服务器上创建一个 table(它甚至可以是在 SSIS 包任务中创建的全局临时文件 ## table)并从目标服务器复制过滤器 ID。 temp table 应该是带有 ## 的 global,因为它将在一个任务中填充并在后续任务中使用。然后在源服务器上使用 EXISTS 子句过滤记录。