【问题标题】:ReplaceText of NiFi does not parse regex being passed through an Attribute (even though it supports Expression Language)NiFi 的 ReplaceText 不解析通过属性传递的正则表达式(即使它支持表达式语言)
【发布时间】:2017-09-21 22:09:10
【问题描述】:

我也有同样的问题。

以下在 NiFi ReplaceText 处理器中效果很好

流文件内容:

US0706003247984600Z1Z000123371K US0706003247984600Z1Z000125491K US0706003247984600Z1Z000125596K

搜索值: (.{2})(?:.{4})(.{6})(.{2})(.{4})(.{6})(.{6})(.{1})

替换值:{col_foo1:$1,col_foo3:$2,col_foo4:$3,col_foo5:$4,col_foo6:$5,col_foo7:$6,col_foo8:$7},

输出:{col_foo1:US,col_foo3:003247,col_foo4:98,col_foo5:4600,col_foo6:Z1Z000,col_foo7:123371,col_foo8:K}, {col_foo1:US,col_foo3:003247,col_foo4:98,col_foo5:4600,col_foo6:Z1Z000,col_foo7:125491,col_foo8:K}, {col_foo1:US,col_foo3:003247,col_foo4:98,col_foo5:4600,col_foo6:Z1Z000,col_foo7:125596,col_foo8:K},

然而

我需要将搜索值存储在属性中(例如 search.value),并将替换值存储在属性中(例如 replace.value),这将通过配置文件传入。

流文件内容:

US0706003247984600Z1Z000123371K US0706003247984600Z1Z000125491K US0706003247984600Z1Z000125596K

搜索值:${search.value}

search.value 属性:(.{2})(?:.{4})(.{6})(.{2})(.{4})(.{6})(.{6})(.{1})

替换值:${replacement.value}

replacement.value 属性:{col_foo1:$1,col_foo3:$2,col_foo4:$3,col_foo5:$4,col_foo6:$5,col_foo7:$6,col_foo8:$7},

输出:US0706003247984600Z1Z000123371K US0706003247984600Z1Z000125491K US0706003247984600Z1Z000125596K

which 似乎表明每个属性值的正则表达式内容没有被正确评估。

非常感谢任何想法。

【问题讨论】:

    标签: regex apache-nifi


    【解决方案1】:

    一般来说,NiFi 中的表达式语言可以在有和没有流文件的情况下进行评估,并且由处理器决定如何使用它。

    例如,某些处理器上可能有一个 URL 属性,用于在处理器启动时建立连接,这可以支持针对系统属性和环境变量的表达式语言,但不能针对流文件进行评估,因为处理器启动时没有流文件。

    快速浏览一下 ReplaceText 的代码,可能存在导致您描述的问题的不一致。

    我创建了这个 JIRA: https://issues.apache.org/jira/browse/NIFI-4417

    这也可能是相关的: https://issues.apache.org/jira/browse/NIFI-4272

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 2010-09-19
      • 2021-02-02
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多