sql-server - SSIS 14 - 暂存区 - 合并两个来源需要很多时间

标签 sql-server merge ssis etl staging

我有两个表:

  • 表 A:631476 行
  • 表 B:12 90 行

每个表都有字段 ID,我想将其用作合并对象中的键。在下图中可以看到进程在合并对象之前阻塞。我已经用 Merge Join 对象进行了测试,结果是一样的...... enter image description here

为了使用 SSIS 14 进行此操作,我还有哪些其他可能性?

谢谢!

最佳答案

如果两个源表都在同一台服务器上,请不要使用这种方式。您应该简单地在 SQL Server 端编写一个查询。

像这样:

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

  1. 性能 – 使用 T-SQL,一切都在 SQL 引擎中处理。使用 SSIS,您将所有数据带到 SSIS 内存空间并在那里进行操作。因此,如果速度是一个问题,通常 T-SQL 是可行的方法,尤其是在处理大量记录时。 T-SQL 中的 JOIN 语句之类的东西比在 SSIS 中使用查找任务要快得多。另一个例子是 T-SQL 中的 MERGE 语句对于大型任务比 SSIS 中的 SCD 任务有更好的性能
  2. 特性/功能 – 某些特性只能在 T-SQL 或 SSIS 中完成。您可以在 SSIS 中拆分文本,但不能在 T-SQL 中拆分。例如,每行字段数不一致的文本文件只能在 SSIS 中完成。因此,某些任务可能会迫使您使用其中一种
  3. 当前的技能组合 – 您 IT 部门的人员是否更熟悉 SSIS 或 T-SQL?
  4. 易于开发/维护 – 当然,您最熟悉的那个最简单,但如果您在这两个方面的技能相当,那么 SSIS 通常更容易使用,因为它是图形化的,但有时您可以在 T-SQL 中开发更快。例如,必须连接一堆表将需要在 SSIS 中执行大量任务,而在 T-SQL 中它是一条语句。因此,在 SSIS 中创建连接表的任务可能更容易,但构建然后编写 T-SQL 语句将花费更长的时间
  5. 复杂性——SSIS 可能更复杂,因为您可能需要创建许多任务来实现您的目标,而在 T-SQL 中它可能只是一个语句,如上面用于连接表的示例
  6. 可扩展性——SSIS 具有更好的可扩展性,因为您可以创建一个使用 C# 的脚本任务,它几乎可以执行任何操作,尤其是与非数据库相关的任务。 T-SQL 是有限的,因为它仅用于数据库任务。 SSIS 也有日志记录,而 T-SQL 没有
  7. 弃用/重大更改的可能性 – 小问题,但 T-SQL 总是在每个版本中删除必须重写的功能
  8. 源和目标的类型/架构 – 如果您有多种类型的源,SSIS 会更好。例如,它与 Oracle、XML、平面文件等配合得非常好。SSIS 从一开始就设计为与其他来源配合良好,而 T-SQL 是为 SQL Server 设计的,它需要更多步骤才能访问其他来源,这样做还有其他限制
  9. 本地法规 – 是否有一些您必须遵守的公司标准会限制您可以使用的工具?

关于sql-server - SSIS 14 - 暂存区 - 合并两个来源需要很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201788/

相关文章:

c# - 如何在 Linq to Sql 中添加未映射到表的字段

sql-server - SQL 具有 SUM GROUP BY

git - 这怎么冲突

r - 合并数据并接收大量数据丢失

sql-server - UPDATE 表中除 TOP 1 记录外的记录

powershell - Azure 发布管道 Powershell 任务失败

sql-server - 从 ssis 中的单行结果集中分配值在 SSIS 2012 中给出错误

从 Windows 移植到 Linux 时,PHP 对 SQL Server 存储过程的调用不起作用

sql - 从 SQL Server 问题查询 LDAP

mysql 合并 2 个表,结构相同,键值重叠(auto_increment)