【问题标题】:SSIS Lookup Transform use Table or QuerySSIS 查找转换使用表或查询
【发布时间】:2019-05-20 17:34:32
【问题描述】:

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

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

在下拉列表中使用表格会像 Select * From T1 一样,还是 SSIS 足够聪明,知道我只需要 2 列。

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

【问题讨论】:

  • 如果要匹配的两个表在同一个数据库中,我建议根本不使用查找。只需使用数据库连接。少量数据可以,但功能非常有限

标签: sql-server ssis ssis-2016


【解决方案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 可能会使整个包崩溃 - 查找可能会成为巨大的性能瓶颈。不过,如果处理得当,Lookup 可以通过消除 MERGE JOIN 数据流所需的额外开发来简化数据流的设计并加快开发速度。

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

【讨论】:

    【解决方案2】:

    如果您只需要查找表中的两列,那么最好使用选择查询然后从下拉列表中选择表,但指定的列必须包含主键 (ID)。因为读取所有列会消耗更多资源。即使它在小表中可能没有意义。

    您可以参考以下数据库管理员社区的答案以获取更多信息:


    请注意,@JWeezy 提到的从大表中查找是正确的。查找不是为大表设计的,我将使用 SQL JOIN 代替。

    【讨论】:

    • 非常感谢所有,完美的答案,我明白它现在是如何工作的。我将 J Weezy 标记为答案(第一个),因为我不确定我是否可以标记两个,因为我也想将 Hadi 标记为答案。
    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多