程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

編輯:DB2教程

簡介

結合使用 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 表的數據流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

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 表的數據流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

設計控制流

控制流通過調用剛才描述的兩個數據流填充混合型 XML/關系數據倉庫,見圖 3。

圖 3. 控制流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

在啟動時,控制流調用裝載目標 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 節點提取的列定義
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

編輯這個操作符的 Result Columns,刪除 SYMBOL 和 QTY 列,見圖 5。

圖 5. XML Relational Mapping 操作符產生的結果列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

返回到數據流設計的圖形視圖。

右鍵單擊剛才編輯的 XML Relational Mapping 操作符,選擇 Propagate Column Change。

出現提示時,單擊 OK。

編輯 Group By 操作符,確認 Select List for Aggregation 不再包含與 SYMBOL 和 QTY 列相關的表達式,見圖 6。

圖 6. 修改後的 Group By 操作符選擇列表
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

保存修改。新的數據流應該與 圖 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 操作符的列定義
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

刪除目標表不需要的所有結果集列。應該保留的結果集列是 id、holdingtype、symbol 和 qty,見圖 8。

圖 8. XML Relational Mapping 操作符的輸出
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

返回到數據流設計的圖形視圖。

右鍵單擊剛才編輯的 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. 通過編輯數據流操作符的屬性選擇所需的流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

找到前面創建的用來填充 DWADMIN.ACCT 表的數據流。

可以把這個數據流操作符的默認名稱改為更有意義的名稱。

重復步驟 6-8,把填充 DWADMIN.HOLDINGS 表的數據流添加到控制流中。

把這個操作符拖到現有數據流操作符的右邊。

在 Palette 上,選擇 Common Operators > End。

把它放在最後一個數據流操作符的右邊。現在,控制流建模所需的所有操作符都就位了。

通過選擇 Common Operators > Email 添加用來管理運行時錯誤的操作符。

把它放在第一個數據流操作符下面。

右鍵單擊這個操作符並選擇 Show Properties VIEw 以指定它的屬性。

指定發件人和收件人的電子郵件地址、標題和消息。對於這個示例,這些屬性都使用固定的值(而不是可變值),見圖 10。每個屬性旁邊的圖標表示使用固定值還是可變值。

圖 10. 定義 Email 操作符的屬性
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 2 部分: 為涉及 XML 的多個 ETL 作業設計控制流

查看原圖(大圖)

選擇 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 集成到數據倉庫環境中的重要方面。

本文是本系列的第二篇,介紹如何使用控制流管理多個數據流的執行。控制流適用於復雜的操作。控制流有助於促進代碼重用,還讓開發人員能夠指定活動的次序。

本文示例源代碼或素材下載

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved