2014-10-16 37 views
0

我有一个SQL函数,比如说theFunction(item_id)。它需要一个项目id并计算一个值作为其返回值。我从数据库中读取一个表,并且我想通过此函数计算一个新值,以便为每行添加item_id。哪一个desing块会用下面的SQL来做到这一点(如果没有错的话)。如何在Pentaho PDI工作流中使用SQL函数创建新列?

select thsFunction(item_id); 

我假设块给了我每行的item_id作为一个变量。

+0

只是为了确保:表中的值必须作为'item_id'传递到此函数中,并且返回值应存储在另一个表中。是对的吗? – 2014-10-16 16:29:11

回答

1

您可以使用另一个表格输入步骤,并让它接受来自先前步骤的字段并针对每一行执行(两个配置选项均位于步骤窗口的底部)。

请注意,这是一个相当慢的实施。每个查询分开执行,因此每行都需要往返数据库。

或者,您可以使用行SQL脚本。我相信它可以让你将所有的SQL语句传递给数据库。

1

对于一次执行的所有行,SQL函数在数据库中运行可能效率更高,而不是从PDI为每个行分别调用数据库以执行函数。所以如果性能完全是一个相关的问题,我会建议一个完全不同的策略:

  1. 将您的行写入数据库中的表。在这里结束你的转换。
  2. 在工作层面上,首先执行上面的转换,然后在“Execute SQL script ...”组件中执行函数,给它一个类似“UPDATE my_temp_table set target_col = theFunction(item_id)”的SQL命令。
  3. 继续您的工作与新转换中的其余步骤,从该表开始作为输入。

这当然前提是你没有太多其他的线程事,但如果你的transofrmation是简单和线性的 - 或者至少它是否能在这个特别的步骤进行单直线 - 在此SQL调用之前和之后可能会将它分成两部分。

相关问题