组装macbook_了解组装

组装macbook

InfoSphere DataStage的新XML功能提供了具有最新设计环境的强大层次结构转换。 在本系列的第1部分中,我们探索了一些简单的方案,这些方案是导入模式,解析XML文件或组成XML文件的。

本文重点讨论程序集概念,以允许创建更复杂的转换和处理复杂的XML模式。 在描述了概念之后,我们描述了程序集的一些更强大的功能,这些功能通常被忽略,并通过示例说明了这些功能的用法。

XML阶段文档提供了介绍性信息,并附带了简单的示例,这些示例说明了每个转换步骤的用法。 该文档是有关学习该工具以及执行简单的分析和转换的第一信息来源。 为了使本文更好,我们假定您熟悉XML阶段的基本概念以及对XML模式的理解。

简单的解析和组合方案通常是直观的,通常不需要深入了解程序集概念或XML模式。

组装

程序集分层数据模型

组装数据模型用于描述流过组装步骤的分层数据。 组装数据模型是XML模式模型的简化。 原语数据类型与XML模式定义的原语类型相同( 有关 XML模式规范的更多信息,请参阅参考资料)。 但是,当描述复杂数据时,尽管简化了一些XML模式的概念,但是它仍然具有保留XML模式中所有信息的能力。

一些主要的简化或区别:

  • 单一项目概念 —装配数据模型中的项目描述了与原始类型相对应的单个原始值。 基本类型的元素和属性都由一个项目以及DataStage链接的列表示。
  • 单列表概念 —装配数据模型中的列表描述了数据中的新维度。 该列表可以对应于DataStage链接或重复的XML元素(即maxOccur > 1的元素)或XML模式中的xs:List 。 程序集列表不代表实际值; 但是,重复的XML元素可以具有原始类型。 因此,在程序集中,此元素对应于两个节点:一个列表,用于保存名称与元素名称相同的实例数;一个在列表内的名为text()的子项。
  • 单一组概念 — 组是层次结构中的一个节点,其唯一目的是创建一个对信息进行分类或封装的结构。 它没有描述维或值。 组可以对应于具有maxOccurs="1"且内容类型为序列或选择的复杂元素。 顺序和选择都由一个小组捕​​获。 通过将组子项的可选性设置为true并添加一个称为“选择项”的特殊特殊子项,可以捕获选择概念,该概念仅允许一个子项出现在任何给定的实例中。 选择鉴别符值将是在该选择实例中使用的子组的名称。
  • 元素派生 —表示为包含。 组装数据模型通过创建包含在数据实例中的包含关系来捕获派生。 例如,如果子元素的元素继承自父元素,则子元素的架构树将包括基于其类型的父元素组。 该组捕获可以包含在子实例中的所有父信息。

导入XML模式后,会将其转换为此简化模型。 转换步骤将使用上述简化的概念。 例如,在汇总步骤中,汇总类型为double的属性与汇总类型为double的元素相同。 XML解析器和编写器步骤是对原始XML模式概念敏感的唯一步骤。 由于能够在XML模式中保留信息,因此这些步骤能够重新创建XML模式概念,并根据需要遵循这些概念。

装配计算模型

组装计算模型与DataStage作业计算模型有很大不同。 差异是由于支持的数据模型不同。 尽管DataStage作业设计非常适合关系数据,但程序集非常适合层次数据。 装配中的每个步骤都将整个层次结构输入传递到输出,另外一个额外的扩充分支被添加到包含步骤计算结果的输出。 在DataStage中,每个链接都包含一个关系,因此,如果一个阶段对一个以上的关系执行转换,则需要将两个输入链接附加到该阶段,并且输出行为类似。

但是,在装配体中,单个输入可以包含多个列表,因此所有步骤都具有单个输入和输出,其中可能包含多个列表。 类似于DataStage阶段,组装步骤始终会迭代输入列表。 与DataStage阶段不同,组装步骤可以迭代可驻留在分层输入的任何级别的列表,并生成包含在它们迭代的输入列表中的输出。

扩充分支始终包含在当前步骤正在迭代的顶层列表中。 程序集编辑器为每个步骤提供其输入和输出树,并突出显示当前步骤已计算的浓缩分支,因此可以将其与步骤的原始输入区分开。 这种强大的数据模型将转换描述简化为一系列步骤,而不是直接图。

