是否可以根据返回单行结果的SQL查询的结果来路由流文件?例如,如果结果为“ 1”,则将处理流文件;否则,将处理流文件。否则,它将被忽略。
以下方法最适合我。
${executesql.row.count:replaceNull(0):gt(0)}
通知,当应用 ExecuteSQL 后,流文件的原始内容将丢失。就我而言,这不是问题,因为我在处理流文件内容之前进行了过滤,而我的SQL查询完全基于流文件属性而不是其内容。尽管在更一般的情况下,当流的文件内容被流的传入部分修改时,应将文件内容保存在某处(例如文件系统),并在应用过滤部分后将其还原。
答案 0 :(得分:1)
您可以在SQL查询where <field_name> = 1
中添加where子句,然后,当结果值= 1时,我们只会输出流文件 。
(或)
在NiFi中检查数据:
作为SQL查询的结果,我们将具有 AVRO 格式的数据,以便您可以使用
选项1:ConvertAvroToJson处理器:
将 AVRO 数据转换为 JSON 格式,然后使用EvaluateJsonPath处理器从 json内容中提取值作为属性。
然后使用 RouteOnAttribute 处理器使用NiFi expression language equals function比较新属性并将流文件路由到匹配的关系。
请参阅this链接,以获取有关EvaluateJsonpath和RouteOnAttribute处理器配置的更多详细信息。
选项2:使用QueryRecord处理器:
通过使用 QueryRecord 处理器,我们可以对流文件的内容运行 SQL查询
为处理器添加新属性
select * from FLOWFILE where <filed_name> =1
将属性关系提供给另一个处理器
有关查询记录处理器使用情况的更多详细信息,请参见this链接。