隨著 XML 成為捕捉與交換關鍵業務資料的主流格式,企業亟需評估如何將 XML 資料整合至倉庫環境。本文探索如何使用 IBM InfoSphere Warehouse Design Studio 以圖形化方式建立資料流,完成 DB2 管理的 XML 資料提取、轉換與載入(ETL),填充混合型關聯/XML 資料倉庫。閱讀本文需具備資料倉庫、ETL 技術與 XML 基礎知識。
DB2 為關聯與 XML 建模資料提供統一 API 與管理平台。混合架構讓企業無需將 XML 分解(shredding)至關聯欄位,即可整合 XML 訊息與文件。管理員建立含 XML 型欄位的資料表,DB2 自動保留 XML 固有結構並提供優化存取。XML 索引、壓縮等特性保障執行效能。隨著訊息導向應用、SOA、Web 應用與整合專案大量採用 XML 定義業務資料交換,pureXML 成為資料倉庫環境關鍵組件。企業建立採用 pureXML 為底層儲存的 staging 區,或擴展關聯表加入 XML 欄位滿足新需求。
Design Studio 基於 Eclipse 介面,提供資料建模、查詢生成、資料探勘與 ETL 服務。設計師可透過圖形化工具連接源/目標資料庫、反向工程物理資料模型、建構 DB2 ETL 作業(資料流)。內建豐富的 SQL 倉房運算子與 XML 運算子(DB2 V9.7 引入):XML Relational Mapping(XML 分解至關聯欄位)、XML Composer(關聯/XML 產生 XML)、XQuery(執行 XQuery,生成 SQL XMLQuery())、XML Node(重命名/提取節點)、XML File(讀寫 XML 檔案)。本文示範使用 XML Relational Mapping 與倉房運算子,從單一 XML 源表填充目標關聯表與混合型關聯/XML 表。
安裝 DB2 9.7 Enterprise Server Edition 與 InfoSphere Warehouse Design Studio 9.7(可同一 Windows 系統),下載隨文範例資料與配置腳本。範例營運資料基於開源 TPoX 基準子集,包含客戶帳戶與持股資訊。
場景使用 DB2 pureXML 儲存的營運資料作為 ETL 輸入,填充基於 DB2 的資料倉庫。使用 Design Studio 從 DB2 XML 欄位提取資料,映射至倉庫兩張表:DWADMIN.ACCT(一般帳戶資訊,含關聯欄位與 XML 欄位 fullrecord)與 DWADMIN.HOLDINGS(特定投資追蹤,純關聯結構)。單一測試資料庫同時存放營運與倉庫資料,生產環境通常分離。
源表 TPOXADMIN.ACCOUNT 含 XML 欄位 INFO,儲存帳戶詳細資訊(名稱、開戶日期、周轉餘額、投資組合等)。目標表定義如下:
-- DWADMIN.ACCT
create table dwadmin.acct (
id int, title varchar(100), currency char(3), workingbalance int,
officer varchar(50), datechanged date, timechanged time,
totalholdings int, holdingtypes int, fullrecord XML
)
-- DWADMIN.HOLDINGS
create table dwadmin.holdings (
id int, symbol varchar(10), type varchar(25), quantity decimal(12,3)
)
XML 源資料映射規則詳見表 1、2:ACCT 表需從 XML 提取欄位、日期時間轉換、聚合計算(總持倉數、持倉類型數)、保留完整 XML;HOLDINGS 表需提取各投資的代碼、類型、數量。
資料流使用 Table Source、Table Target、XML Relational Mapping(兩個)、Group By、Table Join 運算子。整體設計:Table Source 讀取源表,XML 欄位輸入兩個 XML Relational Mapping。上分支提取帳戶 ID 與完整 XML 記錄;下分支提取關聯欄位、日期時間轉換、持倉類型(驅動 Group By 聚合)。Group By 計算 COUNT(holdingtype) 與 COUNT(DISTINCT holdingtype)。Table Join 以 ID 內部連接兩分支結果,填充 ACCT 表。下分支 XML Relational Mapping 輸出直接填充 HOLDINGS 表。
下載 DWsetup.db2 腳本,於 DB2 命令視窗執行:db2 -td@ -vf DWsetup.db2。腳本建立源/目標表並填充範例 XML 資料,支援 Windows 上的 DB2 9.7。
Data Source Explorer 連接 TPoX 資料庫;Data Project Explorer 建立資料倉庫專案、資料流(選擇線上資料庫模式連接 TPoX)、物理資料模型(反向工程 TPoX,選擇 TPOXADMIN 與 DWADMIN 模式)。
從調色盤拖入 Table Source,選擇 TPOXADMIN.ACCOUNT,確認結果集含 INFO(XML)欄位。
拖入 XML Relational Mapping 連接源表。配置:XML 欄位指定 INFO;命名空間 URI 設為 https://tpox-benchmark.com/custacc(Prefix 留空為預設);XQuery 表達式 /Account/@id;輸出欄位 ID(INTEGER,Path 設為 .);最終結果集含 fullrecord(XML)與 id(整數)。
拖入第二個 XML Relational Mapping 連接源表。配置:XML 欄位 INFO、相同命名空間;XQuery 表達式 /Account/Holdings/Position/Type(每筆投資產生一列);定義輸出欄位對應表 3(含 id、title、currency、workingbalance、officer、datechanged、timechanged、holdingtype、symbol、qty),其中 datechanged/timechanged 從 LastUpdate 時間戳提取。結果集排除 INFO 欄位。修改 DATECHANGED/TIMECHANGED 列定義,使用 SQL DATE()/TIME() 表達式轉換。
拖入 Group By 連接第二個 Mapping。配置:移除 INFO、HOLDINGTYPE、SYMBOL、QTY 欄位;TOTALHOLDINGS 設為 COUNT("INPUT_023_0"."holdingtype");DISTINCTHOLDINGS 設為 COUNT(DISTINCT "INPUT_023_0"."holdingtype");GROUP BY 子句包含 id、title、currency、workingbalance、officer、datechanged、timechanged。
拖入 Table Join,連接第一個 Mapping(上分支)與 Group By(下分支)。配置內部等值連接條件:"IN_045_0"."id" = "IN1_045_1"."id";結果集欄位對應 DWADMIN.ACCT 目標表。
拖入 Target Table 連接 Table Join,指定 DWADMIN.ACCT。配置:執行前刪除所有列(便於重複測試);來源欄位映射至目標欄位。
拖入 Target Table 連接第二個 Mapping,指定 DWADMIN.HOLDINGS。配置:刪除所有列;映射可用輸入欄位至目標欄位。
儲存工作,右鍵驗證資料流;設定斷點(連接線右鍵 Toggle Breakpoint);右鍵 Debug 或 Execute。除錯器可逐步監控,忽略 DROP TABLE 警告。檢查生成的 DB2 SQL/SQL/XML 陳述式(清單 4 為部分輸出範例)。
本系列探索 Design Studio 與 pureXML 支援資料倉庫整合 XML 的實戰路徑。本文為雙部曲第一篇,示範單一資料流填充兩目標表(一純關聯、一混合型)。第二篇將探索控制流串聯多資料流,適用於含主外鍵相依的倉庫表載入序列控管。範例原始碼可於文末下載區取得。