程序集的输入和输出步骤具有杰出的作用:它们分别将关系数据转换为层次结构数据,并将层次结构数据转换回关系数据。 每个描述关系的链接都会变成层次结构数据中的列表 。 每列变成列表的一项 。 整个输入树都植根于名为top的列表中。 输入顶部列表的单个项目包含与输入链接相对应的所有列表。 在普通的批处理执行中,仅存在一个顶层项目,并且它包含流入程序集的所有数据。 但是,当使用DataStage wave(例如实时作业)时,每个请求或wave都会产生一个新的顶层项目。

在程序集中的列表中显示wave,可以在启用wave的作业和普通批处理作业之间共享同一程序集。 例如,对于作曲者步骤,映射到文档收集列表的列表确定创建的XML文件的数量。 因此,如果将顶层列表映射到文档收集列表,则会为每个顶层列表项创建一个文件。 在普通的批处理作业中,编辑器步骤在此设置中仅创建一个文件。 但是,在启用wave的作业中,编辑器步骤会为每个wave创建一个文件。

映射表

映射表是一种常见的构造,允许您将一个层次结构映射到另一个层次结构。 它由几个步骤使用:XML编写器,联合和输出。 与其他并行映射工具不同,映射表不提供任何层次结构到另一个的完整映射功能。 映射表用作使输入适应输出结构的最后一步。 映射表不允许您更改输入结构中列表的维度以匹配输出结构。 您无法执行联接,联合或任何其他设置操作并映射到目标列表。 如果需要这种设置操作,则必须在具有映射表的步骤之前的转换步骤中执行。 例如,如果编写器步骤需要编写一个列表,该列表是其他两个列表的联接,则用户首先需要在编写器步骤之前添加联接步骤,然后执行映射。 这导致用户将复杂的转换分解为一系列简单的转换步骤,这些步骤以对映射表中的数据进行简单调整而结束。

映射表允许用户执行标量映射,即执行未设置语义且不更改结构尺寸的重组。 映射表还允许用户将源类型转换为目标类型,或定义将常量值设置为目标模式中项目的常量映射 。

映射表遵循一组简单易懂的原则:

  • 目标映射 -用户正在将目标映射到源,反之亦然。 源可以是目标的超集。
  • 上下映射 -映射从目标的根开始,然后向下。 如果其祖先未映射或存在映射错误,则无法映射该节点。
  • 列表到列表,项目到项目 —如果源类型可以转换为目标类型,则列表只能映射到另一个列表,并且一个项目只能映射到另一个项目。
  • 组未映射 -组仅在创建结构。 由于已经定义了目标结构,因此不需要映射组。
  • 明确的映射 -映射目标项目不得在确定值时造成歧义。 换句话说,给定源列表,源项目的路径必须提供唯一值。 不允许到不是直接祖先的另一个源列表项的路径,因为可能有多个与该路径匹配的值,而当遵循包含关系时,到祖先列表的路径将始终提供单个值。
图1. XML编写器步骤中的映射表
屏幕截图显示了XML Composer步骤中的映射表

程序集编辑器强制执行这些规则。 如果程序集编辑器不允许您将源节点映射到特定目标,那是因为它不遵守上述规则。 要调查原因,可以在映射建议中使用“ 更多”选项,然后在树中选择源节点。 将显示一条错误消息,描述无法映射节点的原因。

部分解析和验证

在某些情况下,您只对XML文档的某个部分感兴趣,或者可能是您希望不分析该部分并将其作为字符串传递给下游。 XML解析器步骤允许您配置解析,并决定使用Chunk操作保留文档的哪些部分不解析。

这意味着,如果文档中有一部分可能导致验证问题,则通过分块文档的该部分,我们确保将其视为单个数据字符串,并绕过所有验证检查。

在我们的示例场景中,用户希望将员工特定信息从XML文件写入平面文件。 XML文件包含有关公司部门和该部门员工的信息。 总是希望部门信息符合该架构,但是员工信息可能并不完全符合该架构(例如,所有员工可能没有中间名(这是必填字段),或者出生日期可能没有符合XML日期格式)。 因此,员工的XML数据需要经过最少的验证,而部门信息则需要经过严格验证。

为此,可以对员工列表进行分块。 选项在解析器步骤的文档根窗口中可用。 要对员工列表进行分块,请右键单击列表,然后选择Chunk

