如何在Pentaho的Insert/Update步骤中获取仅插入/更新的行?
在Pentaho中筛选Insert/Update步骤实际插入/更新的行
方法一:利用Insert/Update自带的标记字段
- 打开Insert/Update步骤的配置界面,在字段映射区域底部,勾选「生成插入/更新字段」(部分版本显示为
Create insert/update fields)。这个设置会自动为每一行添加两个布尔型字段:Inserted(标记该行是否被插入)和Updated(标记该行是否被更新)。 - 在Insert/Update步骤后添加过滤行步骤,设置过滤条件为
Inserted = true或Updated = true(注意不同版本布尔值的格式,有些用Y/N替代true/false,以实际运行结果为准)。 - 把过滤后的数据流接入Log步骤,此时Log只会记录实际被插入或更新的行。
方法二:用Merge Rows (diff)预处理对比
如果需要提前区分数据状态,可先通过对比预处理筛选出需要操作的行:
- 先添加一个「表输入」步骤,读取目标表的现有数据作为参照流;待处理的数据源作为主数据流。
- 添加**合并行(差异)**步骤,将主数据流和参照流接入,设置和Insert/Update一致的匹配主键。该步骤会生成
change_type字段,取值包括:NEW:目标表中不存在的新行(对应插入操作)CHANGED:目标表已存在且字段有变更的行(对应更新操作)UNCHANGED:无变化的行
- 用过滤行步骤保留
change_type为NEW或CHANGED的行,再将这些行送入Insert/Update步骤,后续的Log步骤就只会记录实际执行插入/更新的行。
内容的提问来源于stack exchange,提问作者Hoang Minh Quang FX15045
相关产品推荐
相关产品推荐

