内容


结合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 数据,第 1 部分

创建用于填充混合型数据仓库的 ETL 数据流

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 结合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 数据,第 1 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:结合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 数据,第 1 部分

敬请期待该系列的后续内容。

简介

随着 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 数据。
XML 和关系数据都可以被 SQL 或 XQuery 访问
XML 和关系数据都可以被 SQL 或 XQuery 访问

为了使用 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)基准的子集。稍后您将了解更多关于操作型数据和数据仓库设计的信息。 要了解更多关于 TPoX 的信息,请参阅 参考资料

场景简介

本文描述的场景使用 DB2 pureXML 中存储的操作型数据作为提取、转换和装载(ETL)任务的输入, 这些任务用于填充一个基于 DB2 的数据仓库。您将使用 Design Studio 提取一个 DB2 XML 列中存储的数据,并将该数据映射到一个 DB2 数据仓库中的两个表中,如图 2 所示。 其中一个表只包含传统的关系列,另一个表包含一些关系列和一个 XML 列。

图 2. 示例场景提取 DB2 pureXML 中存储的操作型数据输入到 DB2 数据仓库
XML 数据被映射到仓库中的 XML 数据和关系数据
XML 数据被映射到仓库中的 XML 数据和关系数据

这个数据模型表示一个常见的场景,在此场景中, 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 记录的一部分
一个 XML 记录,包含 begin 和 end 标记
一个 XML 记录,包含 begin 和 end 标记

为简化测试,目标数据仓库数据库也配置为 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
DATECHANGEDExtracted from /Account/LastUpdate
TIMECHANGEDExtracted from /Account/LastUpdate
TOTALHOLDINGSComputed. (Count of /Account/Position/Type)
HOLDINGTYPESComputed. (Count distinct of /Account/Position/Type)
FULLRECORDEntire 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 场景的数据流
XMLTableACCTHoldingsGroupBy 实体的流程图,包含 Inputs 和 Outputs
XMLTableACCTHoldingsGroupBy 实体的流程图,包含 Inputs 和 Outputs

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 数据库的物理数据模型,以及创建一个新的数据流。

  1. 在 Data Source Explorer 中,选中 TPoX 数据库,单击右键, 连接到该数据库。
  2. 输入适当的信息,包括用户名和密码,如图 5 所示。
图 5. 建立到 TPoX 数据库的连接
TPoX 数据库的驱动程序属性
TPoX 数据库的驱动程序属性
  1. 测试连接,确保已连接到数据库。
  2. 在 Data Project Explorer 面板中,单击右键,创建一个新的数据仓库项目,并为之命名。
  3. 选择刚才创建的项目,导航到 Data Flows 文件夹。
  4. 单击右键,创建一个新的数据流,并为之命名。
  5. 对于本场景,指定需要在一个在线数据库上操作,出现提示时选择 TPoX 数据库连接。 忽略可能出现的任何错误,因为数据流现在是空的。
  6. 在项目中,导航到 Data Models 文件夹。
  7. 单击右键,创建一个新的物理数据模型。
  8. 指定需要通过对 DB2 9.7 数据库进行反向工程来创建模型。
  9. 出现提示时指定 TPoX 数据库连接,选择 TPOXADMINDWADMIN 作为目标模式。

步骤 3:将源表添加到数据流

通过以下步骤设计数据流,使之从 TPOXADMIN.ACCOUNT 表读源数据。

  1. 从 Palette 中,选择 SQL Warehousing Operators > Sources and Tables > Table Source
  2. 将它拖放到空白数据流的左侧。这时出现一个向导。
  3. 选择 TPOXADMIN.ACCOUNT 作为源数据库表,如图 6 所示。
图 6. 指定 TPOXADMIN.ACCOUNT 作为源表
ACCOUNT 常规信息窗口,其中显示源数据库表
ACCOUNT 常规信息窗口,其中显示源数据库表
  1. 确认结果集包括输出中的 INFO 列(XML 列)。
  2. 保存。

