【发布时间】: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