Pentaho如何动态修改行?左连接后补全缺失数据求助
解决Pentaho Spoon中左外连接后缺失字段补全的问题
方案1:修正Modified JavaScript Value组件的用法
你遇到的the field Municipios is not defined错误,是因为组件未正确识别字段,或代码未用正确方式读取字段。按以下步骤修改:
- 打开Modified JavaScript Value组件的Fields选项卡,添加
Municipios和COD_INE两个字段,确保组件能访问到它们。 - 替换为正确的JS代码:
// 读取当前行的Municipios字段值 var town = getField("Municipios"); var newCodIne; // 根据城镇名称设置对应的COD_INE if(town === "36011 Cerdedo"){ newCodIne = "36011000000"; } else if(town === "36012 Cotobade"){ newCodIne = "36012000000"; } else { // 保留原有COD_INE的值(如果非空) newCodIne = getField("COD_INE"); } // 将新值写入COD_INE字段 putField("COD_INE", newCodIne);
这样就能精准替换目标行的null值,其他行不受影响。
方案2:用Append Stream补全右表后再做连接
你之前用Row Generator+Merge Join导致字段重复,是因为选错了组件。正确流程是:
- 用Row Generator生成缺失的两行数据,字段和原右表完全一致:
- 第一行:
Municipios= "36011 Cerdedo",COD_INE= "36011000000",其他字段设为null(和原右表字段对应) - 第二行:
Municipios= "36012 Cotobade",COD_INE= "36012000000",其他字段设为null
- 第一行:
- 用Append Stream组件,把原右表数据和Row Generator生成的两行追加合并,得到完整的右表数据(追加行,不是合并字段)
- 用这个完整的右表和左表(人口统计表)重新做左外连接,此时所有城镇都会匹配到对应数据,不会出现null值。
方案3:用Lookup in a Stream组件批量补全null值
适合少量缺失数据的场景:
- 用Row Generator生成一个仅包含缺失城镇映射关系的小流,字段为
Municipios和COD_INE(只需要那两行) - 将左外连接后的结果作为主输入流,映射关系流作为查找输入流,添加Lookup in a Stream组件
- 配置组件:
- 匹配字段:选择
Municipios - 要填充的字段:选择
COD_INE,并勾选「Replace null values only」选项
- 匹配字段:选择
- 运行后,主流中COD_INE为null的行会被查找流中的对应值替换,其他行保留原有数据。
内容的提问来源于stack exchange,提问作者CapitanBublo
相关产品推荐
相关产品推荐

