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

Posted

技术标签:

【中文标题】如何在 Pentaho 数据集成 (Kettle) 中的“用户定义的 Java 类”步骤中获取所有参数【英文标题】:How to Fetch All Parameters in 'User Defined Java Class' Step in Pentaho Data Integration (Kettle) 【发布时间】:2017-07-07 07:47:29 【问题描述】:

场景: 我正在 PDI 中创建一个转换。这种转换有一个步骤“用户定义的 Java 类”,我在其中调用了一个外部库。 此转换具有“参数”,现在,我必须单独获取所有参数以在此步骤中使用它们(传递给我的外部 jar),如下所示:

PgSqlHost = getVariable("PostgresHost"); 
PgSqlPort = getVariable("PgSqlPort"); 
PgSqlLoginUserId = getVariable("PgSqlLoginUserId"); 
PgSqlLoginPassword = getVariable("PgSqlLoginPassword");

在这一步中我必须使用 50-60 个这样的参数。我必须像这样单独获取它们中的每一个并将其传递给外部 java lib。

TransformationParameters tparams= new TransformationParameters();
tparams.PgSqlHost = PgSqlHost;
tparams.PgSqlPort = Integer.parseInt(PgSqlPort);
tparams.PgSqlLoginUserId = PgSqlLoginUserId;
tparams.PgSqlLoginPassword = PgSqlLoginPassword;
Configuration config =  ConfigurationReader.getConfiguration();
config.setParameters(tparams);

这种方法的问题是:

    我必须单独获取所有参数。 添加新参数时,我必须在所有转换中处理修改此步骤

我的问题: 有没有办法像这样获取所有参数:

HashMap<K,V> params = getAllVariables();
Configuration config =  ConfigurationReader.getConfiguration();
config.setParametersMap(tparams);

我尝试了什么:

    我尝试在论坛中搜索 Pentaho Wiki 和此 thread, 但附近没有找到。

    我可以添加一个步骤来将这些参数写入 .properties 文件并 阅读我外部 jar 中的内容。

有人可以提出更好的想法来实现这一目标吗? 谢谢。

【问题讨论】:

【参考方案1】:

在 UserDefinedJavaClass 的进程行中使用这种方法

String[] variables =    super.parent.listVariables();

【讨论】:

哇......我现在得到了所有参数/变量的映射,但这些只是我得到的参数名称。我需要获取所有参数及其值。 如果没有办法获取键值映射,我可以遍历这些键并获取它们的值以将这些条目放入映射中。

以上是关于如何在 Pentaho 数据集成 (Kettle) 中的“用户定义的 Java 类”步骤中获取所有参数的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho Kettle 连接到 Hadoop 集群

将外部 Jar 添加到 Pentaho Kettle

为啥 Pentaho 数据集成无法读取表上的新字段?

如何在 Pentaho Data Integration (Kettle) 中向文件添加行号?

Pentaho Kettle 的架构在哪里?

如何在 Pentaho BI server v6 CE 上部署预定的 Kettle 作业