【发布时间】:2018-09-26 15:53:45
【问题描述】:
是否可以根据返回单行结果的 SQL 查询的结果来路由流文件?例如,如果结果为“1”,则将处理流文件;否则会被忽略。
解决方案
以下方法最适合我。
- 使用 ExecuteSQL 处理器来运行过滤 SQL 查询。按照 Shu 建议的方式编写查询以生成单个记录(匹配)或空记录集(不匹配)。
- 将 ExecuteSQL 连接到 RouteOnAttribute 处理器,以便使用以下路由属性值
${executesql.row.count:replaceNull(0):gt(0)}过滤掉不匹配的流文件
注意,应用ExecuteSQL后,流文件的原始内容会丢失。在我的情况下这不是问题,因为我在处理流文件内容之前进行过滤,并且我的 SQL 查询完全基于流文件属性而不是其内容。虽然在更一般的情况下,当流的传入部分修改流文件内容时,应该将文件内容保存在某处(例如文件系统)并在过滤部分应用后将其恢复。
【问题讨论】:
标签: apache-nifi