【发布时间】:2019-05-29 14:44:49
【问题描述】:
我想执行一组基于选择的 sql 查询,这些查询源自 XML 文件中的 xml-node 元素,并将相应结果集的值写入 CSV 文件。我想澄清一下,sql查询的任何字段都没有参数化,但是完整的sql查询本身就是。
获取完整的sql查询部分按预期完成,但不知道如何进行启动sql查询的部分,以便稍后获取相应的结果集进行管理。
到目前为止,我尝试过但没有成功的方法如下:
Execute SQL scriptstep:按照here的说法,这种step不会得到任何结果。Dynamic SQL Row步骤:只要硬编码字段“TemplateSQL”,我就会得到相应的 sql,但我不能这样做,因为从上一步派生的 sql 查询在它们之间非常不同并且不要'不提供固定的元数据方案。Table Input步骤:此步骤只允许参数化 sql 查询的单个值,而不是完整的查询。
如果有 pentaho-kettle 专家能告诉我完成我想做的任务的正确方法,我将不胜感激。
更新(按照@Cristian Curti 的说明): 问题出现在 KTR-1 中。当您说 “您必须将此查询作为变量传递给另一个 KTR” 时,我知道我首先要做的是在变量中设置 xml-node 值,然后将其传递给KTR-2。为此,在我的 KTR-1 中,我使用了以下步骤:
-
Get Data from XML: 我得到了 'SQLQuery' 字段。 -
Set Variables:我在一个名为“QUERY”的变量中设置了“SQLQuery”字段。 (另外,KTR-1是按你说的设置的,也就是在Parameters选项卡中我设置了一个名为'QUERY'的参数)。
当我预览 KTR-1 的第二步时,Kettle 控制台记录以下错误:
Get data from XML.0 - Finished processing (I=2, O=0, R=0, W=2, U=0, E=0)
Set variables.0 - Setting environment variables...
Set variables.0 - Set variable QUERY to value [
SELECT "Table1".*, "table2"."field1" FROM "Table1" INNER JOIN "Table2" ON Table1"."PATIENT" = "Table2"."PATIENT" WHERE ("Table1"."field1" > Table1"."field2") AND NOT("field1" BETWEEN 'date1' AND 'date2')
]
Set variables.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-1-14 10.30.55 by buildguy) : Unexpected error
Set variables.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-1-14 10.30.55 by buildguy) : org.pentaho.di.core.exception.KettleStepException:
Set variables.0 - Only 1 input row was expected to set the variables and at least 2 were received.
似乎Set Variables step 只希望收到一行。
我不知道我是做错了什么还是错过了什么。如果您需要更多详细信息,请告诉我。谢谢。
【问题讨论】:
标签: sql select pentaho-data-integration