1

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

无论如何,问题出在插入端。我能够生成 SELECT 语句来获取数据源,并通过操纵数据来获取查询来获取数据。

这就是它现在的样子。请注意获取变量,这就是我生成 sql 查询的方式。

这就是它现在的样子。请注意获取变量,这就是我生成 sql 查询的方式。 在此处输入图像描述

Table 输入内部如下所示: 在此处输入图像描述

这是执行 SQL 语句: 在此处输入图像描述

看到动态部分了吗?无论如何,问题是插入脚本变量中的 ${INSERT_VALUES} 都是“?” 数据应该由表输入提供的字符。让我确定有多少列。

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

4

1 回答 1

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。

于 2015-04-21T09:23:12.830 回答