Pentaho的Filter rows步骤能否加载外部值列表实现行过滤?
问题(中文翻译)
我需要依据CSV文件中存储的正确值列表DOM_LABEL(示例:DOM_LABEL = ['Microsoft', 'Apple', 'Lenovo']),对数据表的label列进行行过滤。当前部分行存在'Samsung'、'HP'等未知错误值,过滤掉label列不在DOM_LABEL中的行有助于问题分析。但Filter rows步骤不支持直接加载值列表,手动添加超100个值效率极低,请问是否有办法将该列表加载至Filter rows步骤?
解决方法
方法1:通过内连接实现自动过滤
- 新增「文本文件输入」步骤,加载存储正确DOM_LABEL的CSV文件,仅读取其中的正确值列
- 将原数据表和这个正确值列表做内连接(Inner Join),连接条件设为「原表label列 = 正确值列表的label列」
- 内连接后只会保留两边匹配成功的行,相当于自动过滤掉不在正确列表中的数据,最后可删除连接带来的重复列
方法2:用查找步骤标记有效行再过滤
- 先加载正确值列表的CSV文件,添加「查找(Lookup)」步骤,以原表的label列为查找键,匹配正确值列表的label列
- 查找完成后会新增一列(比如命名为
is_valid),匹配成功的行该列有值,未匹配的行该列为空 - 再用「过滤行(Filter Rows)」步骤,仅保留
is_valid不为空的行
方法3:脚本步骤直接加载列表过滤(适合有代码基础的场景)
如果工具支持脚本扩展(比如Python),可以直接在脚本里完成读取列表+过滤操作:
import csv # 读取CSV中的正确值列表 dom_labels = [] with open('/your/path/to/dom_label.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) next(reader) # 跳过表头行 for row in reader: dom_labels.append(row[0]) # 过滤当前行:不在列表内就跳过 if row['label'] not in dom_labels: skipRow()
内容的提问来源于stack exchange,提问作者user22174321
相关产品推荐
相关产品推荐

