程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

編輯:DB2教程

簡介

隨著 XML 越來越多地被用於捕捉和交換關鍵業務數據,公司不得不評估如何將 XML 數據集成到他們的倉庫環境中。本文探索公司如何使用 IBM InfoSphere Warehouse Design Studio 圖形化地創建數據流,以提取、轉換和裝載 DB2 管理的 XML 數據。 您將學習如何從 DB2 9.7 中提取 pureXML 數據,根據需要轉換 XML,以及填充混合型關系/XML 數據倉庫。

為了更好地從本文中受益,需要一些數據倉庫、 ETL(提取-轉換-裝載)技術和 XML 方面的知識。 如果不熟悉 DB2 pureXML 或 IBM InfoSphere Warehouse Design Studio,接下來的小節提供了簡短的介紹。

DB2 pureXML 簡介

DB2 為在表中和 XML 中建模的數據提供一個通用的應用程序編程接口和數據庫管理平台。 這種混合型數據庫管理架構使企業可以將 XML 消息和文檔集成到他們的數據庫環境中,而不必將 XML 分解(shredding,或 decomposing) 到不同表中的列中。 借助 DB2,應用程序開發人員可以輕松、高效地獲取 XML 數據的相關部分,並且可以輕松地集成 XML 和關系數據。圖 1 展示 DB2 的混合型數據庫架構。

圖 1. DB2 的混合型數據庫架構同時支持關系和 XML 數據。
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

為了使用 DB2 pureXML,管理員創建一個表,其中包含一個或多個 XML 類型的列。當 XML 被輸入到這個列時,DB2 自動保留它的固有結構,並根據需要提供經過優化的對 XML 數據的訪問。 XML 索引、壓縮和其他 DB2 特性提供了強大的運行時性能和效率。

DB2 pureXML 數據越來越多地成為數據倉庫環境的一部分。 基於消息的應用程序、面向服務架構(SOA)、以 Web 為中心的應用程序以及應用集成項目常常依賴於 XML 來定義如何表示和交換重要的業務數據。

隨著越來越多的關鍵業務數據以 XML 來捕捉,企業想要管理、共享、查詢和報告 XML 數據也就毫不奇怪了。 有些企業正在創建數據倉庫 staging 區,這些 staging 區使用 pureXML 作為底層存儲機制。有些企業正在擴展數據倉庫中的關系表,使之包含一個或多個 pureXML 列,以滿足新的業務需求。

InfoSphere Warehouse Design Studio 簡介

InfoSphere Warehouse Design Studio(Design Studio)通過一個基於 Eclipse 的界面為數據倉庫架構師和開發人員提供數據建模、查詢生成、數據挖掘和 ETL 服務。通過使用圖形化工具,設計者可以執行多種功能,包括連接到源和目標數據庫,對物理數據模型進行反向工程, 以及構建 DB2 ETL 任務(數據流)。本文主要介紹使用 Design Studio 構建 ETL 數據流。

Design Studio 包括很多不同的 SQL 倉庫操作符和 XML 操作符,以便操縱關系和 pureXML 數據。這些操作符包括:

從源表或文件讀取數據

將數據寫到目標表或文件

執行查詢功能,例如連接、聯合和聚合

XML 操作符是 DB2 V9.7 中引入的。XML 操作符包括:

XML Relational Mapping 操作符將 XML 數據分解到結果集的關系列中XML Composer 操作符從關系或 XML 數據創建 XML 數據XQuery 操作符執行 XQuery 查詢檢索特定的 XML 數據。生成的代碼使用 SQL XMLQuery() 函數調用 XQuery。 兩個 XML Node 操作符重命名 XML 節點,例如元素或屬性,以及從 XML 文檔提取一個或多個節點兩個 XML File 操作符讀或寫 XML 文件

本文討論的示例數據流借助 XML Relational Mapping 操作符和一些 Data Warehousing 操作符,用一個 XML 源表填充一個目標關系表和一個混合型關系/XML 表。

設置開發和運行時環境