图2.解析器步骤的文档根窗口中的Chunk选项
屏幕截图显示了解析器步骤的“文档根”窗口中的“块”选项

请注意,执行“ Chunk操作时,输出树包含类型为XML的项目。 该节点包含未解析的XML块。

图3. XML解析器步骤的输出选项卡
屏幕快照显示了Chunk操作之后XML解析器步骤的输出选项卡

现在,确保在XML解析器步骤的“ 验证”窗口中,已选择“ 严格验证” ,如下所示。

图4. XML解析器步骤的验证窗口
屏幕截图显示了XML解析器步骤的Validation窗口

第二个解析器的源文档将是第一个解析器的分块元素,现在我们可以采用较弱的验证规则,该规则仅适用于分块元素:员工:

  1. 在XML_Parser1步骤的XML Source窗口中,选择String set选项,然后从下拉列表中选择分块的项目,如下所示。
图5.第二个解析器步骤的XML源窗口
屏幕截图显示了第二个解析器步骤的XML源窗口
  1. 一旦定义了XML源,该架构就会自动填充到文档根窗口中。 因为程序集编辑器了解作为信息源的员工项目的类型,所以将自动填充该架构。
图6.第二个解析器步骤的文档根窗口
第二个解析器步骤的“文档根目录”窗口
  1. 由于需要对文档的employee部分应用较弱的验证,因此请确保在XML_Parser1 Step的Validation窗口中选择Minimal Validation

第二个解析器的输出需要在输出步骤中映射到输出链接以完成方案。

请注意,可以通过操纵模式并使用<xs:any>元素(而不是使用Chunk操作)来实现相同的功能。 在解析器步骤中使用带有<xs:any>的架构时,不解析与<xs:any>对应的所有元素,并将其存储为单个XML字符串。 与上述情况的不同之处在于,为了在后续的解析器步骤中解析此内容,用户将需要从库中选择与<xs:any>内容匹配的新文档根类型。

分组到列表和分组到列表投影

这两个投影以及每个投影(例如DropRename)在每个步骤的Output选项卡上都可用。 “ 要列出组”投影只能应用于一个组节点(请参见数据模型部分中的定义),它将组变成一个大小为1的列表。 “ 列表到组”投影只能用于列表,并且通过仅保留列表的第一项将列表变成一个组。

以下两种情况说明了何时使用这些预测以及它们为什么很重要。

列出群组

有一个XML文件,其中包含公司员工的信息。 每个员工都有两个地址:办公室地址和家庭住址。 在这种情况下,XML阶段仅从输入XML文件中过滤出家庭住址,然后将整个员工信息映射到单个输出顺序文件。 “ 列表到组”投影有助于在输出步骤中将整个员工信息映射到单个列表。

在这项工作中,程序集包括XML解析器,切换和输出步骤。

  1. XML_Parser步骤配置 :在“ 文档根”窗口中,必须从模式库管理器中选择根元素信息。 在XML分析器步骤的文档根目录中选择模式EMP.xsd之前,应将其导入模式库管理器。

模式中的地址列表包含员工的家庭和办公室地址。 项目“ address_type”分别代表办公室和家庭住址的“ O”和“ H”。 要仅过滤出家庭地址,请使用switch步骤,其中仅过滤出具有address_type =“ H”的项目。

  1. 切换步骤配置
    1. 要分类列表”选项定义了需要过滤的列表。 在这种情况下,必须在地址列表上进行过滤。 因此,必须选择信息/员工/地址作为要分类的列表。
    2. 范围/目标列表应为信息/员工。
    3. 要指定过滤条件,需要定义一个目标。 要添加目标,请单击添加目标,然后将新目标名称键入Home_address
    4. 现在创建过滤表达式,如下所示:
      • 过滤字段=从下拉列表中选择信息/员工/地址/地址类型。
      • 功能=选择比较。
      • 选择常量复选框,然后在文本框中输入值“ H”。
图7.切换步骤中的配置窗口
屏幕截图显示了交换机步骤中的配置窗口

在输出步骤中,员工信息需要映射到输出顺序文件。 输出顺序文件具有列first_name,middle_name,last_name,emp_id,城市,州,国家/地区,邮政编码和address_type列。 将员工列表映射到输出列表后,只有first_name,middle_name,last_name和emp_id项可以映射到顺序文件中的列,因为这些字段位于员工列表内。

