SSIS 對資料排序

2022-01-10 08:55:17 字數 2253 閱讀 1383

一般來說,資料排序有兩種方式:使用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的配置如下

三,效能比較

經過測試,使用關係型資料庫輸出有序的資料流,能夠充分利用關係型資料庫的效能,加快ssis 引擎處理海量資料任務的效能。因此,當需要從關係型資料庫中載入有序的資料時,建議使用sql命令對資料排序。

對於需要從非關係型資料庫中載入資料的資料來源,這類資料量一般不大,對資料排序的時間和資源消耗較小,對sort元件來說,能夠很快完成。

sort data for the merge and merge join transformations 

對資料進行亂序排序

有時需要把資料順序打亂,這種需求可以用 excel 的排序功能來完成。方法1 使用rand 函式構造輔助列 通過如下步驟來實現使用 rand 函式構造輔助列。此處開啟光碟中第 9章技巧95 cdrom excel 第9 章 技巧95.xls 1 在資料的後面加入一列輔助列,並輸入公式 rand 其餘...

awk對資料排序例項

在平時工作學習中,對資料進行排序是很常見的乙個工作。今天就就說一下如何使用awk命令來對資料進行排序。比如,我想找到一組資料中的最大值,可以用如下的方法。使用awk命令並借助sort命令來實現 以下為生成隨機數的乙個小函式 bin bash generate random.sh for i 0 i ...

android對資料按照時間排序

經常遇見乙個列表,兩個介面的情況,兩個介面屬於兩個不同的表資料,那麼資料拼接回來之後,並不是按照時間排序的,看起來就相當混亂,所以記錄一下如何對資料按照時間排序。步驟一 格式化日期 public static date stringtodate string datestring 步驟二 對拼接的列...