為了創建本文描述的示例場景,安裝 DB2 9.7 Enterprise Server Edition 和 IBM InfoSphere Warehouse Design Studio 9.7。 可以將它們安裝在同一個 Windows® 系統中。另外,下載本文附帶的 示例數據和配置腳本。

示例操作型數據包括關於客戶賬戶和持有的股份的信息。這些數據基於開放源代碼 Transaction Processing over XML(TPoX)基准的子集。稍後您將了解更多關於操作型數據和數據倉庫設計的信息。

場景簡介

本文描述的場景使用 DB2 pureXML 中存儲的操作型數據作為提取、轉換和裝載(ETL)任務的輸入, 這些任務用於填充一個基於 DB2 的數據倉庫。您將使用 Design Studio 提取一個 DB2 XML 列中存儲的數據,並將該數據映射到一個 DB2 數據倉庫中的兩個表中,如圖 2 所示。 其中一個表只包含傳統的關系列,另一個表包含一些關系列和一個 XML 列。

圖 2. 示例場景提取 DB2 pureXML 中存儲的操作型數據輸入到 DB2 數據倉庫
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

這個數據模型表示一個常見的場景,在此場景中, XML 數據的一些部分常常被分解 到關系結構中。那些部分表示業務用戶可能經常分析和查詢的數據。 很多商業智能工具都針對關系結構作了優化, 所以將經常被查詢的 XML 數據分解到關系列中可以提高效率。然而,業務需求可能隨著時間的推移而變化, 這使得管理員難以決定應該將哪些 XML 值分解到關系列中。在數據倉庫中維護完整的 XML 數據, 用戶便可以立即訪問之前沒有分解到關系格式中的重要業務數據。

為了簡化本文中的示例場景,您將使用單個 DB2 數據庫來存儲操作型數據和倉庫數據。 當然,在生產環境中,操作型數據和倉庫數據可能在不同的數據庫中, 通常在不同的服務器上。但是,在此使用單個測試數據庫, 以便您將注意力集中於 Design Studio 如何操縱 pureXML 數據。

源表和目標表

本示例場景將操作型 XML 數據存儲在 TPOXADMIN.ACCOUNT 表中,這個表是 ETL 數據流的源表。ACCOUNT 表包含一個 XML 列(INFO)。可以使用 Design Studio 的數據建模向導創建這個表(以及數據倉庫目標表)。 但是,本示例場景只是包括所有必要的表的 DB2 DDL 語句。

清單 1 展示如何創建 TPOXADMIN.ACCOUNT 表。

清單 1. 創建源表 ACCOUNT 的 SQL

 create table tpoxadmin.account(info XML) 

INFO 列包含關於賬戶的詳細信息,包括名稱、開通日期、周轉余額、投資組合和其他信息。 (在 TPoX 基准中,這一類的賬戶文檔被輸入到更廣泛的客戶賬戶文檔中。) 圖 3 顯示一個存儲在本文引用的 ACCOUNT 表中的 XML 文檔的一部分。

圖 3. 存儲在 TPOXADMIN.ACCOUNT 表中的一個 XML 記錄的一部分
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

為簡化測試,目標數據倉庫數據庫也配置為 TPoX。TPOXADMIN.ACCOUNT 中的 INFO 列中的源信息 被映射到兩個表:DWADMIN.ACCT 表和 DWADMIN.HOLDINGS 表,前者包含關於整個賬戶的信息,後者包含關於給定賬戶的各種投資(投資組合)的信息。 清單 2 顯示如何定義這兩個表。

清單 2. 目標數據倉庫表的定義

-- DWADMIN.ACCT contains general information about accounts. 
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 tracks specific investments (holdings) for a given account 
create table dwadmin.holdings ( 
   id         int,   
   symbol       varchar(10), 
   type        varchar(25), 
   quantity      decimal(12,3) 
) 

