在 Pentaho 数据集成中获取 JOB_ID 变量

Posted

技术标签:

【中文标题】在 Pentaho 数据集成中获取 JOB_ID 变量【英文标题】:Getting the JOB_ID variable in Pentaho Data Integration 【发布时间】:2014-08-06 14:09:50 【问题描述】:

当您在 Pentaho Data Integration 中记录作业时,其中一个字段是 ID_JOB,描述为“批处理 id - 每次运行作业时增加一个唯一编号。”

我可以得到这个ID吗?我可以在我的日志记录表中看到它,但我想设置一个转换来获取它。我认为可能有一个运行时变量保存正在运行的作业的 ID。

我尝试使用获取变量和获取系统信息转换步骤无济于事。我是 Kettle 的新用户。

【问题讨论】:

【参考方案1】:

在获取系统信息步骤中,您有当前转换和父作业的 batch_ids。在 PDI 5.0 上,它们位于“命令行参数”之前,但每个版本的顺序都会发生变化,因此您可能需要查找它。

【讨论】:

【参考方案2】:

您需要自己创建变量来存放父作业批次 ID。执行此操作的方法是添加另一个转换作为设置变量的作业的第一步,并使其可用于您将从作业中调用的所有其他后续转换和作业步骤。步骤:

1) 正如您可能已经完成的那样,启用作业日志记录 作业设置 -> 设置 -> 检查:通过批次 ID 作业设置 -> 日志 -> 启用日志记录,定义数据库日志表,启用:ID_JOB 字段

2) 添加一个名为“设置变量”的新转换,作为工作开始后的第一步

3) 创建一个可供所有其他转换访问的变量,该变量包含当前作业批次 ID 的值

3a) 添加获取系统信息步骤。为您的字段命名 - “parentJobBatchID”和“父作业批次 ID”的类型

3b) 在获取系统信息步骤之后添加一组变量步骤。从“获取系统信息”步骤到“设置变量”步骤的主要输出为一跳

3c) 在设置变量步骤中设置字段名称:“parentJobBatchID”,设置变量名称 - “myJobBatchID”,变量范围类型“在 Java 虚拟机中有效”,保留默认值为空

就是这样。之后,您可以返回您的工作并添加后续转换和步骤,他们都将能够通过替换 $myJobBatchID 或您选择的任何名称来访问您定义的变量。

重要的是,设置变量步骤是“设置变量”转换中唯一发生的事情,并且您想要访问该变量的任何其他内容都仅添加到作业调用的其他转换中。这是因为 Pentaho 中的转换是多线程的,您不能保证设置变量步骤会在该转换中的其他活动之前发生。但是,父作业按顺序执行,因此您可以放心,一旦在作业的第一次转换中建立了包含父作业批次 ID 的变量,所有其他转换和作业步骤都将能够使用该变量。

您可以在添加其他功能之前测试它是否有效,方法是在设置变量转换后添加“写入日志”步骤,将变量 $myJobBatchID 写入日志以供您查看并确认它是否有效。

【讨论】:

以上是关于在 Pentaho 数据集成中获取 JOB_ID 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pentaho 数据集成 (Kettle) 中的“用户定义的 Java 类”步骤中获取所有参数

Pentaho 数据集成 (DI) 获取 SFTP 服务器目录中的最后一个文件

在 Pentaho 数据集成中将字段从 String 更改为 Int

Pentaho 数据集成 从数据库导入大型数据集

PENTAHO 数据集成中的流查找

Pentaho 数据集成输入/输出位类型错误