Pentaho将变量从修改后的java脚本值传递给表输入

时间:2017-04-27 02:05:12

标签: pentaho pentaho-spoon

我需要从修改过的java脚本值传递变量并将其传递给表输入查询

这是我的 enter image description here

如果我点击预览输出

initator_reference | a | ''   |
1                  | a | null |
2                  | a | null |
3                  | a | null |
4                  | a | null |

它不应该为null,而是在第三个字段上“测试”字符串 并且不要问我为什么我把这个变量放在select中,它只是用于测试之前我把它放在“where condition = variable”

2 个答案:

答案 0 :(得分:3)

表输入支持两种使SQL动态化的方法:变量替换和从传入流中插入数据。

变量替换

这是您目前在表输入中配置的内容:您将$ {variable}放在某处,当步骤初始化时,该值将作为文本粘贴到SQL中。

由于所有步骤在转换中同时初始化,因此您的Javascript步骤没有时间设置该值。在PDI中,您无法在同一转换中设置和使用变量

从步骤

插入数据

第二种方法是在"从步骤"中插入数据中选择源步骤。表输入中的选项。在此模式下,表输入从所选步骤中取一行,并将字段(按顺序)插入到插入的问号(?)的SQL中。通常它需要一行,但您可以选择执行EACH行。

这种方式适用于您的场景:

  1. 在开始时设置Generate Rows步骤并将其设置为生成1行。
  2. 将其连接到Javascript步骤。
  3. 在Javascript步骤中,将返回变量指定为底部网格中的输出字段,它将添加到流中。
  4. 在表格输入中,选择Javascript步骤"从步骤&#34插入数据;
  5. 在您的SQL中,插入?在变量的位置。如果值是字符串,则可能需要单引号:WHERE column ='?'。
  6. 预览转换以查看结果,因为依赖关系而禁用了表格输入预览。
  7. 注意:

    • 可能不需要步骤1和2,我不确定JS步骤是否自己生成一行。我喜欢明确这一点,经常命名Generate Rows步骤"生成1行"。
    • 如果要插入现有流或多个字段,则可以使用“选择值”步骤将字段按照需要插入SQL的顺序排列。

答案 1 :(得分:0)

我自己找到了解决方案 第一步是修改java脚本值 - >设置变量 然后得到变量>表输入(检查脚本中的替换变量),你只需要放置“?”你的查询(这个“?”字符串是你的变量,我不知道是否有其他方法来调用变量) enter image description here

并且作为提醒,pentaho上的javascript与真正的javascript有点不同 enter image description here