為了理解 TPOXADMIN.ACCOUNT 的 INFO 列中的 XML 源數據如何被映射到數據倉庫表的不同列上, 可查看 表 1 和 表 2。 注意,目標 DWADMIN.ACCT 表的結構不只是需要從源文檔檢索特定的 XML 數據值。 DATECHANGED 和 TIMECHANGED 列需要進行簡單的數據值轉換,而 TOTALHOLDINGS 和 DISTINCTHOLDINGS 列則需要對某些數據進行聚合。

表 1. 用於 DWADMIN.ACCT 目標表中的列的 XML 源數據

DWADMIN.ACCT 中的列名 XPath 表達式或數據源 ID /Account/@id TITLE /Account/AccountTitle CURRENCY /Account/Currency BALANCE /Account/Balance/WorkingBalance OfficeR /Account/AccountOfficer DATECHANGED Extracted from /Account/LastUpdate TIMECHANGED Extracted from /Account/LastUpdate TOTALHOLDINGS Computed. (Count of /Account/Position/Type) HOLDINGTYPES Computed. (Count distinct of /Account/Position/Type) FULLRECORD Entire XML document (/Account)

表 2 顯示 DWADMIN.HOLDINGS 目標表中的列的 XML 源數據。

表 2. DWADMIN.HOLDINGS 目標表中的列的 XML 源數據

DWADMIN.HOLDINGS 中的列名 XPath 表達式或數據源 ID /Account/@id SYMBOL /Account/Holdings/Position/Symbol TYPE /Account/Holdings/Position/Type

數據流設計

正如您所預料的,有多種方式為本場景編寫 ETL 任務。 在本文中,您將探索如何定義一個數據流來完成所有必需的工作。 在本系列的第二部分,您將使用多個數據流和一個控制流來管理執行序列,從而實現相同的場景。 後一種技巧對於復雜的操作比較有用,並且可以促進代碼重用。

本文將構建的單個數據流使用多個 Design Studio 操作符,包括 Table Source 和 Table Target 操作符、XML Relational Mapping 操作符、Group By 操作符和 Table Join 操作符。圖 4 顯示總體設計,後面將對此進行詳細的討論。

圖 4. 用於 ETL 場景的數據流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

Table Source 操作符(在 圖 4 左上角)將 TPOXADMIN.ACCOUNT 表標識為輸入源。 這個表中的 XML 數據輸入到兩個 XML Relational Mapping 操作符。 其中一個操作符(圖 4 中下方的分支)為一個 Group By 操作符提供輸入,後者執行 表 1 中所示的聚合。但是,其中一個目標表 (DWADMIN.ACCT)還要求維護完整的 XML 記錄,以滿足遵從性需求。由於 XML 列不能參與 Group By 子句,因此需要另一個 XML Relational Mapping 操作符( 圖 4 中上方的分支)。該操作符將從 XML 數據提取賬戶 ID 值,並保留完整的 XML 記錄。 然後,將該映射操作獲得的賬戶 ID 與 Group By 操作的輸出中包括的賬戶 ID 進行連接, 創建一個結果集,該結果集將填充目標 ACCT 表。

填充目標 DWADMIN.HOLDINGS 表就更簡單。 一個 XML Relational Mapping 操作符(見 圖 4 下方的分支)的輸出可以直接用於填充目標表。

步驟 1:准備 DB2 數據庫環境

本文的 下載 小節包含一個 DB2 腳本, 該腳本創建必要的操作型(源)表和數據倉庫(目標)表。 它還用示例 XML 賬戶信息填充操作型表。 下載 DWsetup.db2 文件,打開一個 DB2 命令窗口,然後發出清單 3 所示的命令。

清單 3. 調用 DB2 腳本

 db2 -td@ -vf DWsetup.db2 

注意,該腳本支持 Windows 上運行的 DB2 9.7 服務器。

步驟 2: 准備 Design Studio 環境

在創建數據流之前,准備 Design Studio 環境。 下面的步驟描述如何遵循標准的 Design Studio 過程來建立到 TPoX 數據庫的連接,創建 Data Warehouse 項目,通過反向工程創建 TPoX 數據庫的物理數據模型,以及創建一個新的數據流。

