如何使用Pentaho基于参考CSV替换目标CSV中的城市简称?
嘿,这个需求在Pentaho Data Integration(也就是咱们常说的Spoon)里用几个核心组件就能轻松实现,我给你一步步拆解操作流程,保证你能快速上手:
步骤1:新建转换
打开Pentaho Spoon,点击左上角的「文件」→「新建」→「转换」,创建一个空白的转换工程。
步骤2:加载两个CSV数据源
从左侧的「输入」分类里,拖两个CSV文件输入组件到画布上,分别对应你的两个CSV文件:
- 第一个组件:选择你那10条记录的主数据CSV,配置好文件路径、分隔符(一般是逗号),记得勾选「第一行是字段名」,确保
city字段被正确识别。 - 第二个组件:选择包含映射关系的CSV,同样配置文件路径、分隔符,确认
cityshortname和city两个字段被加载。
步骤3:通过Merge Join实现城市简称映射
从左侧「连接」分类里拖一个Merge Join组件到画布,然后把两个CSV输入组件的输出箭头都连到这个Merge Join上:
- 双击打开Merge Join配置窗口:
- 选择连接类型:如果你的主数据里所有城市简称都能在映射表里找到,用内连接就够;如果有部分简称不在映射表里,想保留这些记录的话,选左外连接。
- 设置关联字段:在「主步骤」里选主数据的
city字段,「查找步骤」里选映射表的cityshortname字段,让它们做匹配。 - 配置输出字段:勾选你需要保留的主数据所有字段,再勾选映射表的
city字段(建议重命名为full_city_name,避免和主数据原来的city字段重名)。
步骤4:配置输出并验证结果
从左侧「输出」分类拖一个CSV文件输出组件到画布,把Merge Join的输出箭头连到这个组件上:
- 配置输出文件的路径和文件名,勾选「第一行是字段名」。
- 在字段列表里选择你最终需要的字段(比如去掉原来的
city简称字段,只保留全称字段,或者两者都保留)。
配置完成后,点击画布上方的运行按钮,等待转换执行完成。打开输出的CSV文件,检查城市简称是否已经替换成对应的全称。
可选方案:用Lookup in stream组件实现映射
如果你的映射表数据量比较小,也可以用Lookup in stream组件来实现:
- 把映射表CSV的输出连到Lookup in stream的「查找步骤」,主数据CSV的输出连到「主步骤」。
- 配置查找字段:主数据的
city对应映射表的cityshortname,然后选择要返回的city全称字段。 - 后续同样用CSV文件输出组件导出结果。
一些注意事项
- 确保两个文件里的城市简称完全匹配:大小写、空格、特殊字符都要一致,不然会出现匹配失败的情况。
- 如果用左外连接后出现空值的全称字段,可以再加一个Replace in string组件,把空值替换成原简称或者自定义的提示文本(比如「未找到对应城市」)。
- 配置CSV输入时,如果字段里包含特殊字符或者分隔符,记得勾选「引用字段」选项,避免解析错误。
内容的提问来源于stack exchange,提问作者Abhishek




