Pentaho Kettle:动态参数和查询

时间:2015-04-21 01:22:36

标签: dynamic kettle dynamicquery pdi

我正在尝试从动态数据源向destinationDB插入数据以及获取数据时的查询。这就是说要插入的列和表可能会有所不同。但是,问题是列和表在destinationDB的表中保存为行。这意味着虽然它是动态的,但我已经知道在哪里插入它以及它的列是什么。所以,是的,这是我的问题的背景故事。

无论如何,问题出在插入方面。我能够生成SELECT语句来获取数据源并通过操作数据来获取数据,从而获得数据。

这就是现在的样子。请记住get变量,这就是我生成sql查询的方式。

这就是现在的样子。请记住get变量,这就是我生成sql查询的方式。 enter image description here

Table输入内容如下所示: enter image description here

这是执行SQL语句: enter image description here

看动态部分?无论如何,问题是插入脚本变量中的$ {INSERT_VALUES}都是'?'表输入提供数据的字符。让我来确定列数。

问题1:您可以在“执行SQL语句”步骤中注意到,我没有传递任何参数来提供“?”在插入物上。那是因为我不知道要在那里标记什么,因为参数/列每次都会变化。取决于要插入的表。有办法解决这个问题吗? 问题2:pentaho是否允许某种双重替代?将变量替换为其值并替换为“?”到参数值?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么每次运行时,您都会从给定的表colA中选择一个特定的列,比如tableX,并且您希望将其插入tableY一行看起来像这样:

tableX, colA, valueA
是吗?

那么,在这种情况下,请注意几点:

1)您并未真正使用“表输入”步骤中“获取变量”步骤的输出。在表输入中,您正在读取变量值,而不是作为“获取变量”步骤输出的字段。

2)您不应在此处使用“执行行SQL脚本”步骤。表输出步骤是更好的选择。

这是一个更好的食谱:

1)获取变量:它应该获得以下变量并创建以下输出字段: $ {SQL_STR}映射到sql_str $ {SELECT_COLUMN}到select_column

2)表输入:您的查询应该类似于

Select
  ? as table,
  ? as column,
  ${SELECT_COLUMN} as value
From (
  ${SQL_STR}
) foo

表输入步骤的输出由3个字段组成:

$ {SQL_STR}的字符串值,$ {SELECT_COLUMN}的字符串值以及来自源表的实际值。

3)表输出步骤写入表$ {DATA_TABLE_SQL},并带有以下字段映射:

表格 - > dp_table_relation_id 列 - >列目标的目标表上的列名称 价值 - >您在目标表上的任何列名称。

备注:我没有包含id,但是要将它设置为目标表上的auto_increment字段并不难,或者在单独的查询中,您获得的最大值已经存储在目标表中目标表,在表输入步骤的输出中添加一个序列,添加这两个整数,并将结果用作新的id。