在 Data Source Explorer 中,選中 TPoX 數據庫,單擊右鍵, 連接到該數據庫。

輸入適當的信息,包括用戶名和密碼,如圖 5 所示。

圖 5. 建立到 TPoX 數據庫的連接
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

測試連接,確保已連接到數據庫。

在 Data Project Explorer 面板中,單擊右鍵,創建一個新的數據倉庫項目,並為之命名。

選擇剛才創建的項目,導航到 Data Flows 文件夾。

單擊右鍵,創建一個新的數據流,並為之命名。

對於本場景,指定需要在一個在線數據庫上操作,出現提示時選擇 TPoX 數據庫連接。 忽略可能出現的任何錯誤,因為數據流現在是空的。

在項目中,導航到 Data Models 文件夾。

單擊右鍵,創建一個新的物理數據模型。

指定需要通過對 DB2 9.7 數據庫進行反向工程來創建模型。

出現提示時指定 TPoX 數據庫連接,選擇 TPOXADMIN 和 DWADMIN 作為目標模式。

步驟 3:將源表添加到數據流

通過以下步驟設計數據流,使之從 TPOXADMIN.ACCOUNT 表讀源數據。

從 Palette 中,選擇 SQL Warehousing Operators > Sources and Tables > Table Source。

將它拖放到空白數據流的左側。這時出現一個向導。

選擇 TPOXADMIN.ACCOUNT 作為源數據庫表,如圖 6 所示。

圖 6. 指定 TPOXADMIN.ACCOUNT 作為源表
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

確認結果集包括輸出中的 INFO 列(XML 列)。

保存。

步驟 4:添加一個 XML Relational Mapping 操作符

完成以下步驟,添加一個 XML Relational Mapping 操作符,將它連接到源表的輸出端。對這個操作符進行配置,使之從每個 XML 文檔提取賬戶 ID,並將每個 XML 文檔的完整內容 包括在結果集中。示例目標 DWADMIN.ACCT 表包括一些關系列和原始的 XML 記錄。 該操作符提取賬戶 ID 值,以驅動一個連接操作,該連接操作可以產生所需的結果集。

從 Palette 中,選擇 XML Operators > XML Relational Mapping。

將它拖放到 Table Source 圖標的右邊。

將源表連接到 XML Relational Mapping 操作符。

右鍵單擊 XML Relational Mapping 操作符,對它進行配置。

將 INFO 列指定為 XML 列。

為輸入 XML 文檔指定名稱空間。如 圖 3 所示,所有賬戶記錄有一個 XML 名稱空間。

單擊黃色的 + 圖標,添加一行到 Namespaces 框,然後輸入 http://tpox-benchmark.com/custacc 作為 URI。

將 Prefix 字段留空,使用這個 URI 作為默認名稱空間,如圖 7 所示。

圖 7. 定義 XPath 表達式的默認名稱空間
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

完成以下步驟,指定將驅動底層 XMLTable() 函數的 XQuery 表達式和列定義。 XML Relational Mapping 操作符生成一個 DB2 查詢,它包括一個 XMLTable() 函數調用。

指定 /Account/@id 作為 XQuery 表達式。

定義輸出結果集,使之包括一個 integer 類型的 ID 列,它由 XQuery 表達式中指定的節點派生而來。Path 字段應該被設為 .(一個句號)。這導致 DB2 將 /Account/@id 中的賬戶 ID 信息轉換為整數值。

確認 XQuery 表達式被指定為 /Account/@id,並且在 Column 定義中,列名為 id,數據類型為 INTEGER,如圖 8 所示。

圖 8. 提取賬戶 ID 信息, 將輸出轉換為整數值
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

確認該數據流操作符的輸出包括 ID 列和原始 XML 輸入列。本示例最終的結果集顯示兩個列:fullrecord (XML)和 id(整數),如圖 9 所示。

圖 9. 定義包括兩個列的最終結果集
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 5:添加另一個 XML Relational Mapping 操作符

