带有参数化表输入的 Pentaho Kettle 映射

Posted

技术标签:

【中文标题】带有参数化表输入的 Pentaho Kettle 映射【英文标题】:Pentaho Kettle Mapping with parameterized Table Input 【发布时间】:2016-02-24 07:19:32 【问题描述】:

我将一个值传递给子转换,子转换采用该值,因为我已使用 java 脚本步骤 Alert 它。

但是我在子转换步骤中有一个表输入步骤,我需要使用父转换值作为 TABLE INPUT 步骤的参数来对其运行查询,但它不工作,作为表输入步骤不了解该领域,我该如何实现这种行为?

我被困在这一点上,不能再进一步了。

剩下的唯一选择是使用 Pentaho JOBS,但是否可以在转换中使用 Mapping

我尝试在子转换中从 javascriptsetVariable 函数,但没有任何效果。

【问题讨论】:

请贴一些代码,或者你尝试过的截图。 我刚才在贴里放了两张图,请看一下,子变换有一个ALERT可以正确捕捉到参数,但是Table输入没有得到。 :( 【参考方案1】:

我希望您的子转换类似于下图中的转换。你确定你正确地传递了参数吗?重要的是:

Mapping input specification 中的参数数量与Table input 步骤中使用的参数数量相同 Replace variables in script 勾选 Insert data from step已满 SQL 查询中使用的参数?

如果您需要向table input 传递更多参数,则上一步中的参数数量(在我的示例中为Mapping input specification)需要尊重参数数量 您在表格输入中使用。然后您在查询中多次使用?。例如。对于 3 个参数,您可以拥有:

WHERE name = ? AND surname = ? AND age = ?

您还需要尊重上一步中的参数顺序

【讨论】:

?没用,但是$variablenamehere有效,但是不返回数据,甚至数据库中存在记录。 您是否在Mapping (execute sub-transformation) 在您的根转换中运行子转换?这一步中inputoutput参数是否设置正确?如果您将子转换的内容粘贴到根转换(意味着您拥有所有根转换),它是否有效?更容易让它全部在根转换中工作,然后如果某些步骤重复,则将其移至子转换。 $param 语法用于插入转换参数。它不适用于从上一步插入数据。顺便说一句,您的屏幕截图中的一个错误说明了它 - SQL 查询中的错误。那是因为 Kettle 没有替换脚本中的变量。 如果您需要将更多参数传递给table inputprevious step 中的参数数量需要尊重您在table input 中使用的参数数量。然后您在查询中多次使用?。例如。对于 3 个参数,您可以拥有:WHERE name = ? AND surname = ? AND age = ?。您还需要尊重来自previous step 的参数的顺序 您可以通过write to log 步骤记录table input 的结果。或者,当您执行转换时,您可以设置Log level = Rowlevel (very detailed) 以查看更多信息。我想我已经回答了你原来的问题。接下来的调试步骤需要由你执行。 :)

以上是关于带有参数化表输入的 Pentaho Kettle 映射的主要内容,如果未能解决你的问题,请参考以下文章

带有 ssl 连接的 Kettle mongoDB 输入

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

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

如何保护带有参数化表名的查询不被注入

Pentaho Kettle - 如何根据结果集生成更新查询?

pentaho dpi-5.3(kettle)中的mongodb源代码在哪里?