簡介
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 解釋了如何使用 InfoSphere Warehouse Design Studio 構建和執行數據流,使用 DB2 pureXML 操作型數據作為數據倉庫中關系或 XML 結構的輸入。本文是本系列的第二篇,解釋如何構建一個調用多個數據流的控制流,以特定的次序提取、轉換和裝載 XML 數據。通過使用控制流,可以漸進方式開發、測試和執行需要特定執行次序的復雜操作。
本文描述的場景使用與本系列 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 相同的開發和運行時環境。這個場景基於 DB2 9.7 Enterprise Server Edition 和 IBM InfoSphere Warehouse Design Studio 9.7,它們可以安裝在同一個 Windows® 系統上。
源表和 XML 操作型數據也與 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 中討論的相同。操作型數據包括關於財務賬戶和投資組合的信息。這些數據取自開放源碼 Transaction Processing over XML(TPoX)基准中用來填充客戶賬戶記錄的信息的子集。目標數據倉庫也差不多完全相同,只是現在在數據庫設計中包含一個引用完整性約束。
清單 1 定義修改後的數據倉庫表。新的主鍵和外鍵約束是大寫的。
清單 1. 目標數據倉庫表的定義
-- DWADMIN.ACCT contains general information about accounts.
create table dwadmin.acct (
id int PRIMARY KEY NOT NULL,
title varchar(100),
currency char(3),
workingbalance int,
Officer varchar(50),
datechanged date,
timechanged time,
totalholdings int,
holdingtypes int,
fullrecord XML
)
-- DWADMIN.HOLDINGS tracks specific investments (holdings) for a given account
create table dwadmin.holdings (
id int REFERENCES DWADMIN.ACCT ON DELETE CASCADE,
symbol varchar(10),
type varchar(25),
quantity decimal(12,3)
)
由於有這個引用完整性約束,就需要修改 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 中描述的 ETL 操作。在 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 的場景中,一個數據流從源表 TPOXADMIN.ACCOUNT 的 INFO 列提取出 XML 數據並填充兩個目標數據倉庫表:DWADMIN.ACCT 和 DWADMIN.HOLDINGS。因為這兩個目標數據倉庫表之間沒有引用完整性約束,所以先填充其中哪個目標表都可以。
本文中的場景修改了目標表的設計,包含主鍵和外鍵約束,這要求先填充 DWADMIN.ACCT 表。為了確保先填充 DWADMIN.ACCT 表,需要把 ETL 操作分為多個數據流,使用控制流為這些數據流指定所需的執行次序。注意,如果 DWADMIN.ACCT 是空的,DB2 會拒絕在 DWADMIN.HOLDINGS 表中插入行,因為這個表包含一個引用 DWADMIN.ACCT 表的外鍵。
要想了解 TPOXADMIN.ACCOUNT 的 INFO 列中的 XML 源數據如何映射到數據倉庫表的各個列,請回顧 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 的 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 和 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流。
控制流和數據流概況
在構建控制流之前,需要單獨創建每個數據流。因為每個數據流都是 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 描述的數據流的子集,您應該熟悉它們的邏輯。
設計第一個流
第一個流從源表中提取出 XML 數據並填充 DWADMIN.ACCT 表(這個表包含主鍵),見圖 1。
圖 1. 用於填充混合型 DWADMIN.ACCT 表的數據流
查看原圖(大圖)
Table Source 操作符(見 圖 1 的左上方)指定 TPOXADMIN.ACCOUNT 表作為輸入源。這個表中的 XML 數據輸入到兩個 XML Relational Mapping 操作符。其中一個操作符(圖 1 中下方的分支)為一個 Group By 操作符提供輸入,後者執行目標表的兩個列所需的聚合。但是,目標表還包含一個 XML 列,其中包含原來的 XML 記錄。因為 XML 列不能參與 Group By 子句,所以需要定義第二個 XML Relational Mapping 操作符(圖 1 中上方的分支)。此操作符從 XML 數據中提取賬戶 ID 值,並保留完整的 XML 記錄。然後,將這個映射操作獲得的賬戶 ID 與 Group By 操作的輸出中的賬戶 ID 進行聯結,創建填充目標 ACCT 表的結果集。
設計第二個流
第二個數據流的設計更簡單。它填充 DWADMIN.HOLDINGS 表,這個表包含一個引用 DWADMIN.ACCT 表的外鍵。這個數據流從源表中讀取 XML 數據,然後使用一個 XML Relational Mapping 操作符直接填充目標表,見圖 2。
圖 2. 用於填充 DWADMIN.HOLDINGS 表的數據流
查看原圖(大圖)
設計控制流
控制流通過調用剛才描述的兩個數據流填充混合型 XML/關系數據倉庫,見圖 3。
圖 3. 控制流
查看原圖(大圖)
在啟動時,控制流調用裝載目標 DWADMIN.ACCT 表的數據流。如果成功執行這個數據流,就會調用第二個數據流,它裝載目標 DWADMIN.HOLDINGS 表。如果第一個數據流非正常終止,控制流就發送電子郵件通知並終止。圖 3 給出本文中將創建的控制流。
步驟 1:准備 DB2 數據庫環境
下載 小節包含一個 DB2 腳本,該腳本創建必要的操作型(源)表和數據倉庫(目標)表。它還用示例 XML 賬戶信息填充操作型表。這個腳本與 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 的腳本相似。但是,它為目標數據倉庫表定義了適當的主鍵和外鍵。
按以下步驟准備 DB2 環境。
從 “參考資料” 小節下載 dwsetup2.zip 文件並解壓文件。
打開一個 DB2 命令窗口,然後發出清單 2 所示的命令。
清單 2. 調用本文附帶的 DB2 腳本
db2 –td@ -vf DWsetup2.db2
注意,該腳本支持 Windows 上運行的 DB2 9.7 服務器。如果在您的服務器上已經有名為 TPOX 的數據庫,這個腳本會刪除它並用新的數據庫對象重新創建它。
步驟 2:准備 Design Studio 環境
在創建數據流之前,按 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 中的步驟准備 Design Studio 環境(如果還沒有這麼做的話)。
步驟 3:創建提取賬戶數據的數據流
第一個數據流需要從源 TPOXADMIN.ACCOUNT 表提取信息,根據需要轉換信息,填充 DWADMIN.ACCT 目標表。按以下步驟創建這個數據流。
復制在 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 中完成的數據流,給它起新的名稱。
編輯這個數據流,刪除 DWADMIN.HOLDINGS 表的 Table Target 操作符。
編輯為 Group By 操作符提供輸入的 XML Relational Mapping 操作符,刪除 SYMBOL 和 QTY 的列定義。應該保留 id、title、currency、workingbalance、Officer、datachanged、timechanged 和 holdingtype 的列定義,見圖 4。
圖 4. 從 XML 節點提取的列定義
查看原圖(大圖)
編輯這個操作符的 Result Columns,刪除 SYMBOL 和 QTY 列,見圖 5。
圖 5. XML Relational Mapping 操作符產生的結果列
查看原圖(大圖)
返回到數據流設計的圖形視圖。
右鍵單擊剛才編輯的 XML Relational Mapping 操作符,選擇 Propagate Column Change。
出現提示時,單擊 OK。
編輯 Group By 操作符,確認 Select List for Aggregation 不再包含與 SYMBOL 和 QTY 列相關的表達式,見圖 6。
圖 6. 修改後的 Group By 操作符選擇列表
查看原圖(大圖)
保存修改。新的數據流應該與 圖 1 相似。
步驟 4:創建提取投資組合數據的數據流
下一個數據流更簡單。它從源 TPOXADMIN.ACCOUNT 表提取 XML 數據,把特定的節點映射到關系列,填充 DWADMIN.HOLDINGS 目標表。按以下步驟創建提取投資組合數據的數據流。
再次復制在 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分:創建用於填充混合型數據倉庫的 ETL 數據流 中完成的數據流,給它起新的名稱。
編輯這個數據流,刪除除以下操作符之外的所有操作符:
Table Source 操作符,它從 TPOXADMIN.ACCOUNT 表讀取信息
DWADMIN.HOLDINGS 表的 Table Target 操作符
XML Relational Mapping 操作符,它從源表讀取數據並填充 DWADMIN.HOLDINGS 表
編輯 XML Relational Mapping 操作符,刪除目標表不需要的所有列定義。應該保留 id、holdingtype、symbol 和 qty 的列定義,見圖 7。
圖 7. XML Relational Mapping 操作符的列定義
查看原圖(大圖)
刪除目標表不需要的所有結果集列。應該保留的結果集列是 id、holdingtype、symbol 和 qty,見圖 8。
圖 8. XML Relational Mapping 操作符的輸出
查看原圖(大圖)
返回到數據流設計的圖形視圖。
右鍵單擊剛才編輯的 XML Relational Mapping 操作符,選擇 Propagate Column Change。
出現提示時,單擊 OK。
保存修改。新的數據流應該與 圖 2 相似。
步驟 5:測試數據流
在構建調用這些數據流的控制流之前,應該確認每個數據流可以正確地工作。按照下面介紹的標准 Design Studio 過程測試第一個流(用於填充 DWADMIN.ACCT),然後測試第二個流(用於填充 DWADMIN.HOLDINGS 表)。在最初測試時,使用調試器可能有幫助。按以下步驟測試每個流。
如果還沒有保存設計的話,現在就保存。
在 Data Project Explorer 面板中,右鍵單擊數據流並選擇 Validate 以檢查數據流。如果發現了任何錯誤,糾正它們。
如果願意,可以在數據流中設置斷點。設置方法是右鍵單擊數據流中操作符之間的連接並選擇 Toggle Breakpoint。
在 Data Project Explorer 面板中,右鍵單擊流並選擇 Debug 或 Execute。如果調試流,可以使用頂部的 Resume 圖標監視數據流中每個步驟的輸出。注意,調試器可能會產生與 DROP TABLE 語句有關的警告,可以不理會它。
步驟 6:創建控制流
兩個數據流已經開發並測試完了,現在可以構建一個以正確次序執行它們的控制流。為了簡單,本文中按以下步驟創建一個基本的控制流。還可以使用更多高級特性,但是這些特性超出了本系列的范圍。
在數據倉庫項目中,右鍵單擊 Control Flows 文件夾。
創建一個新的控制流,給它起名。
在 Palette 上,選擇 Common Operators > Data Flows。
把一個圖標拖到控制流設計中默認出現的 Start 操作符的右邊。
右鍵單擊並選擇 Show Properties VIEw。
單擊 … 按鈕以指定適當的數據流,見圖 9。
圖 9. 通過編輯數據流操作符的屬性選擇所需的流
查看原圖(大圖)
找到前面創建的用來填充 DWADMIN.ACCT 表的數據流。
可以把這個數據流操作符的默認名稱改為更有意義的名稱。
重復步驟 6-8,把填充 DWADMIN.HOLDINGS 表的數據流添加到控制流中。
把這個操作符拖到現有數據流操作符的右邊。
在 Palette 上,選擇 Common Operators > End。
把它放在最後一個數據流操作符的右邊。現在,控制流建模所需的所有操作符都就位了。
通過選擇 Common Operators > Email 添加用來管理運行時錯誤的操作符。
把它放在第一個數據流操作符下面。
右鍵單擊這個操作符並選擇 Show Properties VIEw 以指定它的屬性。
指定發件人和收件人的電子郵件地址、標題和消息。對於這個示例,這些屬性都使用固定的值(而不是可變值),見圖 10。每個屬性旁邊的圖標表示使用固定值還是可變值。
圖 10. 定義 Email 操作符的屬性
查看原圖(大圖)
選擇 Common Operators > Fail,把它放在 Email 操作符的右邊。
把 Start 操作符連接到第一個數據流操作符的輸入。
使用右上角的綠色對勾把第一個數據流操作符連接到第二個,這會建立有條件連接。這個有條件連接只在這個操作成功的情況下執行控制流。在這個場景中,如果無法填充包含主鍵的表,就希望避免填充引用它的表,所以應該使用有條件連接。
把第二個數據流操作符連接到 End 操作符。對於這個示例,使用數據流操作符輸出端的藍色箭頭定義無條件連接。
把第一個數據流操作符的失敗端(由紅色的 X 表示)連接到它下面的 Email 操作符。
使用無條件連接把 Email 操作符連接到 Fail 操作符。
檢查控制流是否與 圖 3 相似。
步驟 7:測試控制流
創建控制流之後,按標准的 Design Studio 過程測試它。使用上面工具欄中的圖標檢查控制流,然後調試或執行它。
結束語
本系列探索如何使用 IBM InfoSphere Warehouse Design Studio 和 DB2 pureXML 來支持數據倉庫中 XML 使用量的日益增長。XML 已成為很多組織進行數據交換的首選格式。因此,數據架構師正在評估將 XML 集成到數據倉庫中的各種選擇。設計 ETL 任務(或數據流)是將 XML 集成到數據倉庫環境中的重要方面。
本文是本系列的第二篇,介紹如何使用控制流管理多個數據流的執行。控制流適用於復雜的操作。控制流有助於促進代碼重用,還讓開發人員能夠指定活動的次序。
本文示例源代碼或素材下載