SSIS 14 - 暂存区 - 合并两个来源需要很多时间
SSIS 14 - Staging Area - Merge two sources is taking a lot of time
我有两个表:
- Table答:631476行
- Table B: 12 90 行
每个 Table 都有字段 ID,我想将其用作合并对象中的键。在下图中可以看到进程在合并对象之前阻塞。我已经用 Merge Join 对象进行了测试,结果是一样的......
为了使用 SSIS 14 进行此操作,我还有哪些其他可能性?
谢谢!
我在 SSIS 中进行联接或合并时遇到问题。我将改为编写 TSQL 版本并执行 SQL 任务。这样对我来说总是运行得更快。
如果两个源表都在同一台服务器上,请不要使用这种方式。您应该简单地在 SQL 服务器端编写一个查询。
像这样:
SELECT *
FROM [Table A]
INNER JOIN [Table B] ON [Table A].ID = [Table B].ID
ORDER BY ...
正如 James Serra 所说:When to use T-SQL or SSIS for ETL
- 性能 – 使用 T-SQL,一切都在 SQL 引擎中处理。使用 SSIS,您将所有数据带到 SSIS 内存 space 并在那里进行操作。因此,如果速度是一个问题,通常 T-SQL 是可行的方法,尤其是在处理大量记录时。 T-SQL 中的 JOIN 语句之类的东西比在 SSIS 中使用查找任务要快得多。另一个例子是 T-SQL 中的 MERGE 语句对于大型任务
比 SSIS 中的 SCD 任务有更好的性能
- Features/capabilities – 某些功能只能在 T-SQL 或 SSIS 中完成。您可以在 SSIS 中切碎文本,但不能在 T-SQL 中切碎。例如,每行字段数不一致的文本文件只能在 SSIS 中完成。所以某些任务可能会迫使您使用其中一个
- 当前的技能组合 – 您的 IT 部门的人员是否更熟悉 SSIS 或 T-SQL?
- 易用性development/maintenance – 当然,你最熟悉的那个是最简单的,但如果你在这两个方面的技能相当,那么SSIS通常更容易使用,因为它是图形化的,但有时你可以在 T-SQL 中发展得更快。例如,必须连接一堆表将需要 SSIS 中的一堆任务,而在 T-SQL 中它是一个语句。因此,在 SSIS 中创建连接表的任务可能更容易,但构建然后编写 T-SQL 语句
将花费更长的时间
- 复杂性——SSIS 可能更复杂,因为您可能需要创建许多任务来完成您的 objective,而在 T-SQL 中,它可能只是一个语句,如上例所示用于连接表
- 可扩展性——SSIS 具有更好的可扩展性,因为您可以创建一个使用 C# 的脚本任务,它几乎可以做任何事情,尤其是对于与数据库无关的任务。 T-SQL 是有限的,因为它只针对数据库任务。 SSIS 也有日志记录,而 T-SQL 没有
- depracation/breaking 更改的可能性 – 小问题,但 T-SQL 总是在每个版本中删除必须重写的功能
- Types/architecture 源和目标 – 如果您有多种类型的源,SSIS 会更好。例如,它与 Oracle、XML、平面文件等一起工作得很好。SSIS 从一开始就设计为与其他来源一起工作,其中 T-SQL 是为 SQL 服务器,它需要更多的步骤来访问其他来源,并且这样做有额外的限制
- 地方法规 – 是否有一些您必须遵守的公司标准会限制您可以使用的工具?
我有两个表:
- Table答:631476行
- Table B: 12 90 行
每个 Table 都有字段 ID,我想将其用作合并对象中的键。在下图中可以看到进程在合并对象之前阻塞。我已经用 Merge Join 对象进行了测试,结果是一样的......
为了使用 SSIS 14 进行此操作,我还有哪些其他可能性?
谢谢!
我在 SSIS 中进行联接或合并时遇到问题。我将改为编写 TSQL 版本并执行 SQL 任务。这样对我来说总是运行得更快。
如果两个源表都在同一台服务器上,请不要使用这种方式。您应该简单地在 SQL 服务器端编写一个查询。
像这样:
SELECT *
FROM [Table A]
INNER JOIN [Table B] ON [Table A].ID = [Table B].ID
ORDER BY ...
正如 James Serra 所说:When to use T-SQL or SSIS for ETL
- 性能 – 使用 T-SQL,一切都在 SQL 引擎中处理。使用 SSIS,您将所有数据带到 SSIS 内存 space 并在那里进行操作。因此,如果速度是一个问题,通常 T-SQL 是可行的方法,尤其是在处理大量记录时。 T-SQL 中的 JOIN 语句之类的东西比在 SSIS 中使用查找任务要快得多。另一个例子是 T-SQL 中的 MERGE 语句对于大型任务 比 SSIS 中的 SCD 任务有更好的性能
- Features/capabilities – 某些功能只能在 T-SQL 或 SSIS 中完成。您可以在 SSIS 中切碎文本,但不能在 T-SQL 中切碎。例如,每行字段数不一致的文本文件只能在 SSIS 中完成。所以某些任务可能会迫使您使用其中一个
- 当前的技能组合 – 您的 IT 部门的人员是否更熟悉 SSIS 或 T-SQL?
- 易用性development/maintenance – 当然,你最熟悉的那个是最简单的,但如果你在这两个方面的技能相当,那么SSIS通常更容易使用,因为它是图形化的,但有时你可以在 T-SQL 中发展得更快。例如,必须连接一堆表将需要 SSIS 中的一堆任务,而在 T-SQL 中它是一个语句。因此,在 SSIS 中创建连接表的任务可能更容易,但构建然后编写 T-SQL 语句 将花费更长的时间
- 复杂性——SSIS 可能更复杂,因为您可能需要创建许多任务来完成您的 objective,而在 T-SQL 中,它可能只是一个语句,如上例所示用于连接表
- 可扩展性——SSIS 具有更好的可扩展性,因为您可以创建一个使用 C# 的脚本任务,它几乎可以做任何事情,尤其是对于与数据库无关的任务。 T-SQL 是有限的,因为它只针对数据库任务。 SSIS 也有日志记录,而 T-SQL 没有
- depracation/breaking 更改的可能性 – 小问题,但 T-SQL 总是在每个版本中删除必须重写的功能
- Types/architecture 源和目标 – 如果您有多种类型的源,SSIS 会更好。例如,它与 Oracle、XML、平面文件等一起工作得很好。SSIS 从一开始就设计为与其他来源一起工作,其中 T-SQL 是为 SQL 服务器,它需要更多的步骤来访问其他来源,并且这样做有额外的限制
- 地方法规 – 是否有一些您必须遵守的公司标准会限制您可以使用的工具?