【问题标题】:Pentaho Kettle: Dynamic Parameters and QueryPentaho Kettle:动态参数和查询
【发布时间】:2015-06-27 23:12:12
【问题描述】:

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

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

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

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

Table 输入内部如下所示:

这是执行 SQL 语句:

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

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

【问题讨论】:

    标签: dynamic kettle dynamicquery pdi


    【解决方案1】:

    如果我正确理解了您的问题,则每次运行时,您都会从给定的表 tableX 中选择一个特定的列,例如 colA,您将希望将其插入到 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 column -> 列名的目标表上的任何列名 value -> 你在目标表上的任何列名。

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

    【讨论】:

    • 所以你是说,在表格输出中我不需要设置列?因为列(逗号分隔)很容易,因为我已经有了。问题是在表输出中设置数据库字段。我之所以问是因为就像我在每次运行中所说的那样,列和表格可能会有所不同。
    • 你没有;如果你不指定它们,列名将被省略,因此你必须有正确的字段数量和正确的顺序。
    • 好的,我明白了。现在在你的#2 上你是什么意思?作为表,?作为列和 ${SELECT_COLUMN} 作为值。请注意,在我的表格输入中,我已经可以在那里检索数据。我试图把它放在一个日志中,它确实显示了一些行。
    • 问号是 JDBC 参数。它们将被到达该步骤的字段替换,按照它们到达的顺序。那么,如果您的输入流有 2 个字段,table_name 和 column_name,第一个 ?被第一个字段的值替换,第二个字段的值相同。不要忘记填写“插入数据”框并勾选“为每个输入行执行”
    • 我认为您需要在表格输出中填写那些数据库字段,这就是我没有尝试的原因。但是,是的,我一定会尝试一下。
    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多