【问题标题】:SSIS Sort large data from Heterogeneous sources - AlternativesSSIS 对来自异构源的大数据进行排序 - 替代方案
【发布时间】:2017-07-07 06:36:46
【问题描述】:

我正在寻找对 SSIS 上约 200 万条记录进行排序的替代方法。

来自异构源(SQL、Oracle、DB2)的数据经过多次转换后,有一个Union All来组合数据,然后需要按三个字段排序。

这是因为数据在发送给外部供应商之前需要按某些字段排序

这些是我已经尝试过的解决方案:

  • 缓冲区大小 (100 MB) 和最大行数调整(50K 行)
  • 在每个来源应用排序(只是为了我的想法!)
  • 将验证外部元数据属性设置为 False(用于排序传输)
  • 尝试过的脚本任务(C#排序)

这些都没有显着提高性能。

还有其他选择吗?

更新: 这是对属于三个不同数据库表(SQL、Oracle、DB2)的三个不同字段的字符串排序。在合并数据集之前我无法排序。

  • 尝试将输出加载到单个表并使用带有适当索引的 Order by - 这会产生意外结果,因为 SQL Order by 的行为不同于排序转换Here is the explanation

【问题讨论】:

  • 为什么需要排序?对于 SSIS 中的后续操作?请注意这两点: 1. 数据库不按排序顺序存储。它们存储聚集索引顺序。 2. 数据库不按存储或插入顺序返回,它们按ORDER BY 顺序返回。您可以尝试将所有内容加载到单个表中并进行排序,但重点是什么 - 为什么要排序?
  • 尝试将未排序的它们插入到按排序字段编制索引的表中,然后使用 ORDER BY 从该表中选择它们。
  • @Nick.McDermaid 数据在我们发送给外部供应商之前需要按某些字段进行排序。我仅通过排序转换获得预期结果,排序方式与预期不符。请参考更新。
  • @TabAlleman : Order by 和 Sort 转换结果不同。根据我们的业务需求,排序转换排序顺序是正确的。
  • 如果您选择正确的排序规则,您可能会得到您想要的排序。 SQL Server 支持 Windows 排序规则。排序是一项昂贵的操作。如果您想在 SSIS 中执行此操作,您只需对其进行调整 - 确定三个来源中的任何一个提供数据的速度是否太慢,是否内存不足等。

标签: sorting ssis etl ssis-2012


【解决方案1】:

使用MERGE 转换而不是UNION ALL

与其先使用UNION ALL 组合数据集,然后对生成的大型组合数据集进行排序,不如先对每个较小的集进行排序,然后使用MERGE 转换。 MERGE 转换的结果已经排序。

【讨论】:

  • 这是对属于三个不同数据库表(SQL、Oracle、DB2)的三个不同字段的字符串排序。在合并数据集之前我无法排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2013-03-02
  • 2019-05-28
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
相关资源
最近更新 更多