步骤 4:添加一个 XML Relational Mapping 操作符

完成以下步骤,添加一个 XML Relational Mapping 操作符,将它连接到源表的输出端。对这个操作符进行配置,使之从每个 XML 文档提取账户 ID,并将每个 XML 文档的完整内容 包括在结果集中。示例目标 DWADMIN.ACCT 表包括一些关系列和原始的 XML 记录。 该操作符提取账户 ID 值,以驱动一个连接操作,该连接操作可以产生所需的结果集。

  1. 从 Palette 中,选择 XML Operators > XML Relational Mapping
  2. 将它拖放到 Table Source 图标的右边。
  3. 将源表连接到 XML Relational Mapping 操作符。
  4. 右键单击 XML Relational Mapping 操作符,对它进行配置。
  5. 将 INFO 列指定为 XML 列。
  6. 为输入 XML 文档指定名称空间。如 图 3 所示,所有账户记录有一个 XML 名称空间。
  7. 单击黄色的 + 图标,添加一行到 Namespaces 框,然后输入 http://tpox-benchmark.com/custacc 作为 URI。
  8. Prefix 字段留空,使用这个 URI 作为默认名称空间,如图 7 所示。
图 7. 定义 XPath 表达式的默认名称空间
MappingWithXML 窗口,其中显示无前缀的 tpox 名称空间
MappingWithXML 窗口,其中显示无前缀的 tpox 名称空间
  1. 完成以下步骤,指定将驱动底层 XMLTable() 函数的 XQuery 表达式和列定义。 XML Relational Mapping 操作符生成一个 DB2 查询,它包括一个 XMLTable() 函数调用。
    1. 指定 /Account/@id 作为 XQuery 表达式。
    2. 定义输出结果集,使之包括一个 integer 类型的 ID 列,它由 XQuery 表达式中指定的节点派生而来。Path 字段应该被设为 .(一个句号)。这导致 DB2 将 /Account/@id 中的账户 ID 信息转换为整数值。
    3. 确认 XQuery 表达式被指定为 /Account/@id,并且在 Column 定义中,列名为 id,数据类型为 INTEGER,如图 8 所示。
图 8. 提取账户 ID 信息, 将输出转换为整数值
列定义屏幕,其中指定了 /Account/@id、id 和 INTEGER
列定义屏幕,其中指定了 /Account/@id、id 和 INTEGER
  1. 确认该数据流操作符的输出包括 ID 列和原始 XML 输入列。本示例最终的结果集显示两个列:fullrecord (XML)和 id(整数),如图 9 所示。
图 9. 定义包括两个列的最终结果集
Result Columns,包含一个 XML 类型和一个 INTEGER 类型的表达式
Result Columns,包含一个 XML 类型和一个 INTEGER 类型的表达式

步骤 5:添加另一个 XML Relational Mapping 操作符

示例数据流需要两个 XML Relational Mapping 操作符。第二个操作符从不同的 XML 节点提取一些关系列值。该操作符还从时间戳提取日期和时间信息,并用一个 XML 数据值填充两个关系列。 最后,该操作符提取一个关系值,用于驱动随后的 Group By 操作中计算的聚合操作。

和第一个 XML Relational Mapping 操作符一样,这个操作符使用 TPOXADMIN.ACCOUNT 表的 INFO 列作为输入源。

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

  1. 从 Palette 中,选择 XML Operators > XML Relational Mapping
  2. 将它拖放到工作流中已有的 XML Relational Mapping 操作符的下面。
  3. 将源表连接到这个新的 XML Relational Mapping 操作符。
  4. 双击新的 XML Relational Mapping 操作符,对它进行配置。
  5. 指定 INFO 列作为 XML 列。
  6. 指定默认名称空间 http://tpox-benchmark.com/custacc
  7. 指定 XQuery 表达式和列定义,它们将驱动底层的 XMLTable() 函数。由于每个账户可能有多种投资, 完成以下步骤,指定一个 XQuery 表达式,对于每个账户的每种投资,该表达式将生成一行记录。
    1. 指定 /Account/Holdings/Position/Type 作为行生成 XQuery 表达式。
    2. 定义输出结果集,使之包括与目标 DWADMIN.ACCT 和 DWADMIN.HOLDINGS 表中的列匹配的关系列,另外还包括两个通过计算得到的列(DISTINCTHOLDINGS 和 TOTALHOLDINGS)。表 3 显示所需的列和它们相应的数据类型和路径表达式。
