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

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

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

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

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

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

【问题讨论】:

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

标签: pentaho etl kettle data-integration


【解决方案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) 以查看更多信息。我想我已经回答了你原来的问题。接下来的调试步骤需要由你执行。 :)
猜你喜欢
  • 2015-07-26
  • 2014-01-17
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多