pentaho spoon:如何有条件地向列中插入值?
pentaho spoon : how to insert value to column conditionnally?
所以在我的 table 中,我有一列 quantity
和 comment
。
如果 quantity
中的值大于 0,那么我需要在列 comment
中插入一个字符串 "available" ,如果它等于 0 那么 "to order" 最后如果它小于大于零,然后 "warning"。最好的方法是什么?
编辑:
猜猜我上面的问题没有显示必要的全部工作。
首先,我有一个文本文件,其中包含 quantity
.
的字段
然后我对数据进行了一些修改(在公式步骤中,我对 quantity
进行了一些计算)。
最后我用Table output
一步将它们插入到BD中。要插入的字段之一是 quantity
.
我的主要问题是:
使用 SQL 脚本步骤在 Table output
步骤后(当 quantity
已添加到 BD 中时)向列 comment
插入值是否更好?
你基本上有 3 个选择:
一个过滤行步骤根据数量的值拆分流,然后每个输出流都有一个添加常量步骤来添加你想要的新字段,然后通过连接再次组合它们都将常量步骤添加到虚拟对象;
用户定义java表达式
一个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,可以消除不同步字段的可能性。
所以在我的 table 中,我有一列 quantity
和 comment
。
如果 quantity
中的值大于 0,那么我需要在列 comment
中插入一个字符串 "available" ,如果它等于 0 那么 "to order" 最后如果它小于大于零,然后 "warning"。最好的方法是什么?
编辑: 猜猜我上面的问题没有显示必要的全部工作。
首先,我有一个文本文件,其中包含 quantity
.
然后我对数据进行了一些修改(在公式步骤中,我对 quantity
进行了一些计算)。
最后我用Table output
一步将它们插入到BD中。要插入的字段之一是 quantity
.
我的主要问题是:
使用 SQL 脚本步骤在 Table output
步骤后(当 quantity
已添加到 BD 中时)向列 comment
插入值是否更好?
你基本上有 3 个选择:
一个过滤行步骤根据数量的值拆分流,然后每个输出流都有一个添加常量步骤来添加你想要的新字段,然后通过连接再次组合它们都将常量步骤添加到虚拟对象;
用户定义java表达式
一个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,可以消除不同步字段的可能性。