表 3. /Account/Holdings/Postion/Type 的列定义
列名数据类型长度精度路径
idINTEGER../../../@id
titleVARCHAR50../../../AccountTitle
currencyCHAR3../../../Currency
workingbalanceINTEGER../../../Balance/WorkingBalance@id
officerVARCHAR50../../../AccountOfficer
datechangedTIMESTAMP../../../LastUpdate
timechangedTIMESTAMP../../../LastUpdate
holdingtypeVARCHAR25
symbolVARCHAR30../Symbol
qtyDECIMAL123../Quantity
  1. 通过将除 INFO 列之外的所有可用列映射到相应的结果列,指定这个数据流操作符的输出,如图 10 所示。
图 10. 定义该操作符生成的结果集
定义                     该操作符生成的结果集
定义 该操作符生成的结果集
  1. 更改结果集中 DATECHANGED 和 TIMECHANGED 列的定义,使它们的值由调用 DATE/TIME 操作的适当 SQL 表达式生成。可以通过双击每行指定这些表达式,这将显示另一个窗口,其中有一个文本区用于构建或输入 SQL 表达式。 将 DATE(table.column) 用于结果集中的 DATECHANGED 列,将 TIME(table.column) 用于结果集中的 TIMECHANGED 列。 表达式 date("XMLTABLE_08"."datechanged") 定义 DATECHANGED 结果列,如图 11 所示。
图 11. 在 SQL 文本面板中指定适当的 DATE/TIME 表达式
SQL 表达式构建器,其中包含用于 datechanged 的 SQL 表达式
SQL 表达式构建器,其中包含用于 datechanged 的 SQL 表达式

步骤 6:添加一个 Group By 操作符

从源 XML 列提取所有需要的关系值之后,便可以为一个目标数据仓库表(DWADMIN.ACCT 表)聚合这两个值。这个 跟踪每个账户的投资笔数, 以及每个账户的投资类型种数。 例如,一个投资 4 种股票基金和 3 种债券基金的账户总共有 7 笔投资,有 2 种投资类型。 通过 Group By 操作符可以生成一个结果集,其中包括所需的聚合操作。 完成以下步骤,创建 Group By 操作符并对它进行配置。

  1. 从 Palette 中,选择 SQL Warehousing Operators > Transformations > Group By
  2. 将它拖放到第二个 XML Relational Mapping 操作符的右边。
  3. 将 XML Relational Mapping 操作符连接到 Group By 操作符。
  4. 双击 Group By 操作符,对它进行配置。
  5. 通过以下步骤,指定该操作符生成的结果集中包括的列:
    1. 从结果集中显示的 Select List 中去掉 INFO 列( XML 列)。SQL Group By 语句中不能包括 XML 列。 在随后的数据流操作中,您将使用一个连接操作符确保整个 XML 账户记录(包含在 INFO 列中)被填充到目标数据仓库表中。
    2. 从结果集中去掉 HOLDINGTYPE、SYMBOL 和 QTY 列。 这些列对于 DWADMIN.ACCT 目标表来说不需要。
    3. 更改 TOTALHOLDINGS 列的输入表达式,使之执行 HOLDINGTYPE 值的计数。得到的表达式应该类似于 COUNT("INPUT_023_0"."holdingtype")
    4. 更改 DISTINCTHOLDINGS 列的输入表达式,使之执行 HOLDINGTYPE 不同值的计数。得到的表达式应该类似于 COUNT(distinct "INPUT_023_0"."holdingtype")

    图 12 显示如何配置 Group By 操作符。注意, TOTALHOLDINGS 和 DISTINCTHOLDINGS 列是使用 COUNT() 表达式计算的。

