内容


IBM InfoSphere DataStage 和 DB2 pureXML,第 2 部分

构建支持 XML 的数据仓库

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: IBM InfoSphere DataStage 和 DB2 pureXML,第 2 部分

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

此内容是该系列的一部分:IBM InfoSphere DataStage 和 DB2 pureXML,第 2 部分

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

随着越来越多的业务依赖 XML 来表示和交换业务数据,将 XML 运营数据整合到数据仓库中的能力变得更重要了。本系列的第 1 部分探讨了 IBM InfoSphere DataStage 如何使用 DB2 pureXML 技术提取存储的 XML 数据,将此数据转换成传统关系结构并将其加载到数据仓库中。

本文关注的是另一种使用 DataStage 将 XML 数据整合到仓库中的方式。分步讲解了如何从平面文件读取业务数据,将此数据转换成 XML 并用转换后的数据填充数据仓库。数据仓库构建在 DB2 pureXML 之上。

将运营数据转换成 pureXML 仓库数据

文件是常见的运营数据来源,业务需要将这些数据整合到数据仓库中。此场景为您展示了如何使用 DataStage 从以逗号分隔的文件读取关于金融投资的信息,将该数据转换成 XML,然后使用 DB2 pureXML 将 XML 数据存储在数据仓库中。将数据存储为 XML 可能很有用,因为下游的应用程序可能需要处理 XML 格式的数据。这种情景越来越常见,因为业务依赖于特定于行业的 XML 格式进行数据交换,而应用程序提供商依赖于 XML 提供厂商中立的数据表示方式。当然,也可以使用 DataStage 将数据从文件转换成关系结构,但是因为这种功能已经在其他文章中进行了详细介绍,所以此处就不再赘述了。

设计概述

如本系列 IBM InfoSphere DataStage 和 DB2 pureXML,第 1 部分:将 XML 运营数据集成到数据仓库 所述,此场景中的数据是基于金融帐户的。以逗号分隔的样例文件作为源数据,包含表示帐户和相关投资组合控股情况的记录。文件中的每条记录都引用了帐户 ID、投资类型(例如,股票或债券)、投资代号以及持有股份数量。清单 1 显示了来自样例文件的一条记录示例。

清单 1. 样例源文件中记录的示例
804130877,"Stock","ZION",+000001927.719

源文件中的每条记录描述了每帐户的一种资产(投资)。每帐户可以有多个资产,所以每个帐户可以有多条记录。样例文件中的记录按帐户 ID 排序,免除了您在完成所需处理之前让 DataStage 对输入进行排序的需要。 可以从 下载 部分,下载样例源文件(以及本系列文章的其他附属材料)。

要构建的 DataStage 作业需要将数据从源文件转换成单个 XML 文档 — 一个帐户一个文档。这意味着如果一个帐户有多条记录,您需要将这几条记录映射到单个 XML 文档。清单 2 是单个帐户的 XML 文档示例。注意每个 <Position> 元素表示一个帐户的某个单独的投资。

清单 2. 带有数据和控股信息的单个帐户目标 XML 文档示例
<Account>
	<Id>804130877</Id>
	<Holdings>
		<Position>
			<Type>Stock</Type>
			<Symbol>ZION</Symbol>
			<Quantity>1927.719</Quantity>
		</Position>
		<Position>
			<Type>Stock Fund</Type>
			<Symbol>ASEPX</Symbol>
			<Quantity>1177.619</Quantity>
		</Position>
		<Position>
			…
		</Position>
	</Holdings>
</Account>

作为此场景的一部分,DataStage 将转换后的数据供给到名为 DWADMIN.ACCTPROFILE 的目标表。用于准备 DB2 数据库环境的部分脚本(下面步骤 1 中介绍的)包含的代码显示在清单 3 中。该部分代码创建了这个目标表。

清单 3. 数据仓库表的定义
create table dwadmin.acctprofile (
  id int primary key not null,  
  info xml
)

ACCTPROFILE 表 ID 列的值是从输入文件的第一个字段派生出来的。INFO 列包含一个 XML 文档,表示来自源文件的所有字段(包含帐户 ID 信息)。

步骤 1:准备 DB2 数据库环境