示例數據流需要兩個 XML Relational Mapping 操作符。第二個操作符從不同的 XML 節點提取一些關系列值。該操作符還從時間戳提取日期和時間信息,並用一個 XML 數據值填充兩個關系列。 最後,該操作符提取一個關系值,用於驅動隨後的 Group By 操作中計算的聚合操作。

和第一個 XML Relational Mapping 操作符一樣,這個操作符使用 TPOXADMIN.ACCOUNT 表的 INFO 列作為輸入源。

完成以下步驟,添加第二個 XML Relational Mapping 操作符:

從 Palette 中,選擇 XML Operators > XML Relational Mapping。

將它拖放到工作流中已有的 XML Relational Mapping 操作符的下面。

將源表連接到這個新的 XML Relational Mapping 操作符。

雙擊新的 XML Relational Mapping 操作符,對它進行配置。

指定 INFO 列作為 XML 列。

指定默認名稱空間 http://tpox-benchmark.com/custacc。

指定 XQuery 表達式和列定義,它們將驅動底層的 XMLTable() 函數。由於每個賬戶可能有多種投資, 完成以下步驟,指定一個 XQuery 表達式,對於每個賬戶的每種投資,該表達式將生成一行記錄。

指定 /Account/Holdings/Position/Type 作為行生成 XQuery 表達式。

定義輸出結果集,使之包括與目標 DWADMIN.ACCT 和 DWADMIN.HOLDINGS 表中的列匹配的關系列,另外還包括兩個通過計算得到的列(DISTINCTHOLDINGS 和 TOTALHOLDINGS)。表 3 顯示所需的列和它們相應的數據類型和路徑表達式。

表 3. /Account/Holdings/Postion/Type 的列定義

列名 數據類型 長度 精度 路徑 id INTEGER     ../../../@id title VARCHAR 50   ../../../AccountTitle currency CHAR 3   ../../../Currency workingbalance INTEGER     ../../../Balance/WorkingBalance@id Officer VARCHAR 50   ../../../AccountOfficer datechanged TIMESTAMP     ../../../LastUpdate timechanged TIMESTAMP     ../../../LastUpdate holdingtype VARCHAR 25   。 symbol VARCHAR 30   ../Symbol qty DECIMAL 12 3 ../Quantity

通過將除 INFO 列之外的所有可用列映射到相應的結果列,指定這個數據流操作符的輸出,如圖 10 所示。

圖 10. 定義該操作符生成的結果集
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

更改結果集中 DATECHANGED 和 TIMECHANGED 列的定義,使它們的值由調用 DATE/TIME 操作的適當 SQL 表達式生成。可以通過雙擊每行指定這些表達式,這將顯示另一個窗口,其中有一個文本區用於構建或輸入 SQL 表達式。 將 DATE(table.column) 用於結果集中的 DATECHANGED 列,將 TIME(table.column) 用於結果集中的 TIMECHANGED 列。 表達式 date("XMLTABLE_08"."datechanged") 定義 DATECHANGED 結果列,如圖 11 所示。

圖 11. 在 SQL 文本面板中指定適當的 DATE/TIME 表達式
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 6:添加一個 Group By 操作符

從源 XML 列提取所有需要的關系值之後,便可以為一個目標數據倉庫表(DWADMIN.ACCT 表)聚合這兩個值。這個 表 跟蹤每個賬戶的投資筆數, 以及每個賬戶的投資類型種數。 例如,一個投資 4 種股票基金和 3 種債券基金的賬戶總共有 7 筆投資,有 2 種投資類型。 通過 Group By 操作符可以生成一個結果集,其中包括所需的聚合操作。 完成以下步驟,創建 Group By 操作符並對它進行配置。

從 Palette 中,選擇 SQL Warehousing Operators > Transformations > Group By。

將它拖放到第二個 XML Relational Mapping 操作符的右邊。

將 XML Relational Mapping 操作符連接到 Group By 操作符。

雙擊 Group By 操作符,對它進行配置。

通過以下步驟,指定該操作符生成的結果集中包括的列:

