【问题标题】:How to automatically split a table in a SSIS package如何在 SSIS 包中自动拆分表
【发布时间】:2014-03-06 08:00:12
【问题描述】:

较长的 SSIS 任务的一部分是读取 10 Mio。将数据行放入表“主干”并按两个不同的 id 对其进行排序以加入另一列。

原来排序 10 Mio。 rows 对于我们的服务器来说太多了,因此我需要一个自动拆分 10 Mio 的解决方案。表“主干”中的行分成多个部分。

目前我通过执行包的 SQL 语句选择 TOP 5 Mio 手动执行此操作,然后选择 BOTTOM 5 Mio。

有没有办法自动或完全不同地做到这一点?

【问题讨论】:

  • 你在哪里进行排序。如果您使用的是 SSIS 排序任务选项,那么这很可能会导致内存压力,因为它是一个完整的内存操作,而不是直接插入 SQL 并在那里处理排序。
  • 相关表有多大?您可以考虑查找而不是加入。
  • 相关表包含大约 10 k 行并且还在增长。我将如何在 SSIS 中进行查找?我认为 Excel 中的“查找”作为 VLOOKUP 与 SSIS 中的 JOIN 相同。 SQL
  • 10k 行,只有一列可以缓存而不会出现问题。我会使用查找:technet.microsoft.com/en-us/library/ms141821.aspx
  • 您能否澄清“表干并按两个不同的 id 对其进行排序以加入另一列。”您是否对数据进行了预排序,以便可以将其加入 SSIS 包中?你到底在做什么?哪些部分在数据库中,哪些在 SSIS 中?

标签: sql ssis split package


【解决方案1】:

在将数据从源表读取到目标表(主干)时,您可以将其拆分。 您在源和目标之间行计数器。如果行数 > 5 M,则转移到下一个表的数据流。您甚至可以动态创建表格。

【讨论】:

  • 好主意,但我该怎么做:“如果行数 > 5 M,则将数据流转移到下一个表。您甚至可以动态创建表。”目前,我必须执行相同的数据流任务,唯一的区别是在 SQL 语句中从主干检索数据。首先是 ROW 1 到 5 M,另一个是 ROW 5 M + 1 到 10 M。
  • 这行不通。行计数器仅在最后一行通过后更新变量。
  • 为什么这行不通?我测试了它,我得到了有意义的结果。我怎么会注意到缺少某些东西?您的意思是我不能通过行计数器精确引用各个行吗?假设我有 10 行。首先,我通过 SELECT * FROM WHERE row_counter = 1 To 5 导入前 5 行,然后使用 6 To 10 导入接下来的 5 行。是否有可能不是所有 10 行都是通过这种方式导入的,例如我有重复,但总数仍然是 10?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多