图 12. 指定结果集的列
包括 COUNT 表达式的选择列表
包括 COUNT 表达式的选择列表
  1. 指定生成的 GROUP BY 子句中包括的列,如图 13 所示。
图 13. 指定 Group By 子句中包括的列
Group By 子句中包括的列
Group By 子句中包括的列

步骤 7:添加一个 Table Join 操作符

至此,已经可以将 Group By 操作符生成的数据与原先的 XML Relational Mapping 操作符生成的数据连接起来。 然后,便有一个单独的结果集,这个结果集可用于填充目标 DWADMIN.ACCT 表。

  1. 从 Palette 中,选择 SQL Warehousing Operators > Transformations > Table Join
  2. 将它拖放到 Group By 操作符的右边。
  3. 将第一个 XML Relational Mapping 操作符连接到 Table Join。
  4. 将 Group By 操作符连接到 Table Join。
  5. 双击 Table Join 操作符,对它进行配置。
  6. 通过单击 按钮或手动指定,创建一个表达式,该表达式执行两个结果集中的 ID 列上的内部相等连接。例如,Join 条件可能是 "IN_045_0"."id" = "IN1_045_1"."id",如图 14 所示。
图 14. 构建连接表达式
JoinGroupedDataWithFullXML 窗口,其中显示 Join 条件
JoinGroupedDataWithFullXML 窗口,其中显示 Join 条件
  1. 也可以使用 Design Studio 图形化地构造连接表达式,如图 15 所示。
图 15. 图形化地构造连接表达式
SQL Condition Builder 的屏幕截图,用于选择 Inputs、Keywords、Operations、Functions 和 Variables,或者输入 SQL Text
SQL Condition Builder 的屏幕截图,用于选择 Inputs、Keywords、Operations、Functions 和 Variables,或者输入 SQL Text
  1. 指定结果集中包括的列,如图 16 所示。这些列应该与目标 DWADMIN.ACCT 表中的列匹配。
图 16. 选择操作符结果集中包括的列
JoinGroupedDataWithFullXML 窗口,其中的 Project Expressions                             Output 区显示 Available Columns 和 Result Columns
JoinGroupedDataWithFullXML 窗口,其中的 Project Expressions Output 区显示 Available Columns 和 Result Columns

步骤 8:为 ACCT 添加一个 Target Table 操作符

现在可以定义填充两个目标数据仓库表的操作符。 完成以下步骤,填充 DWADMIN.ACCT 表。

  1. 从 Palette 中,选择 SQL Warehousing Operators > Target Table
  2. 将它拖放到 Table Join 操作符的右边。
  3. 看到提示时,指定 DWADMIN.ACCT 作为 Target Database Table,如图 17 所示。
图 17. 指定 DWADMIN.ACCT 作为目标表
ACCT 窗口,其中指定 DWADMIN.ACCT 作为 Target database table
ACCT 窗口,其中指定 DWADMIN.ACCT 作为 Target database table
  1. 将标签为 Inner(用于内部连接)的 Table Join 操作符连接到 Target Table 操作符。
  2. 双击 Target Table 操作符,对它进行配置。
  3. 选择 Delete all rows,指定在执行插入操作前需要清空目标表,如图 18 所示。 这样便于多次测试数据流。
图 18. 插入前删除所有行
Insert : ACCT 窗口,Clean Target Table Before Insert 被设为 Delete all rows。
Insert : ACCT 窗口,Clean Target Table Before Insert 被设为 Delete all rows。
  1. 通过将源列(左侧)拖放到右侧的结果列定义的 Map From 区中,将 Table Join 操作符结果集中的源列映射到目标表的目标列,如图 19 所示。