如果阅读本系列的 IBM InfoSphere DataStage 和 DB2 pureXML,第 1 部分:将 XML 运营数据集成到数据仓库 时已经下载并运行了样例 DB2 脚本,可以跳过这一步,继续到 步骤 2。否则,按以下步骤操作:

  1. 下载 部分下载 DSsetup.zip 文件并解压缩该文件。
  2. 打开 DB2 命令窗口。
  3. 发出 清单 4 所示的命令来运行脚本。此脚本创建了此场景使用的 DWADMIN.ACCTPROFILE 表。
清单 4. 在 DB2 命令窗口执行 DB2 安装脚本的命令
 db2 –td@ -vf  DSsetup.db2

注意:该脚本设计支持运行 Windows 的 DB2 9.5 服务器。

步骤 2:创建 DataStage 并行作业并概括其内容

本文场景采用的开发方法与本系列 IBM InfoSphere DataStage 和 DB2 pureXML,第 1 部分:将 XML 运营数据集成到数据仓库 采用的方法相同。首先为各阶段(这一步)用占位符定义 DataStage 并行作业。然后编辑每个阶段以指定适当属性以便成功执行作业。

  1. 启动 DataStage 设计器。
  2. 在 Repository 面板中右键单击 Jobs 文件夹并选择 New > Parallel job
  3. 将 Sequential File 阶段添加到新并行作业作业设计区的左上部分。(从Palette 的 File 部分,选择 Sequential File 图标并将其拖动到作业设计区)。此阶段代表您的输入源文件。
  4. 将 DB2 Connector 阶段添加到并行作业的右上部分。(Palette 的 Database 部分包含 DB2 阶段)。此阶段代表您的目标数据仓库表。
  5. 在设计区左侧的 Sequential File 阶段下面添加 XML Output 阶段。(Palette 的 Real Time 部分包含 XML 阶段)。此 XML Output 阶段将创建 XML 文档分层结构部分,代表帐户的仓位(投资)。
  6. 在设计区右侧的 DB2 Connector 阶段下面添加另一个 XML Output 阶段。此 XML Output 阶段将创建剩余的 XML 文档分层结构部分,这些部分表示帐户组合信息。
  7. 在两个 XML Output 阶段之间添加 Copy 阶段。(Palette 的 Processing 部分包含 Copy 阶段)。此 Copy 阶段会将初始 XML Output 阶段的信息提供给第二个 XML Output 阶段。
  8. 按以下顺序连接各个阶段:
    Sequential File -> XML Output -> Copy -> XML Output -> DB2 Connector
  9. 可以选择重命名这些链接和阶段使逻辑更易理解。
  10. 确认您并行作业的框架与 图 1 类似。
  11. 保存工作。
图 1. DataStage 作业框架
显示了按上述步骤 1 定义的新并行作业框架的 DataStage Designer 屏幕截图。
显示了按上述步骤 1 定义的新并行作业框架的 DataStage Designer 屏幕截图。

(查看图 1 的 大图)。

步骤 3:导入表定义

DB2 设置要运行的脚本(在 步骤 1 中或者按本系列第一篇文章中的步骤操作时),并为 DB2 数据库中的帐户组合信息创建目标表。在这一步中,将关于此表的元数据导入到 DataStage,这样您可以使用此表定制作业。

  1. 从主菜单中,选择 Import > Table Definitions > Start Connector Import Wizard。一个新窗口 “Connector metadata import – Connector selection” 出现了。
  2. 选择 DB2 Connector (Variant 9.1) 并单击 Next
  3. 输入相应的连接细节,包括实例类型 (DB2)、数据库名 (TPOX) 以及有效的用户 ID 和密码。
  4. 单击 Test connection 以验证是否可以连接到 DB2 TPOX 数据库。
  5. 成功连接后,单击 Next,然后单击 OK
  6. 数据源位置保留默认设置。这包括主机名 DB2 和数据库名 TPOX (DB2)。
  7. 单击 Next
  8. Filter 下拉列表中选择 DWADMIN 模式,确认选中了 include tables 选项,并单击 Next
  9. 从该模式的可用表格列表中选择 ACCTPROFILE 表。
  10. 确认选中了用于导入的 DWADMIN.ACCTPROFILE 表,并单击 Import
  11. 会弹出一个窗口提示您为元数据导入选择文件夹。选择 Table Definitions 并单击 OK
  12. 保存工作。

