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 方法。
- 在目标服务器上创建临时暂存 table,将源中的所有记录复制到该临时暂存 table,并使用
where exists
过滤器。
- 在数据流上,创建一个查找转换,查找集从目标服务器的 table 获取 ID。然后只处理匹配的记录。出于性能原因,您可以在完全缓存或部分缓存模式下使用查找;只有性能测试才能判断哪种模式更好。
Hadi 对 Linked Server 的建议很好并且会奏效。纯 SSIS 方法的优点是它不会对源服务器带来任何更改,所有连接配置都在 SSIS 内部。在某些情况下,它可能是有益的。它的缺点 - 性能可能比链接服务器差。
如果需要从源中传输尽可能少的行,最简单的方法是链接服务器方法。否则,可以在源服务器上创建一个 table(它甚至可以是在 SSIS 包任务中创建的全局临时文件 ## table)并从目标服务器复制过滤器 ID。 temp table 应该是带有 ## 的 global,因为它将在一个任务中填充并在后续任务中使用。然后在源服务器上使用 EXISTS
子句过滤记录。
我正在将 9000 万行从源服务器传输到目标服务器上的临时区域。 从暂存区,我通过在目标服务器上的 table 中执行 WHERE ID EXISTS,将 2000 万进一步转移到 ETL 过程中。
因为 table 不 存在于源服务器上,仅存在于目标服务器上。当我直接从源服务器拉取行时是否可以过滤(所以我只从源服务器传输 2000 万行到我的目标服务器)?
您可以通过在源计算机上创建链接服务器来实现。链接服务器允许连接不同实例上的表:
除了在源服务器上创建链接服务器。有两种纯 SSIS 方法。
- 在目标服务器上创建临时暂存 table,将源中的所有记录复制到该临时暂存 table,并使用
where exists
过滤器。 - 在数据流上,创建一个查找转换,查找集从目标服务器的 table 获取 ID。然后只处理匹配的记录。出于性能原因,您可以在完全缓存或部分缓存模式下使用查找;只有性能测试才能判断哪种模式更好。
Hadi 对 Linked Server 的建议很好并且会奏效。纯 SSIS 方法的优点是它不会对源服务器带来任何更改,所有连接配置都在 SSIS 内部。在某些情况下,它可能是有益的。它的缺点 - 性能可能比链接服务器差。
如果需要从源中传输尽可能少的行,最简单的方法是链接服务器方法。否则,可以在源服务器上创建一个 table(它甚至可以是在 SSIS 包任务中创建的全局临时文件 ## table)并从目标服务器复制过滤器 ID。 temp table 应该是带有 ## 的 global,因为它将在一个任务中填充并在后续任务中使用。然后在源服务器上使用 EXISTS
子句过滤记录。