pentaho spoon:如何有条件地向列中插入值?

pentaho spoon : how to insert value to column conditionnally?

所以在我的 table 中,我有一列 quantitycomment。 如果 quantity 中的值大于 0,那么我需要在列 comment 中插入一个字符串 "available" ,如果它等于 0 那么 "to order" 最后如果它小于大于零,然后 "warning"。最好的方法是什么?

编辑: 猜猜我上面的问题没有显示必要的全部工作。

首先,我有一个文本文件,其中包含 quantity.

的字段

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

最后我用Table output一步将它们插入到BD中。要插入的字段之一是 quantity.

我的主要问题是:

使用 SQL 脚本步骤在 Table output 步骤后(当 quantity 已添加到 BD 中时)向列 comment 插入值是否更好?

你基本上有 3 个选择:

  1. 一个过滤行步骤根据数量的值拆分流,然后每个输出流都有一个添加常量步骤来添加你想要的新字段,然后通过连接再次组合它们都将常量步骤添加到虚拟对象;

  2. 用户定义java表达式

  3. 一个java脚本步骤。

选项 2 可能是最干净的;选项 3 与选项 2 基本相同,但使用 java 脚本而不是 java 代码;选项 1 的优点是不需要任何代码(不过,因为替代方案是单行代码,所以不是真正的问题)。另外,在选项 1 中,行的顺序不一定保持不变。

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

如果您正在更新数据库 table,目前最好和最有效的解决方案是在单个 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)

作为额外的评论,让两列始终保持同步并不理想,但要依靠外部作业来保持它们同步。有一些技术,如数据库触发器或在 select 语句中检索行时计算 case/when,可以消除不同步字段的可能性。