现在可以编辑作业的每个阶段了。

步骤 4:编辑 DB2 目标表

因为刚刚导入了关于目标数据仓库表的 DB2 元数据,可以在这里开始处理 DB2 Connector 阶段。在这一步编辑 DB2 Connector 阶段的属性以引用 DWADMIN.ACCTPROFILE 表。

  1. 双击表示目标表的 DB2 Connector。
  2. Properties 选项卡中,指定 Connection 部分的相应信息。这包括实例类型 (DB2)、数据库名 (TPOX) 以及有效的用户 ID 和密码。
  3. 在面板右上角单击 Test 来确认可以成功连接到数据库。
  4. 向下滚动到 Properties 选项卡的 Usage 部分并指定以下设置(请参见 图 2):
    • Write mode: Insert
    • Generate SQL: Yes
    • Table name: DWADMIN.ACCTPROFILE
    • Array size: 1
    • Table action: Truncate
  5. 可以选择单击 Usage 行右侧 View Data 以便确认可以成功查询该表。(该表将为空,直到完成并成功运行完整的 DataStage 作业)。
  6. 单击 OK 来保存这些设置。
  7. 单击 Columns 选项卡并选择 Load
  8. 选择 DWADMIN.ACCTPROFILE 表并单击 OK
  9. 默认选中表格所有列。(注意 INFO(在 DB2 中创建为 XML 列)出现在这里,属于 SQL 类型的 NVarChar)。
  10. 单击 OK
  11. 指定 INFO 列的适当长度。在本例中,长度为 5000 字节足够了。
  12. 单击 OK
  13. 保存工作。
图 2. 为目标表的 DB2 Connector 修改的设置
屏幕截图显示如何为目标表的 DB2 Connector 设置属性
屏幕截图显示如何为目标表的 DB2 Connector 设置属性

步骤 5:编辑 Sequential File 阶段

需要编辑 Sequential File 阶段以识别以逗号分隔的包含输入数据的文件。

  1. 双击代表 Sequential File 阶段的图标。
  2. 如果 Output 选项卡已经不显示了,单击它。出现一组子选项卡。
  3. 单击 Properties 子选项卡。
  4. 展开 Source folder 并单击 File 属性。指定输入文件,根据需要通过目录结构浏览。(样例输入文件包含在 下载 部分的 zip 文件中,名为 holdingsexport)。
  5. 单击 Columns 子选项卡。
  6. 编辑列信息,如下表和 图 3 所示。这些列将代表您 XML 文档中 <Position> 数据的元素标签。
    Column nameKeySQL typeExtendedLengthScaleNullableDescription
    IDIntegerYes
    HOLDINGTYPEVarCharUnicode30Yes/ns:Position/ns:Type
    SYMBOLVarCharUnicode30Yes/ns:Position/ns:Symbol
    QUANTITYDecimal123Yes/ns:Position/ns:Quantity
    1. 为 HOLDINGTYPE、SYMBOL 和 QUANTITY 的 Description 添加适当的命名空间信息。稍后,将看到 XML Output 和 Copy 阶段如何使用这些信息。有关每列的命名空间数据,请参阅 图 3
    2. 将 HOLDINGTYPE 标识为 Key
  7. 单击 OK
  8. 保存工作。
图 3. Sequential File 输出的列规格
Sequential File 阶段定义中 Output 选项卡的 Columns 子选项卡的屏幕截图。
Sequential File 阶段定义中 Output 选项卡的 Columns 子选项卡的屏幕截图。

步骤 6:编辑初始 XML Output 阶段

初始 XML Output 阶段(该阶段与 Sequential File 阶段相连)必须将文件信息部分转换成 XML 元素。因为目标 XML 文档结构包含带有重复元素的嵌套分层结构,您必须定制此 XML Output 阶段才能聚合每个帐户的信息。在本例中,需要命令 DataStage 收集每个帐户的所有 <Position> 信息。