從結果集中顯示的 Select List 中去掉 INFO 列( XML 列)。SQL Group By 語句中不能包括 XML 列。 在隨後的數據流操作中,您將使用一個連接操作符確保整個 XML 賬戶記錄(包含在 INFO 列中)被填充到目標數據倉庫表中。

從結果集中去掉 HOLDINGTYPE、SYMBOL 和 QTY 列。 這些列對於 DWADMIN.ACCT 目標表來說不需要。

更改 TOTALHOLDINGS 列的輸入表達式,使之執行 HOLDINGTYPE 值的計數。得到的表達式應該類似於 COUNT("INPUT_023_0"."holdingtype")。

更改 DISTINCTHOLDINGS 列的輸入表達式,使之執行 HOLDINGTYPE 不同值的計數。得到的表達式應該類似於 COUNT(distinct "INPUT_023_0"."holdingtype")。

圖 12 顯示如何配置 Group By 操作符。注意, TOTALHOLDINGS 和 DISTINCTHOLDINGS 列是使用 COUNT() 表達式計算的。

圖 12. 指定結果集的列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

指定生成的 GROUP BY 子句中包括的列,如圖 13 所示。

圖 13. 指定 Group By 子句中包括的列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 7:添加一個 Table Join 操作符

至此,已經可以將 Group By 操作符生成的數據與原先的 XML Relational Mapping 操作符生成的數據連接起來。 然後,便有一個單獨的結果集,這個結果集可用於填充目標 DWADMIN.ACCT 表。

從 Palette 中,選擇 SQL Warehousing Operators > Transformations > Table Join。

將它拖放到 Group By 操作符的右邊。

將第一個 XML Relational Mapping 操作符連接到 Table Join。

將 Group By 操作符連接到 Table Join。

雙擊 Table Join 操作符,對它進行配置。

通過單擊 … 按鈕或手動指定,創建一個表達式,該表達式執行兩個結果集中的 ID 列上的內部相等連接。例如,Join 條件可能是 "IN_045_0"."id" = "IN1_045_1"."id",如圖 14 所示。

圖 14. 構建連接表達式
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

也可以使用 Design Studio 圖形化地構造連接表達式,如圖 15 所示。

圖 15. 圖形化地構造連接表達式
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

指定結果集中包括的列,如圖 16 所示。這些列應該與目標 DWADMIN.ACCT 表中的列匹配。

圖 16. 選擇操作符結果集中包括的列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 8:為 ACCT 添加一個 Target Table 操作符

現在可以定義填充兩個目標數據倉庫表的操作符。 完成以下步驟,填充 DWADMIN.ACCT 表。

從 Palette 中,選擇 SQL Warehousing Operators > Target Table。

將它拖放到 Table Join 操作符的右邊。

看到提示時,指定 DWADMIN.ACCT 作為 Target Database Table,如圖 17 所示。

圖 17. 指定 DWADMIN.ACCT 作為目標表
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

將標簽為 Inner(用於內部連接)的 Table Join 操作符連接到 Target Table 操作符。

雙擊 Target Table 操作符,對它進行配置。

選擇 Delete all rows,指定在執行插入操作前需要清空目標表,如圖 18 所示。 這樣便於多次測試數據流。

圖 18. 插入前刪除所有行
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

通過將源列(左側)拖放到右側的結果列定義的 Map From 區中,將 Table Join 操作符結果集中的源列映射到目標表的目標列,如圖 19 所示。

圖 19. 指定目標 ACCT 表中每個列的源列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 9:為 HOLDINGS 添加一個 Target Table 操作符

現在通過以下步驟定義一個 Target Table 操作符,用於填充 DWADMIN.HOLDINGS 表:

從 Palette 中,選擇 SQL Warehousing Operators > Target Table。

將它拖放到下方 XML Relational Mapping 操作符的右邊。 該操作符還充當 Group By 操作符的輸入。

看到提示時,指定 DWADMIN.HOLDINGS 作為 Target database table,如圖 20 所示。

