【问题标题】:Update multiple Excel sheets of one document within one Pentaho Kettle transformation在一个 Pentaho Kettle 转换中更新一个文档的多个 Excel 工作表
【发布时间】:2018-03-16 14:36:07
【问题描述】:

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

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

我的问题是:

  • 当我尝试链接上述序列时,我在最终文档中丢失了第一个更新的 Excel 工作表的内容;
  • 最后我只需要一个包含 Job 或 Transformation 的文件而没有依赖关系(在上述提议的情况下,我将拥有 1 个 KJB 作业 + 2 个 KTR 转换文件)。

问题是:

  • 在开始更新第二张 Excel 表之前,是否可以将上述示例中的 2 个序列与一些 wait 节点连接起来?
  • 如果上述方法不起作用:是否可以将转换嵌入到作业中,而不是从外部文件中引用它们?
  • 还有一个问题:哪个更好用:Excel 输出还是 Excel Writer?

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

更新

根据@AlainD 提议,我尝试将Block 节点放在中间。结果如下:

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

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

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

截图:

有什么建议可以解决我的转换问题吗?

【问题讨论】:

  • 你想达到什么目的?读取一个 XML 并写入两个 Excel 工作表?从 xlsx 上读取多个 Excel 工作表?在一个 xlsx 中写多个 Excel 工作表?请在阅读我的暂定答案之前澄清一下。
  • 嗨@AlainD。是的,我想读取一个 XML 并编写两个 Excel 工作表(第一个工作表中的父项,第二个工作表中的子项)。因为我是这个 Pentaho 工具的新手,所以我错过了上面提到的 Block 节点。如果没有它,我观察到两个Excel Writer 试图同时打开以更新同一个文件,结果创建了两张纸,但一张是空的。另外,我需要将所有转换都放在一个文件中。希望现在变得更清楚。我会在星期一尝试你的建议,让你知道它是否适合我。再次感谢您的帮助。
  • 只是一个评论:您需要将所有转换放在一个文件中并不意味着您不能在两个(或更多)单独的文件中开发它们。

标签: pentaho etl kettle


【解决方案1】:

模式如下:

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

这是一种模式,您可能希望更改流程和/或排序以加快速度。但它不会锁定,也不会占用内存:group bylookup 非常可靠。

【讨论】:

  • 有趣的模式。我已经设法使它工作而没有 MS Excel 的问题。我已将带有后缀 -Answer 的解决方案转换添加到有问题的文件夹中,供所有有兴趣查看它的人使用 here。理解为什么Block 节点不起作用仍然会很有趣,因为当需要为不同级别创建单独的工作表或有不止一种类型的子节点时,在更深的 XML 结构的情况下应用上述模式会很复杂并且所有类型都必须登陆才能拥有表格。
【解决方案2】:

问题 1:是的,您要处理的步骤名为 Block until this (other) step finishesBlocking Step (untill all rows are processed)

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

问题 3:(简答)Excel Writer 将数据(新工作表或新行)附加到现有 Excel 文件,而Excel Output 创建并提供单张 Excel 文件。

【讨论】:

  • 嗨@AlainD。我试图将Block 步骤到位。不幸的是没有成功。我已经更新了我的帖子,解释了为什么它不起作用并将链接放入我的文件。欢迎提出任何建议。
  • Excel 有问题。您需要先关闭文件,然后其他进程才能打开它。在你责怪 Pentaho 之前,你确定你确实关闭了你的终端上的 Excel 吗?如果是,那么我担心您必须关闭转换(关闭所有打开的文件),这意味着要重新打开以处理孩子。
  • 我在运行之间删除 Excel 以使测试干净,并且在转换完成之前不要尝试打开它。没有责备,只是想找到一个适合我周围设置的平滑解决方案。可能是我做了一些必须设计完全不同的事情。仍然在我的游乐场和它的流程中,我发现释放文件资源可能会出现一些问题。您是否尝试过运行我的展示案例并重现问题?我只是好奇它是否发生在我的机器上或其他人可以观察到相同的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多