Pentaho Kettle加载含近乎空白行的Excel:合并关联ID的批注
解决Pentaho Kettle中同ID批注拼接问题的方案
嘿,这个需求我之前做项目时刚好碰到过!Pentaho Kettle虽然是逐行处理数据,但咱们靠几个组件组合就能搞定同ID下批注的拼接,完全不用纠结原始行的顺序,具体步骤给你捋清楚:
1. 先区分数据行和批注行
首先得把完整数据行(所有字段都填充的那行)和批注行(只有固定批注字段有值、其余空白的行)分开,用Filter Rows组件就能搞定:
- 设置过滤条件:比如选一个非批注的必填字段(比如ID之外的某个业务字段),判断它是否非空——非空的就是完整数据行,空的就是批注行。
- 把两个分支分别输出,方便后续处理。
2. 对批注行按ID聚合拼接
接下来处理批注行的分支,用Group by组件来批量处理:
- 分组字段选
ID(用来和对应的数据行关联)。 - 聚合函数选Concatenate strings(字符串拼接),把批注字段的内容全部拼在一起,分隔符可以自己选(比如
;、换行符或者逗号),输出的字段名就设为COMENTARY AGREGATED。
3. 关联数据行和聚合后的批注
现在把处理好的批注聚合结果,和原始的完整数据行分支用Merge Join组件关联起来:
- 注意:
Merge Join要求两个输入分支都是按关联字段排序好的,所以在Merge Join之前,给两个分支都加上Sort Rows组件,按ID升序(或降序,保持一致就行)排序。 - 连接类型选Left outer join,这样就算有些数据行没有对应的批注,也能保留下来,
COMENTARY AGREGATED字段会是空值,符合实际需求。
4. (可选)处理特殊场景
如果你的数据里存在多个完整数据行对应同一个ID的情况(不过根据你的描述应该是一个ID对应一行完整数据+多行批注),可以在第一步之后给数据行分支加个Unique Rows (HashSet)组件,按ID去重,避免关联后出现重复行。
最后给你个简单的流程示例,一目了然:Excel Input → Filter Rows(拆分数据行/批注行) → 批注行分支:Sort Rows(按ID排序) → Group by(聚合批注) → 数据行分支:Sort Rows(按ID排序) → Merge Join(通过ID关联) → 输出组件(比如Excel Output)
这样就能完美实现把同一ID下的所有批注拼接成新字段的需求啦!
内容的提问来源于stack exchange,提问作者Torrezno
相关产品推荐
相关产品推荐

