天天看點

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

建立測試資料:

多點傳播:将資料集分發到多個輸出的轉換。

如同它的名字一樣多點傳送可以将一個路徑中的資料輸出到多個路徑,你可能會使用這種轉換将資料輸出到多個路徑中。編輯這種task,将它和輸入源連接配接,然後将它和多個Destination連接配接,除了task的名字之外,它沒有特别的編輯選項。

注意:多點傳送類似于Split 轉換,不同的是多點傳送把所有的行都輸出,Split将有條件地輸出部分行。

Union All:合并多個資料集的轉換。

聯合所有task的功能和合并正好相反,它将多個資料源中的合并成一個結果集。例如,将兩個XML資料源中的資料合并成一個輸出然後将資料送入到關鍵詞抽取任務中。

編輯這種轉換,首先将第一個資料源連接配接到task然後将其他資料源連接配接到這個task。打開編輯界面,保證列被正确映射,DDIS将會自動适應是否正确映射。例如,一個輸入字元是20個字元,另一個是50,出書将會是一個多于50個字元的列。

合并:合并兩個已排序資料集的轉換。

合并轉換可以将兩個路徑中的輸入資料合并成一個輸出。這種轉換類似于Union All轉換,它有一些限制:

合并之前資料必須排序,可以在此之前使用排序轉換或者在資料源中使用ORDER BY語句

合并的中繼資料類型必須相同,例如CustomerID不能在一個路徑中是數字型的但是在另一個路徑中是字元類型的

如果有多于兩個路徑,需要選擇Union All轉換

編輯這種task,確定在兩個路徑中的資料時一緻的,選擇列的時候會彈出對話框提示資料合并到路徑1還是路徑2,如果選擇合并到路徑1,然後連接配接路徑2。這樣選擇之後最終将會從一個路徑映射到另一個路徑,有些路徑的資料也可以忽略。

合并聯接:使用 FULL、LEFT 或 INNER 聯接将兩個資料集聯接起來的轉換。

SSIS的一個目标就是使用任務,盡量保證不寫任何代碼,一個典型的例子就是連接配接合并。這種合并可以将兩個輸入進行内連接配接或者外連接配接然後選擇性地輸出。例如,在一個資料流中存儲着包含EmployeeID的人力資源資訊,在另一個資料流中存儲着工資清單資訊,可以對這兩個路徑進行連接配接,從人力資源資訊中取得姓名,從工資清單資訊中取得員工工資,然後從一個路徑中輸出。

注意:如果兩個輸入路徑在同一個資料庫,在OLE DB資料源中進行資料連接配接操作可能效率更高,如果在不同的資料庫中可能效率後受到影響。這種連接配接合并在兩個資料不是同一個資料庫中或者不想編寫代碼時會很有用。

在項目中建立一個【資料流任務】,資料流如下:

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

元件【多點傳播】的功能是:将其輸入分發到一個或多個輸出,每個輸出都與輸入一樣。

是以第一個多點傳播名稱【多點傳播 張三李四】分發出去的内容與上表一樣。

每個元件我都用資料表中的姓名(張三、李四)做名稱,友善檢視。

元件【條件性拆分】設定如下,姓名等于“張三” 的和 姓名不等于“張三” 的分别輸出到兩個多點傳播中。

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

接下來,先看元件【Union All】,是【多點傳播 張三李四】和【多點傳播 隻有張三】兩個資料的内容上下合并,理論結果:

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

再看元件【合并聯接】,是【排序_張三李四】和【排序_李四】兩個表資料排序後合并連接配接。合并方式如圖:

連接配接類型為:左外部連接配接。左邊為【排序_張三李四】,為第一個輸入。

條件為(相當于): ON A.Name=B.Name AND A.Course=B.Course

輸出名稱重新定義。

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

輸出理論結果為:(排序是按元件【排序_張三李四】的排序結果)

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

最後為元件【合并】,合并是【合并聯接】後與【多點傳播 隻有張三】排序後的合并。

第一輸入為【排序_張三李四左連接配接】,因為其有多列(5行6列),以此資料結構為準。

第二輸入為【排序_張三】(2行3列)

合并轉換如圖:

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

可以看出,【排序_張三】列數不夠,是以與上表合并時<忽略>,即無任何值。Union是排序合并,理論結果為:

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接

至此,設計完成,現在編譯!可看到資料流傳遞的行數。結果如圖:

《BI那點兒事》資料流轉換——多點傳播、Union All、合并、合并聯接