必须定制初始 XML Output 阶段以便生成 清单 5 中以 粗体 突出显示的 XML 元素。

清单 5. 目标 XML 文档格式,带有要在此阶段构建的节点,这些节点以粗体显示
<Account> 
  <ID>111222</ID>
  <Holdings>
  
      <Position>
            <Type>Stock</Type>
            <Symbol>IBM</Symbol>
            <Quantity>500.12</Quantity>
      </Position>
      <Position> 	
       . . . 
       </Position>
       
   </Holdings>
</Account>

要定制此阶段,按以下步骤操作:

  1. 打开初始 XML Output 阶段,它出现在 Sequential File 阶段旁边。
  2. 单击 Input 选项卡。出现一组子选项卡。
  3. Partitioning 子选项卡中,确认列出了为输入文件指定的四列:ID、HOLDINGTYPE、SYMBOL 和 QUANTITY。另外确认 HOLDINGTYPE 显示为关键列。
  4. Columns 子选项卡中,确认出现了 HOLDINGTYPE、SYMBOL 和 QUANTITY 列相应的 XPath 表达式。(XPath 表达式应该与编辑 Sequential File 阶段时指定的那些表达式相匹配。请参见 图 3)。
  5. 单击 Output 选项卡。一组新的子选项卡出现。
  6. 单击 Document Settings 子选项卡。出现了另外一些子选项卡。
    1. Comment 部分,选择 Generate XML Chunk 复选框并清除 Include 复选框。
    2. 单击 Namespace Declaration 子选项卡。选择 Include 复选框并在输入字段输入相应的命名空间声明。例如:
      xmlns:ns="http://tpox-benchmark.com/custacc"
  7. 单击 Transformation Settings 子选项卡。定位到 Use Trigger Column 按钮并使用其下拉菜单选择 ID 列。这样,DataStage 就会按帐户 ID 分组投资组合信息。
  8. 单击 Options 子选项卡。清除 Generate formatted output 复选框。(不需要在最后的 XML 输出中引入其他空格或格式变化)。
  9. 单击 Columns 子选项卡。
    1. 选择 Load 并导入 DWADMIN.ACCTPROFILE 表定义。
    2. 将 INFO 列的 Length 字段设置为:5000
    3. 修改 INFO 列的 Description 字段以包括以下 XPath 表达式:/ns:Position
    4. 确认您的设置与 图 4 中所示设置类似。
  10. 单击 OK
  11. 保存工作。
图 4. 初始 XML Output 阶段的 Output 列设置
初始 XML Output 阶段定义中 Output 选项卡的 Columns 子选项卡的屏幕截图。
初始 XML Output 阶段定义中 Output 选项卡的 Columns 子选项卡的屏幕截图。

(查看图 4 的 大图)。

步骤 7:编辑最后的 XML Output 阶段

最后的 XML Output 阶段必须生成 XML 文档分层结构的其余部分。第一个 XML Output 阶段收集了每个帐户的所有 <Position> 信息。最后一个 XML 文档需要包括其他信息。有关目标 XML 文档的完整结构,请参阅本文开始处的 清单 2

  1. 打开最后的 XML Output 阶段(设计区右侧,DB2 Connector 阶段之下的阶段)。
  2. 选择 Input 选项卡。出现一组子选项卡。
  3. 单击 Columns 子选项卡。
    1. 选择 Load 并导入 DWADMIN.ACCTPROFILE 表定义。
    2. 将 INFO 列的 Length 字段设置为:5000
    3. 将 INFO 列的 Description 字段设置为:/ns:Account/ns:Holdings
    4. 将 INFO 列的 Data Element 字段设置为:XML
    5. 将 ID 列的 Description 字段设置为:/ns:Account/ns:ID
    6. 确认您的设置与 图 5 中所示设置类似。
  4. 单击 Output 选项卡。出现一组子选项卡。
  5. 单击 Document Settings 子选项卡。出现其他子选项卡。
    1. 取消 Comment 部分的 Include 复选框。
    2. 单击 Namespace Declaration 子选项卡。选择 Include 复选框并在输入字段输入以下命名空间声明:xmlns:ns="http://tpox-benchmark.com/custacc"
  6. 单击 Transformation Settings 子选项卡。定位到 Use Trigger Column 按钮并使用其下拉菜单选择 ID 列。这样,DataStage 就会按帐户 ID 分组投资组合信息。
  7. 单击 Options 子选项卡。取消选择 Generate formatted output 复选框。
  8. 单击 Columns 子选项卡。
    1. 将 INFO 列的 Description 字段设置为以下 XPath 表达式:/ns:Account
    2. 确认您的设置与 图 6 中所示设置类似。
  9. 单击 OK
  10. 保存工作。
