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

Pentaho passing variable from modified java script value to table input

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

这是我的

如果我点击预览输出

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

它不应该是空的,但是 "testing" 第三个字段上的字符串 不要问我为什么把那个变量放在 select 中,它只是为了在我把它放在 "where condition=variable"

之前进行测试

Table Input 支持使 SQL 动态化的两种不同方式:变量替换和从传入流中插入数据。

变量替换

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

因为所有步骤在转换中同时初始化,所以您的 Javascript 步骤没有时间设置值。在 PDI 中,您不能在同一转换中设置和使用变量

从步骤

插入数据

第二种方式是在 Table 输入的 "Insert data from step" 选项中 selecting 一个源步骤。在此模式下,Table 输入从 selected 步骤中获取一行,并在您插入的问号 (?) 处(按顺序)将字段插入到 SQL 中。通常它需要一行,但您可以选择对每一行执行。

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

  1. 在开头放置生成行步骤并将其设置为生成 1 行。
  2. 将其连接到 Javascript 步骤。
  3. 在 Javascript 步骤中,将 return 变量指定为底部网格中的输出字段,它将被添加到流中。
  4. 在 Table 输入中,select Javascript 步骤位于 "Insert data from step"
  5. 在您的 SQL 中插入 ?在变量的位置。如果值是一个字符串,您可能需要在它周围加上单引号:WHERE column = '?'.
  6. 预览转换以查看结果,Table 输入的预览由于依赖性而被禁用。

备注:

  • 步骤1和步骤2可能不需要,我不确定JS步骤是否会自己生成一行。我喜欢明确说明这一点,通常将“生成行”步骤命名为 "Generate 1 row".
  • 如果您有一个现有流或多个要插入的字段,您可以使用 Select 值步骤将字段按照它们需要插入到 SQL 中的顺序排列。

好吧,我自己找到了解决方案 第一步修改java脚本值->设置变量 然后获取变量->table 输入(检查脚本中的替换变量),您只需要放置“?”到你的查询(这个“?”字符串是你的变量,我不知道是否有任何其他方式来调用变量)

提醒一下 javapentaho 上的脚本与真实的 javascript 有点不同