pentaho勺子:如何有条件地将值插入列?

时间:2019-06-25 15:32:08

标签: pentaho pentaho-spoon

因此,在我的表格中,我有一列quantitycomment。 如果quantity中的值大于0,那么我需要在列comment中插入一个字符串“ available”,如果它等于0,则为“ to order”,最后如果它小于零,然后“警告”。最好的方法是什么?

编辑: 猜猜我上面的问题并未显示出全部必要的工作。

首先,我有一个文本文件,其中包含quantity等字段。

然后我对数据进行一些修改(在公式步骤中,我对quantity进行了一些计算)。

最后,我使用Table output步骤将它们插入BD。要插入的字段之一是quantity

我的主要问题是:

使用SQL脚本步骤在comment步骤之后(当BD中已经添加了Table output时,将值插入列quantity更好吗?

2 个答案:

答案 0 :(得分:1)

您基本上有3个选择:

  1. 一个过滤器行步骤根据数量值拆分流,然后每个输出流都具有一个Add constants步骤来添加所需的新字段,然后通过连接两个Add constants步骤来再次合并它们给一个假人;

  2. 用户定义的Java表达式

  3. 一个JavaScript步骤。

选项2可能是最干净的;选项3与选项2基本相同,但是使用javascript而不是Java代码;选项1的优点是不需要任何代码(尽管,替代方法是使用一条线,这并不是真正的问题)。另外,在选项1中,行的顺序不一定必须保持。

答案 1 :(得分:0)

**答案不再适用于新的问题详细信息**

如果要更新数据库表,到目前为止,最好,最有效的解决方案是在单个SQL语句中完成。

在Pentaho作业中,添加一个SQL步骤(在脚本下)。

在该步骤中,输入SQL命令。它将类似于:

UPDATE MyTable
SET comment = 
    CASE 
        WHEN quantity > 0 THEN 'available'
        WHEN quantity < 0 THEN 'warning'
        ELSE 'to order'
    END
// next line optional, use it if you only need to update some of the records.
WHERE (insert conditions here if you need any)

作为一个额外的注释,拥有两个应该始终保持同步但要依靠外部作业来保持同步的列并不理想。有一些技术可以使数据库触发器或计算大小写/何时在选择语句中检索行时消除了不同步字段的可能性。