在一次 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 输出或写入器的转换文件中,第二个到第二个,最后用链从头开始创建作业,通过第一次和第二次转变。
我的问题是:
- 当我尝试链接以上序列时,我在最终文档中丢失了第一次更新的 Excel sheet 的内容;
- 我最后只需要一个文件,其中包含没有依赖项的 Job 或 Transformation(在上述情况下,我将有 1
KJB
job + 2 KTR
转换文件)。
问题是:
- 在开始更新第 2 个 Excel sheet 之前,是否可以将上述示例中的 2 个序列与某些
wait
节点连接起来?
- 如果上述方法不起作用:是否可以将转换嵌入作业而不是从外部文件中引用它们?
- 还有额外的问题:使用什么更好:Excel 输出或 Excel 写入器?
=================
更新:
根据@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 by
和 lookup
非常可靠。
我正在研究来自 Pentaho DI 包的标准样本:GetXMLData - Read parent children rows
。它分别从相同的 XML 输入 parent
行和 children
行读取。我需要做同样的事情并更新同一 MS Excel 文档的两个不同 sheets。
我的理解是,实现它的正常方法是将第一个序列放在一个带有 XML 输出或写入器的转换文件中,第二个到第二个,最后用链从头开始创建作业,通过第一次和第二次转变。
我的问题是:
- 当我尝试链接以上序列时,我在最终文档中丢失了第一次更新的 Excel sheet 的内容;
- 我最后只需要一个文件,其中包含没有依赖项的 Job 或 Transformation(在上述情况下,我将有 1
KJB
job + 2KTR
转换文件)。
问题是:
- 在开始更新第 2 个 Excel sheet 之前,是否可以将上述示例中的 2 个序列与某些
wait
节点连接起来? - 如果上述方法不起作用:是否可以将转换嵌入作业而不是从外部文件中引用它们?
- 还有额外的问题:使用什么更好:Excel 输出或 Excel 写入器?
=================
更新:
根据@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 by
和 lookup
非常可靠。