前言
承接第一部分介紹的單一資料流,本文進一步說明如何利用控制流編排多個資料流,依據參考完整性約束按特定順序執行 ETL 作業,確保目標資料倉庫載入正確性。
場景與資料模型
源端為 TPOXADMIN.ACCOUNT 表的 XML 欄位 INFO,目標倉庫包含兩張表:
DWADMIN.ACCT:主鍵 ID,含 XML 欄位 FULLRECORD
DWADMIN.HOLDINGS:外鍵 ID 參照 ACCT,儲存投資明細
因外鍵約束,必須先載入 ACCT 再載入 HOLDINGS,故將原單一資料流拆分為兩個,再用控制流串聯。
資料流設計
資料流一:填充 ACCT 表(含聚合與 XML 保留)

- Table Source 讀取源表
- 兩個 XML Relational Mapping:
– 上分支:擷取 ID 並保留完整 XML 記錄
– 下分支:提取需聚合欄位送入 Group By
- 以 ID Join 兩分支結果,產出 ACCT 載入集
資料流二:填充 HOLDINGS 表(直接映射)

- 單一 XML Relational Mapping 直接將 XML 節點映射至 HOLDINGS 欄位
控制流編排

- 啟動 → 執行資料流一(ACCT)
- 成功(綠色對勾連接)→ 執行資料流二(HOLDINGS) → 結束
- 失敗(紅色 X 連接)→ Email 通知 → Fail 終止
逐步實作指南
步驟 1:準備 DB2 環境
下載 dwsetup2.zip,解壓後在 DB2 命令視窗執行:
db2 –td@ -vf DWsetup2.db2
腳本會建立源/目標表、主外鍵並填入範例 XML 資料。
步驟 2:準備 Design Studio 環境
參考第一部分完成專案建立與資料庫連線。
步驟 3:建立資料流一(ACCT)
- 複製第一部分完成的資料流,重命名
- 刪除 HOLDINGS 的 Table Target
- 編輯下分支 XML Relational Mapping:移除
SYMBOL、QTY 欄位定義(
)
- 同步修改 Result Columns(
)
- 右鍵選擇 Propagate Column Change
- 檢查 Group By 選擇清單已無 SYMBOL/QTY 相關運算式(
)
- 儲存,圖形應與資料流一一致
步驟 4:建立資料流二(HOLDINGS)
- 再次複製原資料流,重命名
- 僅保留:Table Source、HOLDINGS Table Target、對應的 XML Relational Mapping
- 編輯 Mapping:僅保留
id, holdingtype, symbol, qty 定義與輸出(
)
- Propagate Column Change 並儲存
步驟 5:單獨測試兩資料流
在 Data Project Explorer 右鍵選擇 Validate → Debug/Execute,觀察每步輸出,忽略 DROP TABLE 警告。
步驟 6:建立控制流
- 右鍵 Control Flows 資料夾 → New Control Flow
- 從 Palette 拖入 Data Flows 圖示,連接 Start,屬性指向資料流一(
)
- 再拖入第二個 Data Flows,放在右側,指向資料流二
- 拖入 End 置於最後
- 加入 Email(置於第一流下方),設定寄件/收件/主旨/內容(
)
- 加入 Fail 於 Email 右側
- 連線:
– Start → 流一(無條件)
– 流一成功(綠勾) → 流二(有條件)
– 流二 → End(無條件)
– 流一失敗(紅X) → Email → Fail(無條件)
- 檢查圖形與控制流圖一致
步驟 7:測試控制流
工具列 Validate → Debug/Execute,驗證執行順序與錯誤處理。
結語
控制流讓複雜 ETL 作業模組化、可重用、順序可控。結合 pureXML 處理能力,InfoSphere Warehouse 為混合型資料倉庫提供強大的 XML 整合方案。完整範例請見下載區。