属于地址信息的其他列无法映射,因为它们在另一个列表下。 程序集编辑器不允许您创建可能造成歧义的映射。 Home_address列表可能包含多个地址。 程序集将不知道使用哪个地址值,因此它禁止该映射。

为了能够映射过滤的地址信息,Home_address下的项目必须直接在employees列表下。 这可以通过将Home_address转换为组来实现。 将列表转换为组时,仅保留列表的第一项。 但是,我们知道Home_address列表只有一个地址,因为原始地址列表只包含一个带有“ H”的地址。 因此,将其转换为组时不会丢失任何信息。

从列表到组的转换只能在步骤的“ 输出”选项卡中完成。 因此,在此工作中,需要在切换步骤的“ 输出”选项卡中完成投影。 这将是切换步骤的最后配置。

  1. 右键单击Switch:filtered节点下的Home_address列表,然后选择List To Group
图8.切换步骤的Output选项卡中的List To Group选项
屏幕显示切换步骤“输出”选项卡中的“列出组”选项

列表Home_address转换为一个组,如上图所示。 最后,现在可以完全映射输出步骤,如下面的映射表所示。

图9.输出步骤中的映射表
该图显示了输出步骤中的映射表

分组列表

在这种情况下,XML数据需要从解析器中的一个架构结构映射到编辑器中的另一种架构结构。 解析器步骤中的模式具有员工信息,其中每个员工都有一个地址。 编写器步骤中的模式具有员工信息,其中每个员工可以具有多个地址。 “ 分组到列表”投影可帮助用户将解析器中的架构映射到编写器步骤中的架构。

  1. 在XML解析器步骤的文档根窗口中,必须从模式库管理器中选择根元素Information 。 在XML解析器步骤的文档根目录中选择架构employee.xsd之前,应先将其导入架构库管理器。
图10. XML解析器步骤中的文档根窗口
该图显示了XML_Parser步骤中的Document Root窗口
  1. 在XML编写器步骤的文档根窗口中,必须从模式库管理器中选择根元素Employee 。 在从XML编写器步骤的文档根目录中选择模式employee1.xsd之前,应将其导入到模式库管理器中。
图11. XML编写器步骤中的文档根窗口
该图显示了XML编写器步骤中的文档根窗口

如上面的屏幕截图所示,在XML解析器和XML编写器步骤中,架构的结构不同。 在XML解析器步骤中,项目地址是一个组,但是在XML编写器步骤中,项目地址是一个列表。 为了能够将解析器中的架构结构映射到编写器,必须将“ 要列出组”投影应用于XML解析器步骤的“ 输出”选项卡中的项目地址。

右键单击节点XML_Parser:result下的地址列表,然后选择组列表

图12. XML解析器步骤的Output选项卡中的Group To List选项
该图显示了XML解析器步骤的Output选项卡中的Group To List选项。

然后将项目地址转换为列表,并且可以在XML编写器步骤中完成映射,如下所示。

图13. XML编写器步骤中的映射表
屏幕截图显示了XML编写器步骤中的映射表

在解析中合并XSLT样式表

程序集编辑器不需要用户创建XSLT样式表,从而提供了一种更直观的方式来描述转换。 但是,在某些情况下,用户希望首先对数据使用XSLT样式表,然后对其进行解析并将其映射到程序集中。 通常不建议在大型文档中使用此方法,因为当前的XSLT技术要求将文档放入内存中,这将消除可解析任何文档大小的程序集的优势。

但是,程序集可以首先执行XSLT转换,并且它将读取XSLT的结果,就好像它是原始文件的内容一样。 文档根元素应反映XSLT的结果,而不是原始文档。

XSLT样式表必须在解析器步骤中粘贴到XML源窗口的“ 启用过滤”部分中。 要启用“ 启用过滤”选项,首先需要定义XML源,并需要选中“ 启用过滤”旁边的复选框。 默认的XSLT样式表将在“ 启用过滤”选项下方的区域中显示。

图14. XML解析器步骤的“启用过滤”窗口中的默认XSLT
该图显示了XML解析器步骤的“启用过滤”窗口中的默认XSLT。

然后,用户可以用其各自的样式表替换默认样式表。

