搜尋本站文章

2011-12-11

SSIS:認識:合併聯結轉換(Merge Join Transformation)

示範環境:
SSIS 2008 R2。

實作練習:認識:合併聯結轉換(Merge Join Transformation)

工作1:使用資料流程工作,設定資料流程來源

步驟01. 在「封裝設計師」視窗,新增加一個「資料流程」工作。

步驟02. 點選「資料流程」頁面,在左邊的工具箱,由「資料流程來源」區域,拖曳所需的來源物件,設定與其連線的資訊連線。

在本範例中,使用兩個「OLE DB 來源」,分別連接到 Excel 2010 (*.xlsx) 與 Access 2010 (*.accdb) 為例:客戶_Excel 2010、訂單_Access 2010。

-- 01_增加_資料來源



工作2:使用排序轉換

步驟01. 在左邊的工具箱,由「資料流程轉換」區域,選擇「排序」轉換拖曳到右邊的封裝設計師頁面上。

步驟02. 點選資料來源:客戶_Excel 2010,將其綠色線路的「資料流程路徑」,拖曳到「排序」轉換。

步驟03. 滑鼠雙擊此「排序」轉換,在「排序轉換編輯器」視窗,勾選要作為排序用的資料行,例如:客戶編號,點選「確定」。

步驟04. 在左邊的工具箱,由「資料流程轉換」區域,選擇「排序」轉換拖曳到右邊的封裝設計師頁面上。

步驟05. 點選資料來源:訂單_Access 2010,將其綠色線路的「資料流程路徑」,拖曳到「排序」轉換。

步驟06. 滑鼠雙擊此「排序」轉換,在「排序轉換編輯器」視窗,勾選要作為排序用的資料行,例如:CustomerID,點選「確定」。

-- 02_設定好排序轉換



工作3:使用合併聯結轉換

步驟01. 在左邊的工具箱,由「資料流程轉換」區域,選擇「合併聯結」轉換,拖曳到右邊的封裝設計師頁面上。

步驟02. 點選資料轉換:排序_客戶編號的綠色線路之「資料流程路徑」,拖曳到「合併聯結」轉換。

步驟03. 在「輸入輸出選擇」視窗,在下方的「輸入」區域,下拉選擇:「合併聯結左方輸入」,點選「確定」。

-- 03_設定_「合併聯結」轉換_輸入輸出選擇



步驟04. 點選資料轉換:排序_CustomerID 的綠色線路之「資料流程路徑」,拖曳到「合併聯結」轉換。

步驟05. 滑鼠雙擊此「合併聯結」轉換,在「合併聯結轉換編輯器」視窗,勾選所需抓取的資料行,點選「確定」。

將左輸入中的資料行拖曳至右輸入中的資料行,以指定聯結資料行。
如果這些資料行的名稱相同,則可以選取「聯結索引鍵」核取方塊,「合併聯結」轉換會自動建立聯結。

附註
您可以只在排序位置相同的資料行之間建立聯結,而這些聯結必須以排序位置指定的順序建立。
如果您嘗試不按順序建立聯結,則 [合併聯結轉換編輯器] 會提示您為略過的排序次序位置建立其他聯結。

附註
依預設,輸出會在聯結資料行上進行排序。

例如:
在「聯結類型」,設定選取:內部聯結。
在「排序_客戶編號」,勾選:客戶編號、公司名稱、連絡人、電話。
在「排序_CustomerID 」,勾選:OrderID、OrderDate。

-- 04_準備設定_「合併聯結轉換編輯器」



-- 05_設定_「合併聯結轉換編輯器」



-- 06_設定好_合併聯結



工作4. 使用資料流程目的地

步驟01. 在左邊的工具箱,由「資料流程目的地」區域,選擇「一般檔案目的地」物件,拖曳到右邊的封裝設計師頁面上。

步驟02. 點選資料轉換:合併聯結_內部的綠色線路之「資料流程路徑」,拖曳到「一般檔案目的地」物件。

步驟03. 滑鼠雙擊此「一般檔案目的地」物件,設定相關的連線資料。

-- 07_設定好_一般目的地



工作5. 執行封裝

-- 08_執行封裝



-- 09_自動移除未使用的輸出資料行



-- 10_檢視_合併聯結後的成果





認識「合併聯結轉換(Merge Join Transformation)」

合併聯結轉換提供藉由使用 FULL、LEFT 或 INNER 聯結,來聯結兩個已排序資料集所產生的輸出。

您可以利用下列方式設定「合併聯結」轉換:
(A) 指定聯結為 FULL、LEFT 或 INNER 聯結。

(B) 指定聯結使用的資料行。

(C) 指定轉換是否要將 Null 值當作相當於其他 Null 處理。

附註:
如果 Null 值未當成相等值,則轉換會以與 SQL Server Database Engine 相同的方式處理 Null 值。

這個轉換有兩個輸入與一個輸出。它不支援錯誤輸出。

--
輸入需求

合併聯結轉換針對其輸入需要已排序的資料

聯結需求
合併聯結轉換會要求聯結的資料行擁有相符的中繼資料。例如,您無法聯結數值資料類型的資料行,與字元資料類型的資料行。
如果資料是字串資料類型,第二個輸入中的資料行長度就必須小於或等於與其合併之第一個輸入中的資料行長度。

--

以下整理了幾個錯誤設定:

(1) 若是刻意加入第三條資料來源

將遭遇以下的錯誤訊息:

無法建立連接子。
目的地元件沒有任何可用的輸入可用來建立路徑。

-- 11_第三個資料來源_輸入



(2) 若是資料來源沒有排序

將遭遇以下的錯誤訊息:

錯誤 1 驗證錯誤。資料流程工作: 資料流程工作: 輸入未排序。必須排序 "輸入 "合併聯結左方輸入" (130)"
錯誤 2 驗證錯誤。資料流程工作 合併聯結 [129]: 輸入未排序。必須排序 "輸入 "合併聯結左方輸入" (130)"。 

-- 12_輸入未排序_錯誤



-- 13_輸入未排序_錯誤



(3) 若使用非聯結用的資料行來做排序

例如:
一個是:OrderID,一個是:客戶編號,兩者資料類型也不同。

無法開啟:
轉換的兩個輸入至少必須包含一個排序資料行,且資料行必須有相符的中繼資料。

-- 14_使用不同的資料行_排序



-- 15_轉換的兩個輸入至少必須包含一個排序資料行,且資料行必須有相符的中繼資料





參考資料:

合併聯結轉換
http://msdn.microsoft.com/zh-tw/library/ms141775.aspx

如何:排序合併和合併聯結轉換的資料
http://msdn.microsoft.com/zh-tw/library/ms137653.aspx