datastage使用变量
作为InfoSphere Information Server 8.5发行版的一部分,InfoSphere DataStage增强了称为XML stage的新层次转换功能,该功能提供了本机XML模式支持以及强大的XML转换功能。 这些功能基于独特的最新技术,该技术使您可以解析和组合关系形式以及不同层次结构形式的任何复杂XML结构。
这项新技术与其他已知的XML工具的不同之处在于其直观的逐步用户界面,以及强大的执行能力,可以并行处理任何文件大小(经过20GB测试)并具有有限的内存。 XML阶段具有市场上其他工具所没有的独特功能,例如控制和配置所执行的验证级别(从严格验证到最小验证)的能力,或者能够并行解析单个大文件的能力。 XML阶段不需要任何语言技能,例如XSLT或XQuery,并且即使转换不完整,也可以使您立即调试和测试转换。
这些新功能取代了之前的DataStage XML阶段:XML Input,XML Output和XML Transformer。 尽管使用这些阶段的先前作业将继续运行,但是您应该使用新功能,因为它具有出众的生产力和性能。
XML阶段文档提供了介绍性信息,并附有简单的示例 ,这些示例说明了每个转换步骤的用法。 您应该将文档用作学习该工具以及执行简单的分析和转换的第一信息来源。
本文是一系列文章的第一篇,它将帮助您了解和利用IBM InfoSphere Datastage 8.5中的新功能。 第1部分介绍了8.5版中的新功能,然后演示了一些基本的场景,这些场景用于导入元数据,将XML文档解析为关系数据,以及从关系数据组成XML文档并将其插入DB2 pureXML。
场景一:将XML模式文件导入InfoSphere Information Server
将XML模式文件导入Information Server是创建XML转换的先决条件。 新的XML阶段提供了一个转换映射工具,该工具利用了已处理文档的XML模式以及阶段的输入和输出链接结构。
架构库管理器
Schema Library Manager在InfoSphere DataStage Designer中可以作为新菜单条目使用。 您可以使用模式库管理器来导入和管理XML模式定义。 Information Server存储所有导入的架构定义,并将它们组织到架构库中。 架构库是一组XML架构文件,它们为特定主题的文档结构提供规范。 例如,您可以创建由多个架构文件组成的单一行业标准的架构库。 如果库中包含的所有文件都遵循XML schema 2.0规则,并且所有引用都是可解析的,则该模式库有效。
模式文件可以通过INCLUDE或IMPORT语句相互关联。 通过架构文件的架构位置(包括)或命名空间(导入)完成对其他架构文件的引用。 此类引用必须在单个架构库中解析。 这意味着架构库中包含的文件引用的所有文件也必须包含在库中(传递闭包)。
模式库之间没有共享。 因此,您可以在两个不同的模式库中维护同一标准(文件集)的两个版本。
处理INCLUDE语句
与将名称空间用作架构文件的ID的IMPORT语句不同,INCLUDE语句使用依赖于物理位置的文件位置。 将架构文件导入Information Server时,每个文件的location属性默认为文件名。 但是,文件通常引用的不仅仅是文件名。 例如,模式A可以通过使用相对目录结构来引用模式B。
<xs:include schemaLocation="../common/basic.xsd">
或者,它甚至可以引用URL到网络托管文件。
<include schemaLocation ="http://www.example.com/schemas/address.xsd">
在这种情况下,必须将Schema Library Manager中引用文件的文件位置属性( 如图2所示)修改为INCLUDE语句使用的位置。
后续步骤演示了如何导入两个模式文件,它们之间具有包含依赖性。 架构位置使用URL,因此必须更改文件的location属性以匹配URL。
导入架构的步骤
- 通过从IBM DataStage和QualityStage Designer客户机中选择Import , Schema Library Manager来打开Schema Library Manager。 您还可以从XML阶段Assembly Editor访问Schema Library Manager。
- 创建一个名为Example的模式库,在该库下将导入模式。
- 要创建库,请单击“ 新建库”按钮。
- 在“新合同库”窗口中,在“ 名称”字段中键入“ 示例 ”。
- 单击确定 。
- 如果需要对库进行分类,则可以在创建库时输入类别。
- 单击您刚创建的库。
- 要导入架构,请单击“ 导入新资源”按钮。
- 浏览以找到架构
Company.xsd
,然后单击“ 打开” 。 - 架构已成功导入,但是库行为红色,表明存在错误。 为了查看错误,请点击验证按钮。 图1显示了库中的错误。
图1.导入Company.xsd后Schema Library Manager中的错误
(查看图1的大图。)
- 如错误消息所指示,在架构Company.xsd中找不到
Dept_id
,Dept_Name
和Dept_location
的类型定义。 这是因为定义位于另一个名为Department.xsd的架构中。 该警告表明在库中找不到Department.xsd。
- 将Department.xsd导入相同的库。 以与对Company.xsd相同的方式执行导入。 即使在导入Department.xsd之后,该错误仍然会在库中看到。 这是因为Company.xsd模式中的location属性指向文件的实际物理位置,该位置是http://ibm.com/definitions/Department.xsd,但是在模式库管理器中,location属性默认为架构名称Department.xsd。
- 要解决错误,请更改架构Department.xsd的位置。
- 单击“资源视图”窗口中的Department.xsd模式。
- 在文件位置字段中,将
Department.xsd
替换为http://ibm.com/definitions/Department.xsd
。 - 如图2所示,当您更改文件位置名称时,库行变为绿色,表明该库有效。
图2.更改Department.xsd的文件位置后的模式库管理器
(查看图2的大图。)
处理包含多个文件的架构
架构库管理器可以导入包含许多XSD文件的整个zip文件。 导入zip文件时,模式库管理器将导入zip文件中的所有文件,并将location属性从zip文件的根目录设置为相对目录。 此功能可以节省导入所有文件并更新它们各自位置的繁琐工作。
从样本XML文件进行模式归纳
在某些情况下,您可能获得的XML数据没有定义的架构,或者该架构不再与数据正确匹配。 您可以使用许多可用的XML工具之一来解决此问题,这些工具可以从实例XML数据中引入模式。 还有一些开源库可以从一组文件中引入XML模式。 以下步骤显示了如何使用“ Trang”工具从下载部分中可用的一组XML示例文件中导出模式。
- 下载trang.jar并将其解压缩到所需位置。
- 从命令提示符处运行以下命令:
java -jar trang.jar -I xml <absolute path of xml files> <absolute path of xsd file>
例如,您可以将输入文件library1.xml和library2.xml到C:\ test文件夹。 然后将可安装的trang解压缩到C:\ trang文件夹。 然后将从C:\ trang文件夹运行创建library.xsd的命令。 以下命令显示了如何执行此操作:
java -jar trang.jar -I xml C:\test\library1.xml C:\test\library2.xml library.xsd
当您运行此命令时,library.xsd文件将使用架构结构填充。 现在,您可以使用前面描述的过程将library.xsd上传到Information Server。
方案二:将XML文件解析为平面文件
在这种情况下,您将使用InfoSphere DataStage Designer中面板的“实时”部分上可用的XML阶段。 XML阶段可以是源阶段,这意味着它可以直接读取XML文件并向前传递关系信息。 目标阶段,由多个关系输入流组成XML文件; 或中间阶段,既可以在XML与XML之间转换关系数据的同时读取和写入XML文件。
在这种情况下,您将使用该阶段作为中间阶段,该阶段接受XML文件路径作为输入,解析这些文件中的每一个,并将它们转换为向下发送到输出链接的平面关系记录。 图3显示了DataStage作业的布局。
图3.用于解析XML文件的DataStage作业的布局
要定义转换,您需要创建舞台装配。 组装是一系列步骤,它们对分层数据执行扩充和转换。
组装由多个步骤组成。 在上一个作业中,输入,解析器和输出步骤用于将多个XML文件解析为关系记录。 以下步骤描述了如何创建部件:
- 要打开舞台编辑器 ,请双击XML舞台 。
- 在舞台编辑器窗口中,单击编辑装配按钮以打开装配编辑器 。
- 单击装配轮廓下的输入步骤 。 输入步骤描述了关系结构的元数据。 当将输入链接提供到XML阶段时,该步骤变为活动状态。 可以修改,删除或添加到XML阶段的前一阶段的列,也可以添加新列。 如图4所示,您可以看到
file_names
列,它是在前面的External Source Stage中添加的。图4. XML阶段的输入步骤
(查看图4的大图。)
- 为了将Parser Step添加到Assembly Outline中,单击Palette ,然后双击XML_Parser Step 。
- 要查看解析器步骤,请在装配体大纲中单击XML_Parser步骤 。 解析器步骤用于解析XML文件。 在解析器步骤中,您需要定义XML Source和Document Root 。 XML Source定义从何处读取XML文档,Document Root定义所有读取文档的通用结构。
- 如图5所示,在XML Source窗口中,选择File set选项,然后从下拉列表中选择top / InputLinks / library / file_names 。 当将一组文件路径提供给XML阶段时,将使用“文件集”选项。
图5. XML Parser步骤中的XML源配置
(查看图5的放大图。)
- 如图6所示,在Document Root窗口中,单击Browse ,然后从Schema Library Manager中选择根元素库 。 在解析器步骤的文档根目录中选择schema library.xsd之前,应将其导入Schema Library Manager。 XML文档应符合在Parser Step的Document Root窗口中选择的架构。
图6.在XML Parser步骤中配置文档根
(查看图6的大图。)
在先前的架构中,有两个列表,称为authors和books 。 使用输出步骤,可以将这两个列表映射到两个不同的链接。
- 如图5所示,在XML Source窗口中,选择File set选项,然后从下拉列表中选择top / InputLinks / library / file_names 。 当将一组文件路径提供给XML阶段时,将使用“文件集”选项。
- 通过“输出步骤”,您可以将层次结构数据结构映射到关系数据结构。 由于作业具有来自XML阶段的两个输出链接,因此在“输出步骤”的“ 映射”窗口中可以看到两个列表。 在“输出”顺序文件中定义的列在“ 映射”窗口的相应列表下可见。
- 单击“ 作者”目标列表的“ 来源”列。
- 从建议列表下拉列表中,选择XML_Parser:result / nso:library / authors ,然后单击自动映射 。 请注意,所有源列都映射到相应的目标列。
- 单击“ 书籍”目标列表的“ 来源”列。
- 从建议列表中,选择XML_Parser:result / nso:library / authors / books ,然后单击自动映射 。 请注意,所有源列都映射到各自的目标列。
- 从书单中,您需要手动更正对author_id字段自动完成的映射。 自动映射选择了错误的项目,因为它试图映射同一层次结构中的第一个项目。 您想要通过使用建议列表中的“ 更多”选项从父列表中获取一项作为外键。 然后将author_id字段映射到
/library/author/@id
。 - 完整的映射如图7所示。
图7. Output步骤的Mappings窗口
(查看图7的大图。)
- 组装完成后,在任何步骤中都看不到错误,您可以在运行DataStage作业之前测试组装。 您可以使用一小部分测试数据来检查组装的逻辑是否正确。 测试数据应放置在需要外部输入的所有步骤中。 在当前作业中,您必须同时具有输入步骤和XML_Parser步骤的输入。
- 在输入步骤中,您需要为file_names列指定一个值。 在原始作业中,此列将保存XML文件的绝对路径。 对于测试程序集,文件的位置不必指向确切的XML文件位置。 因此,在“输入步骤”中,单击“ 测试数据”选项卡,然后输入C:\ test作为“ 输入测试数据”值。
- 在XML_Parser步骤中,单击Test Data选项卡,然后将其中一个XML文件的内容粘贴到Input Test Data窗口中。
- 然后,您可以通过在程序集编辑器中单击“ 测试程序集”按钮来运行“测试程序集”。
- 在“ 测试”窗口中,单击“ 运行测试”按钮。 使用测试数据运行装配后,您将看到消息“
Test completed
。 - 为了检查每个步骤的输出,您可以单击相应步骤的“ 测试数据”选项卡。
- 组件的最终输出可以在“输出步骤”中查看,如图8所示。
图8.运行测试程序集后的输出
(查看图8的大图。)
- 单击确定以保存并关闭装配体编辑器。
- 单击确定以保存并关闭舞台编辑器。
场景三:在DB2 pureXML中编写和存储XML文档
在这种情况下,您可以使用XML阶段将关系数据组合到层次结构文档中,执行层次结构转换以过滤相关数据,然后将信息重组为所需的架构。 在XML阶段之后,您将使用DB2连接器将文档插入XML列。
该作业旨在将来自两个顺序文件的数据合并为一个XML文件,然后将XML文件写入数据库的列中。 顺序文件包含不同作者及其所写书籍的信息。 Author_file阶段包含作者信息,包括first-name
, last-name
, DateOfbirth
和author_id
。 Book_file阶段包含每本书的信息,包括title
, lang
, book_id
和author_id
。 author_id
列将书籍与各自的作者相关联。 您可以在图9中看到DataStage作业的布局。
图9.用于组成XML文件的DataStage作业的布局
- 使用Join Stage组合来自顺序文件Author_file和Book_file的数据。
- 双击打开Join Stage 。
- 单击“ 舞台属性”选项卡,然后从“ 连接键”下拉菜单中选择author_id 。
- 单击“ 输出”选项卡,然后将左窗格中的所有列映射到右窗格中的输出链接。
- XML阶段将使用Input,Regroup,Composer和Output步骤来创建XML文件,然后将其写入数据库。
- 双击XML舞台以打开舞台编辑器 。
- 在舞台编辑器窗口中,单击编辑装配按钮以打开装配编辑器 。
- 为了将步骤添加到Assembly Outline,单击Palette 。
- 双击Regroup Step和XML_Composer Step ,将它们添加到Assembly Outline中,如图10所示。
图10.装配图
- 在Assembly Outline下 ,单击Input Step以显示作为Join Stage输出的列,如图11所示。
图11. XML阶段的输入步骤
(查看图11的大图。)
- 在“ 装配体轮廓”下 ,单击“ 重新组合步骤” 。 重新组合步骤通过消除重复并在关系联接创建的平面列表之外创建嵌套列表来补充关系联接。 嵌套列表基于一组键形成父子关系。
- “ 要重新组合的列表”字段定义了需要重新组合其项目的列表。 从下拉列表中选择输入链接,以在“输入项 ”下的所有字段填充“ 子项”列。
- 为了创建层次结构,将父字段拖到“ 父项”列。 然后将first_name , last_name , DateOfbirth和author_id拖动到Parent Items列,如图12所示。
图12.配置重组步骤
(查看图12的大图。)
- 如图13所示,在Regroup Step的Keys窗口中,从下拉列表中选择author_id 。
图13.在重组步骤中配置KEYS窗口
(查看图13的大图。)
- 如图14所示,单击Regroup Step的Output选项卡以显示输出模式结构。
图14.重新组合步骤的“输出”选项卡
- Regroup:result列表包含父级和子级列表项,可以将其重命名以使其更易于理解。 要重命名它们,请单击“ 输出”选项卡,然后右键单击“ 重新分组:结果”列表。
- 选择重命名选项。
- 将名称更改为author 。
- 同样,将DSLink7的名称更改为books 。 图15显示了重组步骤的重命名输出模式结构。
图15.重命名链接后,Regroup步骤的Output选项卡
- 在装配体大纲中 ,单击XML_Composer步骤 。 在XML_Composer步骤中,您需要定义XML Target和Document Root 。 定义文档根目录后,还需要完成“ 映射”屏幕。
- 在XML Target窗口中,选择Pass as String 。 这会将XML文件作为单个字符串传递到下游步骤或阶段以进行进一步处理。
- 在“ 文档根目录”窗口中,单击“ 浏览”按钮,然后从“模式库管理器”中选择库根元素。
- 在Composer步骤的文档根目录中选择schema
library.xsd
应将其导入Schema Library Manager。 Composer步骤的输出XML文件将符合此架构。 - 在“ 映射”窗口中,源项目映射到目标项目。 选择作者目标列表的“ 来源”列。
- 从建议列表中选择top / Regroup:author ,然后单击自动映射 。
- 请注意,名字,姓氏,书籍和标题目标项目已映射到相应的源项目。 为了映射目标项目DateOfBirth ,请从“建议”列表中单击“ 更多” ,然后从“ 更多”窗口中选择Regroup:author / DateOfBirth 。
- 单击确定 。
- 同样,将目标项目lang和ID映射到相应的源项目。 完整的映射如图16所示。
图16. XML_Composer步骤中的映射窗口
(查看图16的大图。)
请注意,在上面的映射中,一些映射带有警告标记。 这些警告的原因是类型转换将在运行时执行。 该警告表示如果数据不符合目标类型,则类型转换可能会失败。
作曲家步骤的输出丰富了一个名为result-string的新项目,其中包含整个XML文档。 在输出步骤中,您将其映射到一列中并将其传递给DB2连接器。
- 要查看输出步骤,请从装配体大纲中单击输出步骤 。 它显示结果列,该列已在DB2 Connector Stage中定义。 在“ 映射”窗口中,将顶部 映射到输出列表,然后单击“ 自动映射” 。 您将顶部映射到文档集合是因为您要创建一个包含所有作者和书籍的文档。 如果要为每个作者创建一个文件,则可以将作者列表映射到文档集合。
- 如图17所示,在Output Step中 , Composer Step的输出被映射到output列。
图17. Output步骤中的Mappings窗口
(查看图17的大图。)
- 单击确定以保存并关闭装配体编辑器。
- 单击确定以保存并关闭舞台编辑器。
在运行作业之前,请执行清单1中的步骤以在DB2数据库中创建数据库和表。
清单1.创建数据库的DDL
CREATE db Test; CONNECT to Test; CREATE SCHEMA XML_data; CREATE TABLE XML_data.PureXML(result XML);
结论
您已经了解了如何使用IBM InfoSphere DataStage 8.5中的XML阶段将XML模式导入到Schema Library Manager中,解析XML文件,编写XML文档,以及将它们写入DB2 pureXML。
您可以在有关DataStage和DB2 pureXML集成的先前文章中找到有关DB2 XML集成的更多信息。 尽管DB2连接器阶段在DataStage 8.5中保持不变,但XML阶段已被弃用,并由新的XML阶段代替。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1103datastages/index.html
datastage使用变量