图15. XML解析器步骤的“启用过滤”窗口中的XSLT
屏幕截图显示了XML解析器步骤的“启用过滤”窗口中的XSLT。

注意, 根被选择为在XML分析器文档根窗口的根元素,因为这是将通过在上面的截图使用XSLT样式表返回的根元素。

图16. XML解析器步骤的文档根窗口
该图显示了XML解析器步骤的文档根窗口

重要的是要注意,程序集只能使用返回格式正确的XML文档的XSLT样式表。

性能调优

组合来自大型数据集的XML文档

在大多数情况下,可以以流方式将XML文档解析为关系数据,而无需占用大量内存,并且无论文档有多大。 但是,在编写XML文档时,通常需要将大型数据集进行合并和重组以匹配所需的文档结构,这是常见的。 在XML阶段,有多种方法可以在DataStage中执行此转换。 这两种方法在XML阶段文档中分别作为示例2和示例3在“ 转换XML数据示例”下进行了描述。 在示例2中,联接是在DataStage中完成的,它是一个关系联接,它产生带有重复项的平面列表。 因此,在程序集中,重新组合步骤用于消除这些重复并创建所需的嵌套列表结构。 在示例3中,联接是在装配体内以分层方式完成的,并立即创建所需的嵌套列表。

如果数据集很大,建议在DataStage中而不是在程序集中执行联接。 DataStage联接可以并行执行,并且比Assembly Editor中的分层联接更有效。 此外,如果从连接中出来的数据是由连接键聚集的(如果所有具有相同键值的记录彼此相邻),则可以进一步优化作业以使用更少的内存。 在这种情况下,应在“程序集编辑器”中的重新组合步骤上,检查“重新组合的输入记录”是否按键进行了聚类-优化执行 。 通过允许它以流方式执行重组而不必存储整个列表,这将提高XML阶段的性能。

通过内存处理提高吞吐量

如果需要编译到单个文档中的关系数据足够小以包含在内存中,则可以通过允许它使用更多的内存并配置连接步骤以执行内存中操作来增强XML阶段的性能。 。

  1. 配置XML Stage以使用–Xmx768M在XML Stage Editor中,为Optional Arguments字段添加了值–Xmx768M
图17.舞台编辑器窗口
该图显示了为“可选参数”字段设置的舞台编辑器窗口Xmx768M
  1. 配置H-Join以使用内存中算法—在H-Join步骤中,在定义父级和子级列表之后,有一个选项可以选择应使用的算法。 通过使用“ 内存中”选项,可以提高XML阶段的性能。
图18. H-Join步骤中的优化类型
该图显示了H-Join步骤中的优化类型

并行执行多个文档

当处理许多文档时,DataStage并行性和分区可以帮助提高吞吐量。 如果需要分析许多文档,则在程序集的解析器步骤中使用String-SetFile-Set选项,并在XML阶段之前的阶段中对文档进行分区将是有益的。 类似地,如果需要组成许多文档,则仍然可以对数据进行分区,如果分区键可以拆分数据,以便一个分区包含单个文档所需的所有信息。

请注意,在两种情况下,程序集都不知道分区,或者换句话说:对于并行执行,它不需要进行其他配置。

并行执行单个大型文档

XML阶段具有独特的功能,可以并行处理大型XML文件。 当您需要解析超过1 GB的XML文件时,此功能非常有用。 您只有少量文件和大量处理器。 如果您有许多文档,并且您的目标是在最短的时间内完成所有解析,则应使用如上所述的常规DataStage分区,这可能会使所有处理器忙于处理不同的文档。 但是,如果您的文档集很少,并且目标是在尽可能短的时间内完成每个文档,则可以在Assembly Editor解析器步骤中启用并行解析功能。

信息中心的 “大规模并行解析”中介绍了这种解析方法。 该方法在文件的不同部分上运行相同的程序集,结果将被收集并向下游发送到下一个阶段。

结论

在本文中,我们解释了DataStage组装概念,提供了有关某些功能的详细信息,并提供了可在许多情况下提供帮助的性能建议。 对于许多简单情况,实际上并不需要深入了解这些概念。 但是,当您处理复杂的架构和大量的数据时,建议您对本文中描述的概念有一个很好的了解。


翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1103datastages2/index.html

组装macbook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值