圖 20. 指定 DWADMIN.HOLDINGS 作為目標表
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

將 XML Relational Mapping 操作符連接到用於 DWADMIN.HOLDINGS 的 Target Table 操作符。

雙擊 Target Table 操作符,對它進行配置。

選擇 Delete all rows,指定在執行插入操作前清空目標表,如圖 21 所示。 這樣便於多次測試數據流。

圖 21. 插入前刪除所有行
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

將來自 XML Relational Mapping 操作符的適當的源列映射到該表的目標列,如圖 22 所示。 可以將部分可用列插入到這個目標表中。

圖 22. 將可用輸入映射到 HOLDINGS 表中的列
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

步驟 10:測試

現在可以遵循下面的標准 Design Studio 過程來測試數據流。 您將發現,一開始使用調試器進行測試會有所幫助,雖然不是必須這樣做。

首先,保存工作。

在 Data Project Explorer 面板中,右鍵單擊數據流,選擇 Validate。

如果檢測到錯誤,先修正錯誤,然後繼續。

必要時,在數據流中設置斷點,方法是在數據流中操作符之間的連接上單擊右鍵,然後單擊 Toggle Breakpoint。圖 23 顯示為連接設置斷點時數據流的樣子。

圖 23. 設置了用於調試的斷點的數據流
結合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 數據,第 1 部分: 創建用於填充混合型數據倉庫的 ETL 數據流

查看原圖(大圖)

在 Data Project Explorer 面板中,右鍵單擊數據流,單擊 Debug 或 Execute。如果調試數據流,可以使用 Resume 圖標監視數據流中的每個步驟。注意,調試器可能生成與 DROP TABLE 語句相關的警告,對此可以忽略。

必要時,檢查調試或執行數據流時生成的語句。 這時會出現一個窗口,其中包含與數據流相關的 DB2 SQL 和 SQL/XML 語句。清單 4 包含為本示例數據流生成的代碼的總結的一部分。

清單 4. 數據流執行結果,包括生成的代碼

Execution Result: 
INFO: SQW10102I: Execution succeeded. 
 
 
------------------------------------------------------ 
Execution Log: 
C:/DWE/workspace/TPoXDW/run-profiles/logs/XMLTableACCTHoldingsGroupBy_SQW00... 
 
 Data-Flows Jan 25, 2010 1:09:49 PM SQW03415I: Flow execution started for SQW00... 
 Data-Flows Jan 25, 2010 1:09:49 PM SQW38501I: Execution log file: C/DWE/works... 
 Data-Flows Jan 25, 2010 1:09:49 PM SQW38509I: Execution temporary work directory... 
 Data-Flows Jan 25, 2010 1:09:52 PM SQW03275I: Execution of SQL statement "SET... 
 Data-Flows Jan 25, 2010 1:09:52 PM SQW03275I: Execution of SQL statement "CREATE... 
 INFO 
) AS 
WITH 
 Q22 (INFO) AS 
  (SELECT INFO AS INFO 

結束語

本系列探索如何使用 IBM InfoSphere Warehouse Design Studio 和 DB2 pureXML 來支持數據倉庫對 XML 日益增長的使用。 XML 已成為很多組織用於數據交換的首選格式。 因此,數據架構師正在評估將 XML 集成到數據倉庫的不同選擇。設計 ETL 任務(或數據流)是將 XML 集成到數據倉庫環境的重要方面。

本文是一個分兩部分的系列的第一篇文章,文中闡述了如何構建一個數據流,該數據流使用一個基於 XML 的源表填充兩個目標數據倉庫表。其中一個數據倉庫表只包含關系數據,另一個表同時包含關系數據和 XML 數據。本系列第二篇文章將探索如何使用控制流實現類似的場景,該控制流連續執行兩個不同的數據流,這兩個數據流都依賴於一個共同的基於 XML 的源表。以這種方式控制 ETL 工作,對於保證按適當次序裝載包含主鍵或外鍵依賴的數據倉庫表十分有用。

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

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