图 5. 最后的 XML Output 阶段的 Input 列设置
最后的 XML Output 阶段定义中 Input 选项卡 Columns 子选项卡的屏幕截图。
最后的 XML Output 阶段定义中 Input 选项卡 Columns 子选项卡的屏幕截图。

(查看图 5 的 大图)。

图 6. 最后的 XML Output 阶段的 Output 列设置
最后的 XML Output 阶段定义中 Output 选项卡 Columns 子选项卡的屏幕截图。
最后的 XML Output 阶段定义中 Output 选项卡 Columns 子选项卡的屏幕截图。

(查看图 5 的 大图)。

步骤 8:编辑 Copy 阶段

接下来,修改 Copy 阶段在两个 XML Output 阶段之间传递数据。因为每个 XML Output 阶段都使用不同的 XPath 表达式来定义生成的 XML,您需要 Copy 阶段来确保通过输入和输出链接正确地传递数据。

  1. 打开 Copy 阶段。
  2. 单击 Mapping 子选项卡。选择 Auto-Match,接受默认值,并单击 OK
  3. 可以选择检查输入和输出链接的 Description 列中指定的 XPath 表达式。
    1. 单击 Input 选项卡和 Columns 子选项卡。
    2. 确认 INFO 的 Description 列包含 XPath 表达式:/ns:Position
      (请参见 图 4
    3. 单击 Output 选项卡和 Columns 子选项卡。
    4. 确认 ID 的 Descriptions 列包含 XPath 表达式:/ns:Account/ns:ID
      (请参见 图 5
    5. 确认 INFO 的 Descriptions 列包含 XPath 表达式:/ns:Account/ns:Holdings
      (请参见 图 5
  4. 单击 OK
  5. 保存工作。

步骤 9:编译和测试工作

按照标准 DataStage 步骤编译、验证和运行作业。如果需要,请参考 参考资料 部分到 DataStage 文档的链接。以下是一个简单的总结:

  1. 从工具栏选择 Compile 图标。确保作业编译没有错误。
  2. 从工具栏选择 Run 图标。将 Warnings 设置为 “no limit” 并单击 Run。DataStage 试图执行作业。
  3. 启动 DataStage 和 QualityStage Director 检查日志并审查作业结果。确认作业成功完成。
  4. 可以选择检查 DB2 数据仓库表的内容。使用标准 DB2 工具即可操作或返回到设计器中的 DataStage 作业,打开 DB2 Connector 阶段,单击 View Data

结束语

本系列文章探索了如何使用 IBM InfoSphere DataStage 和 DB2 pureXML 支持在数据仓库中日益增多的 XML 使用。XML 已经发展为很多组织数据交换的首选格式;因此,数据架构师正在评估将 XML 整合到其数据仓库的各种方法。

在本系列的第一篇文章中,您了解了 IBM InfoSphere DataStage 如何提取和转换 DB2 pureXML 管理的 XML 数据。此外,您还探索了 DataStage 如何将这些转换的数据加载到两个表中,一个具有传统 SQL 数据类型,一个同时具有关系和 XML 列。

本文是该系列的第二部分,探索了如何使用 DataStage 从平面文件读取信息、将数据转换成 XML 格式并将此 XML 数据加载到包含带有 DB2 pureXML 列的表的数据仓库中。

致谢

衷心感谢 Stewart Hanna、Susan Malaika 和 Ernie Ostic 对本文的审阅修订。


下载资源


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, XML
ArticleID=439289
ArticleTitle=IBM InfoSphere DataStage 和 DB2 pureXML,第 2 部分: 构建支持 XML 的数据仓库
publish-date=10262009