Apache nifi 如何根据SQL查询结果过滤流文件?

Apache nifi 如何根据SQL查询结果过滤流文件?,apache-nifi,Apache Nifi,是否可以根据返回单行结果的SQL查询结果来路由流文件?例如,如果结果为“1”,则将处理流文件;否则,它将被忽略 解决方案 以下方法最适合我 使用ExecuteSQL处理器运行筛选SQL查询。按照舒的建议,编写查询是为了生成单个记录(匹配)或空记录集(不匹配) 将ExecuteSQL连接到RouteOnAttribute处理器,以便使用路由属性值的以下值${ExecuteSQL.row.count:replaceNull(0):gt(0)} 请注意,应用ExecuteSQL后,流文件的原始内容将丢

是否可以根据返回单行结果的SQL查询结果来路由流文件?例如,如果结果为“1”,则将处理流文件;否则,它将被忽略

解决方案 以下方法最适合我

  • 使用ExecuteSQL处理器运行筛选SQL查询。按照舒的建议,编写查询是为了生成单个记录(匹配)或空记录集(不匹配)
  • ExecuteSQL连接到RouteOnAttribute处理器,以便使用路由属性值的以下值
    ${ExecuteSQL.row.count:replaceNull(0):gt(0)}

  • 请注意,应用ExecuteSQL后,流文件的原始内容将丢失。在我的例子中,这不是问题,因为我在处理流文件内容之前进行过滤,并且我的SQL查询完全基于流文件属性,而不是其内容。虽然在更一般的场景中,当流的传入部分修改流文件内容时,应该将文件内容保存在某个位置(例如文件系统),并在应用过滤部分后恢复

    您可以在sql查询
    where=1
    中添加where子句
    ,然后我们只会在结果值=1时输出一个流文件

    (或)

    检查NiFi中的数据:

    我们将有AVRO格式化数据作为SQL查询的结果,以便您可以使用

    选项1:ConvertAvroToJson处理器:

    AVRO数据转换为JSON格式,然后使用EvaluateJsonPath处理器从JSON内容中提取值作为属性。

    然后使用RouteOnAttribute处理器使用比较值添加新属性,并将流文件路由到匹配关系

    有关EvaluateJsonpath和RouteOnAttribute处理器配置的更多详细信息,请参阅链接

    选项2:使用查询记录处理器:

    通过使用QueryRecord处理器,我们可以对流文件的内容运行SQL查询

    将新属性添加到处理器,如下所示:

    select * from FLOWFILE where <filed_name> =1 
    
    从FLOWFILE中选择*,其中=1
    
    将属性关系馈送到其他处理器


    有关QueryRecord处理器使用的更多详细信息,请参阅链接。

    请务必使用选项2存储库以获取建议。我在问题中加入了最适合我的解决方案。