NiFi中QueryRecord如何用RPATH对一级属性做正则匹配过滤?
在NiFi中处理一级属性的正则过滤方案
针对你提供的JSON数组格式FlowFile,以下两种方法可以实现一级属性的正则过滤:
方法1:使用Record Path表达式(适用于QueryRecord的Record Path模式、ConvertRecord等处理器)
直接通过Record Path定位数组元素并过滤:
*[name matchesRegex '<你的正则表达式>'].(name, id)
*匹配JSON数组中的每一个对象元素[name matchesRegex 'xxx']过滤出name属性匹配正则的元素.(name, id)指定返回的字段(可选,若需要返回全部属性可省略)
比如要匹配name以abc开头的记录,正则写为^abc.*,完整表达式:
*[name matchesRegex '^abc.*'].(name, id)
方法2:使用SQL查询(适用于QueryRecord的SQL模式)
简化写法(推荐)
QueryRecord会自动将JSON数组拆分为单条记录,直接用字段名结合REGEXP_MATCH函数即可:
select name, id from FLOWFILE where REGEXP_MATCH(name, '<你的正则表达式>')
强制使用RPATH的写法
如果必须用RPATH,需正确定位到数组元素的属性:
select name, id from FLOWFILE where RPATH(FLOWFILE, '*/name[matchesRegex(., "<你的正则表达式>")]') is not null
注意事项
- 正则表达式需遵循Java正则语法,特殊字符(如
\)需要双重转义,比如匹配点号要写\\. - 确保处理器已配置正确的JSON记录读取器(如JsonTreeReader),能正确解析一级属性
内容的提问来源于stack exchange,提问作者Hardik
相关产品推荐
相关产品推荐

