2017-04-27 59 views
0

我需要从修改Java脚本值传递变量,并传递给表输入查询Pentaho的传递变量从修改Java脚本值表输入

这是我 enter image description here

如果我点击预览输出

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

它不应该是零,但对第三场 “测试”字符串,不要问我为什么我把在选择变量,它只是为了测试我把之前in“where condition = variable”

回答

1

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

变量替换

这是你目前已在表输入配置:你把$ {}变量的地方,并在步骤初始化,该值作为文本进行粘贴到SQL。

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

插入数据的第二种方法是用于通过选择在表输入“插入数据从步骤”选项的源极步骤。在这种模式下,表格输入从选定的步骤中取一行,并将字段(按顺序)插入插入问号(?)的SQL中。通常它需要一行,但您可以选择执行每行。

这种方式应该为您的方案工作:

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

注:

  • 步骤1和可能不需要如图2所示,我不知道,如果JS步骤由自身产生的行。我喜欢明确这一点,通常将生成行命名为“生成1行”。
  • 如果你有一个现有的流或多个字段中插入,您可以使用选择值步骤把字段需要将它们插入SQL命令。
+0

已经有点不同做你的一步,但其对表输入 错误,请参阅图(第二张图片) –

+0

@AlexanderChandra我的回答部分:在你的第二张照片,我看到周围的没有引号?在你的表格中输入。您可能会收到错误“未知列......”。尝试单引号。 – Cyrus

0

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

和提醒的JavaScript上的Pentaho是真正的JavaScript enter image description here

+0

也许他们已经改变了一些在以后的版本中,BU从我的经验来看,这不应该工作。据我所知,如果没有输入,JS步骤根本就不应该被处理。并且获取变量步骤应该与JS和Set Variables步骤并行处理。你确定,这个价值是JS步骤中设定的价值吗?它不仅仅是一个默认值,在Get Variables步骤或ktr属性中设置? JS的价值是在Spoon重新启动后第一次运行ktr时获得的? – user4637357

+0

以及我刚刚发现的问题,我第一次运行预览它显示今天日期 - 10(我的javascript),那么我我的JavaScript更改到今天-8和其仍显示今天-10。你有解决方案吗? –

+0

的方法,通过@Cyrus建议应该工作。基本上,你需要把一个单行输入JS步骤(可以使用检测空流一步吧:它不会产生列,所以你不会需要将其删除),然后把你的表输入,而不是您所设定的变量步骤并替换'从步骤输入数据'指向JS步骤。最后删除Set/Get变量步骤。它应该工作。 – user4637357