在一次 Pentaho Kettle 转换中更新一个文档的多个 Excel 工作表

Update multiple Excel sheets of one document within one Pentaho Kettle transformation

我正在研究来自 Pentaho DI 包的标准样本:GetXMLData - Read parent children rows。它分别从相同的 XML 输入 parent 行和 children 行读取。我需要做同样的事情并更新同一 MS Excel 文档的两个不同 sheets。

我的理解是,实现它的正常方法是将第一个序列放在一个带有 XML 输出或写入器的转换文件中,第二个到第二个,最后用链从头开始创建作业,通过第一次和第二次转变。

我的问题是:

问题是:

=================

更新

根据@AlainD 的提议,我尝试将 Block 节点置于中间。这是一个结果:

看起来 Block 步骤是一个选项,但不知何故它不能按预期使用 Excel Output / Writers 节点(或者我做错了什么)。我观察到的是 Pentaho 尝试在 Excel 文件被上一步正确关闭之前的 Block 步之后执行下一步。这会导致以下情况之一:我得到的 Excel 文件有一个空 sheet 或生成的结果文件格式错误。

我的输入 XML 文件(来自 Pentaho 发行版)和测试游乐场转换是:HERE

注意:播放时不要忘记在运行之间删除生成的 MS Excel 文件。

截图:

有什么修复我的转换的建议吗?

问题 1:是的,您要查看的步骤名为 Block until this (other) step finishes,或 Blocking Step (untill all rows are processed)

问题 2:是的,您可以通过作业将行从一个转换传递到另一个转换。但更明智的做法是先生成父级 sheet,完成后在第二次转换中再次读取它。您还可以在 sub-transformation 中传递行,或使用其他架构策略...

问题 3:(简答)Excel Writer 将数据(新 sheet 或新行)附加到现有 Excel 文件,而 Excel Output 创建和提供一个 sheet Excel 文件。

模式如下:

  • 读取数据:每 children 一行,parent 数据在一列或多列中
  • 对数据进行分组:每个 parent 1 行,忘记 children,保留 parent 数据。根据需要转换并保存。
  • 从原始数据返回,查找每一行 (children) 并获取分组数据流中的 parent。
  • 结果是每行 children 和转换后的所需列 parent。根据需要转换并保存。

这是一种模式,你可能想改变流程,and/or排序以加快速度。但它不会锁定,也不会占用内存:group bylookup 非常可靠。