首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pentaho Kettle:动态参数和查询

Pentaho Kettle:动态参数和查询
EN

Stack Overflow用户
提问于 2015-04-21 09:22:36
回答 1查看 6.9K关注 0票数 1

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

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

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

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

在Table输入内部,如下所示:

下面是执行SQL语句:

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-04-21 17:23:13

如果我正确理解了您的问题,那么每次运行时,您都会从一个给定表tableX中选择一个特定的列,比如说colA,然后您会想要将它插入到tableY中,该行看起来像这样:

代码语言:javascript
复制
tableX, colA, valueA

是这样吗?

好吧,在这种情况下,有几点要注意:

1)在表输入步骤中,您并没有真正使用Get Variables步骤的输出。在Table输入中,您读取的是变量值,而不是Get Variables步骤的输出字段。

2)这里不应该使用Execute Row SQL Script步骤。表输出步骤是更好的选择。

这里有一个更好的食谱:

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

2)表输入:你的查询应该是这样的

代码语言:javascript
复制
Select
  ? as table,
  ? as column,
  ${SELECT_COLUMN} as value
From (
  ${SQL_STR}
) foo

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

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

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

table -> dp_table_relation_id column ->您在目标表上拥有的列名,value ->,您在目标表上拥有的列名。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29761240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档