2

我在一个有 30 列的表上有一个查找转换,但我只使用两列:连接的 ID 列和作为输出的更新列。

在连接上,我应该Select ID, Update From T1在下拉列表中输入查询还是使用表格?

在下拉列表中使用表会像这样做Select * From T1,或者 SSIS 足够聪明,知道我只需要 2 列。

我想我应该使用 Query Select ID, Update From T1

4

2 回答 2

1

在连接上,我应该在下拉列表中输入查询 Select ID、Update From T1 还是 Use Table?

最好指定您想要的列。

在下拉列表中使用表格,这会像做 Select * From T1

是的,它是一个 SELECT *。

还是 SSIS 足够聪明,知道我只需要 2 列?

没有。

请记住,查找适用于从行数和记录集较小的维度表中提取数据。如果您正在处理大量唯一数据,那么最好执行 MERGE JOIN。性能差异可能很大。例如,当对 20K 行数据使用 Lookup 时,您可能会遇到几十分钟的运行时间。然而,一个 MERGE JOIN 将在几秒钟内运行。

查找的缺点是表现得像相关子查询,因为它们会针对通过它的每一行向服务器发起查询。您可以让 Lookup 缓存数据,这意味着 SSIS 会将结果存储在内存中,然后在转到服务器之前检查内存,以获取所有通过 Lookup 的后续行。因此,这仅在小型缓存集有大量匹配记录时才有效。换句话说,当需要查找大量不同的 ID 时,查找并不是最佳的。到那时,缓存数据几乎毫无意义。

这是您将切换到使用 MERGE JOIN 的地方。注意:您需要在 MERGE JOIN 之前对两个数据流执行 SORT,因为 MERGE JOIN 组件需要对传入的行进行排序。

如果处理不当,单个放置不当的 Lookup 可能会使整个包瘫痪 - 查找可能是巨大的性能瓶颈。但是,如果处理得当,查找可以通过消除 MERGE JOIN 数据流所需的额外开发来简化数据流的设计并加快开发速度。

所有这一切的底线是您希望 Lookup 对服务器执行最少数量的查询。

于 2019-05-20T19:28:16.397 回答
1
于 2019-05-20T23:13:13.243 回答