0

我有一个 sql 函数,比如说theFunction(item_id). 它接受一个项目 id 并计算一个值作为它的返回值。我从数据库中读取了一个表,并且我想通过这个函数计算一个新值以附加到每一行,给定特定于 taht 行的 item_id。哪个设计块会使用以下 SQL(如果没有错的话)来做这件事。

select thsFunction(item_id);

我假设该块将每行的 item_id 作为变量提供给我。

4

2 回答 2

1

SQL 函数在数据库中一次运行所有行的效率可能要高得多,而不是从 PDI 对数据库进行单独调用以执行该函数。因此,如果性能完全是一个相关问题,我建议采用完全不同的策略:

  1. 将行写入数据库中的表。在这里结束你的转变。
  2. 在作业级别,首先从上面执行转换,然后在“执行 SQL 脚本...”组件中执行该函数,给它一个有点像“ UPDATE my_temp_table set target_col = theFunction(item_id)”的 SQL 命令。
  3. 从该表作为输入开始,继续执行新转换中的剩余步骤。

这当然假设您没有太多其他线程正在进行,但是如果您的转换是简单且线性的 - 或者至少如果它可以在这个特定步骤中使其成为单线性 - 它可能会拆分它在此 SQL 调用之前和之后分为两部分。

于 2015-02-25T09:25:41.163 回答
1

您可以使用另一个表格输入步骤,并让它接受先前步骤中的字段并为每一行执行(两个配置选项都在步骤窗口的底部)。

请注意,这是一个相当缓慢的实现。每个查询都是单独执行的,因此每一行都需要往返于数据库。

或者,您可以使用 Row SQL 脚本。我相信它允许您一次将所有 SQL 语句传递到数据库。

于 2014-10-17T07:11:19.027 回答