SSIS 对数据排序
一般来说,数据排序有两种方式:使用Sort组件,使用TSQL命令Order by。使用Sort组件排序,对SSIS来说,是一种阻塞性的操作,这意味着,SSIS组件必须等到所有的数据都加载到内存之后,才能按照特定的字段对数据执行排序操作。然而,如果使用TSQL命令的Order by子句,在关系引擎中执行排序操作,然后,把有序的数据加载到内存中,这样对SSIS说,是一种流式操作,这意味着,SSIS组件不需要等到所有的数据都加载到内存中,就可以开始处理数据,不仅节省系统的内存资源,而且数据处理的流程更快。
一,使用Sort组件进行排序
使用Sort组件对无序的数据进行排序,必须要设置排序键,排序列的位置,排序的类型(升序或降序):

SortType:升序 ascending,降序 descending,
SortOrder:排序列的位置,从1开始依次递增,
Sort组件还有一个属性:Remove wors with duplicate sort values,该属性指定,当排序列重复时,Sort组件是否删除重复的行?这不同于distinct命令,distinct是输出的所有列不重复。如果选中该属性,只是保证排序列(输出列的一部分)不重复,该属性也可以从Sort Transformation Advanced Editor中查看和设置,默认值是False,不删除重复值:

二,使用TSQL命令的Order by 子句对数据进行排序
在数据源中,数据访问模式选择为SQL command,通过编写TSQL代码,对数据排序。
step1:使用OLEDB数据源组件对数据排序,该数据源组件向下传递的数据是有序的:

Step2,打开OLEDB的高级编辑器,查看输入和输出属性选项卡
1,点击OLEDB Source Ouput,设置IsSorted属性为True,该属性设置为true不会对数据排序,只是告知下游组件,该输出数据已经排序。
如果将IsSorted属性设置为True,实际数据并没有排序,在package 运行时会出错,所以必须提供已经排序的数据(在TSQL命令中使用order by子句对数据排序)
2,点击Output Columns,逐个设置排序列(Order by Column_List)的SortKeyPosition属性
SortKeyPosition属性有Sort Position和Direction 两个metadata:
正整数表示按照升序排序,0表示不是排序列,负整数表示按照降序排序,数字代表排序列的序号
例如,对于以下的TSQL语句:
select Col_1,Col_2,Col_3,Col_4
from dbo.TableName
order Col_1 asc, Col_2 desc,Col_3 desc
在Output Columns中需要逐个设置,Col_1,Col_2,Col_3,Col_4的SortKeyPosition
由于Col_1,Col_2,Col_3是排序列,序号从1依次递增,而Col_4不是排序列,所以SortKeyPosition的配置如下
- Col_1 的SortKeyPosition是 1,第一个排序列,且按照升序排序
 - Col_2 的SortKeyPosition是 -2,第二个排序列,且按照降序排序
 - Col_3 的SortKeyPosition是 3,第三个排序列,且按照升序排序
 - Col_4 的SortKeyPosition是 0,不是排序列
 



三,性能比较
经过测试,使用关系型数据库输出有序的数据流,能够充分利用关系型数据库的性能,加快SSIS 引擎处理海量数据任务的性能。因此,当需要从关系型数据库中加载有序的数据时,建议使用SQL命令对数据排序。
对于需要从非关系型数据库中加载数据的数据源,这类数据量一般不大,对数据排序的时间和资源消耗较小,对Sort组件来说,能够很快完成。
参考文档:
Sort Data for the Merge and Merge Join Transformations
SSIS 对数据排序的更多相关文章
- SSIS 连接数据
		
通常情况下,ETL方案需要同时访问两个或多个数据源,并把结果合并为单个数据流,输出到目标表中.为了向目标表中提供统一的数据结构,需要把多个数据源连接在一起.数据连接的另外一种用法,就是根据现有的数据, ...
 - .NET LINQ 数据排序
		
数据排序 排序操作按一个或多个特性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,可以对各个主要排序组中的元素进行排序. 方法 方法名 说明 C# 查 ...
 - 阿里云377秒完成100TB数据排序:秒三星百度
		
阿里云377秒完成100TB数据排序:秒三星百度 今日,Sort Benchmark 在官方网站公布了 2015 年排序竞赛的最终成绩.其中,阿里云用不到 7 分钟(377 秒)就完成了 100TB ...
 - Python学习_数据排序方法
		
Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...
 - SQL从入门到基础 - 04 SQLServer基础2(数据删除、数据检索、数据汇总、数据排序、通配符过滤、空值处理、多值匹配)
		
一.数据删除 1. 删除表中全部数据:Delete from T_Person. 2. Delete 只是删除数据,表还在,和Drop Table(数据和表全部删除)不同. 3. Delete 也可以 ...
 - DataSet 中的数据排序 及 DataRow装成DataTable
		
1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...
 - dplyr  数据操作  数据排序 (arrange)
		
在R中,我们在整理数据时,经常需要对数据排序,以便数据增强数据的可读性. 下面我们来看下dplyr中的,arrange函数 arrange(.data, ...) 跟filter()类似,arrang ...
 - java-自定义数据排序
		
导读:由于基本类型的数据都实现了一个共同的接口java.lang.Comparable接口,都实现了该接口下面的compareTo()方法,因此想要利用面向对象实现现实生活中的一些情景再现,比如新闻根 ...
 - 腾讯面试题,js处理1千万条数据排序并且页面不卡顿
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 
随机推荐
- linux bash中too many arguments问题的解决方法
			
今天在编写shell脚本时,在if条件后跟的是[ $pid ],执行脚本的时候报 然后我输入改为[[$pid]]后,再执行脚本,就成功了,代码如下: #!/bin/bash pid=`ps -ef|g ...
 - 博客迁移至CSDN
			
本人的技术博客已经迁移至CSDN,地址为http://blog.csdn.net/starrow,现为Lotus Domino开发领域最活跃丰富的博客,内容包括Lotus Domino, JavaSc ...
 - Javac 手动编译时,出现乱码或编码格式问题
			
使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...
 - windows编程:画线,简单的碰撞检测,简单的帧率锁定
			
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h> #include <mmsy ...
 - 读bootstrap2.3.2有感1
			
起步: 下载编译好的bootstrap2文件,百度新版jquery.js,并复制html模版(hello world)放置在同一目录,然后看了下官网上的范例网站,心里还是很激动啊~ <!DOCT ...
 - C语言结构体-struct
			
知识点: 1)结构体的定义. 2)结构体的sizeof. 3) 结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将 ...
 - 【腾讯bugly干货分享】解耦---Hybrid H5跨平台性思考
			
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1275& ...
 - objective-c(代码块)
			
objective-c代码块(block)对写惯C语言的人非常熟悉,就类似一个函数指针,指向一个代码段的首地址: 给出简单例子如下: int main(int argc, const char * a ...
 - 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)
			
当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...
 - Android按需添加Google Play服务
			
以前无论使用何种Google Play服务,都是直接在gradle文件中引用一个库. compile 'com.google.android.gms:play-services:9.4.0' 这直接导 ...