图 19. 指定目标 ACCT 表中每个列的源列
Map Source to                             Target 窗口,其中显示 Available Columns 和 Result Columns
Map Source to Target 窗口,其中显示 Available Columns 和 Result Columns

步骤 9:为 HOLDINGS 添加一个 Target Table 操作符

现在通过以下步骤定义一个 Target Table 操作符,用于填充 DWADMIN.HOLDINGS 表:

  1. 从 Palette 中,选择 SQL Warehousing Operators > Target Table
  2. 将它拖放到下方 XML Relational Mapping 操作符的右边。 该操作符还充当 Group By 操作符的输入。
  3. 看到提示时,指定 DWADMIN.HOLDINGS 作为 Target database table,如图 20 所示。
图 20. 指定 DWADMIN.HOLDINGS 作为目标表
Insert : HOLDINGS 窗口,其中指定 DWADMIN.HOLDINGS 作为 Target database table
Insert : HOLDINGS 窗口,其中指定 DWADMIN.HOLDINGS 作为 Target database table
  1. 将 XML Relational Mapping 操作符连接到用于 DWADMIN.HOLDINGS 的 Target Table 操作符。
  2. 双击 Target Table 操作符,对它进行配置。
  3. 选择 Delete all rows,指定在执行插入操作前清空目标表,如图 21 所示。 这样便于多次测试数据流。
图 21. 插入前删除所有行
Advanced                             options 窗口,其中在 Clean Target Table                             Before Insert 栏指定 Delete All Rows
Advanced options 窗口,其中在 Clean Target Table Before Insert 栏指定 Delete All Rows
  1. 将来自 XML Relational Mapping 操作符的适当的源列映射到该表的目标列,如图 22 所示。 可以将部分可用列插入到这个目标表中。
图 22. 将可用输入映射到 HOLDINGS 表中的列
用于 HOLDINGS 的 Map Source to Target 窗口,其中显示 Available Columns 和 Result Column,Result Column 中只包括 id、symbol、holdingtype 和 qty
用于 HOLDINGS 的 Map Source to Target 窗口,其中显示 Available Columns 和 Result Column,Result Column 中只包括 id、symbol、holdingtype 和 qty

步骤 10:测试

现在可以遵循下面的标准 Design Studio 过程来测试数据流。 您将发现,一开始使用调试器进行测试会有所帮助,虽然不是必须这样做。

  1. 首先,保存工作。
  2. 在 Data Project Explorer 面板中,右键单击数据流,选择 Validate
  3. 如果检测到错误,先修正错误,然后继续。
  4. 必要时,在数据流中设置断点,方法是在数据流中操作符之间的连接上单击右键,然后单击 Toggle Breakpoint。图 23 显示为连接设置断点时数据流的样子。
图 23. 设置了用于调试的断点的数据流
XMLTableACCTHoldingsGroupBy 窗口,Table Join 实体的每个输出和 Inner 之后都有断点
XMLTableACCTHoldingsGroupBy 窗口,Table Join 实体的每个输出和 Inner 之后都有断点
  1. 在 Data Project Explorer 面板中,右键单击数据流,单击 DebugExecute。如果调试数据流,可以使用 Resume 图标监视数据流中的每个步骤。注意,调试器可能生成与 DROP TABLE 语句相关的警告,对此可以忽略。
  2. 必要时,检查调试或执行数据流时生成的语句。 这时会出现一个窗口,其中包含与数据流相关的 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 工作,对于保证按适当次序装载包含主键或外键依赖的数据仓库表十分有用。

致谢

感谢 Matthias Nicola、Jing Shan、Lin Xu 和 Shumin Wu 审校了本文章系列。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, XML
ArticleID=494704
ArticleTitle=结合使用 IBM InfoSphere Warehouse Design Studio 和 pureXML 数据,第 1 部分: 创建用于填充混合型数据仓库的 ETL 数据流
publish-date=06082010