【问题标题】:Merging Attributes in Apache Nifi after a ExtractText (using Regex)在 ExtractText 之后合并 Apache Nifi 中的属性(使用正则表达式)
【发布时间】:2018-02-21 16:53:08
【问题描述】:

在使用 Nifi ExtractText 处理器使用正则表达式(使用多重捕获模式)从流文件内容中提取匹配项后,您将获得一系列数字升序属性。例如。 date, date.0, date.1, date.2, ... 表示整个文本中的多个捕获。

我想要的是单个属性 ${dates},它包含捕获的每个条目。有人可以帮忙吗?

(Nifi v1.5.0)

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    使用更新属性处理器 使用表达式语言添加新属性

    日期:

    ${allMatchingAttributes("date.*"):join(",")}
    

    此表达式连接所有日期,日期.0,日期.1,日期.2并将日期属性添加到流文件。

    更多参考:-

    https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#join

    【讨论】:

      【解决方案2】:

      date.0 属性是您可能感兴趣的。

      例如,我使用GenerateFlowFile 处理器创建包含文本This is a message generated at ${now():format('yyyy/MM/dd HH:mm:ss.SSS Z')} 的流文件,这将产生类似This is a message generated at 2018/02/21 09:25:16.832 -0800. 的内容

      然后我使用ExtractText 处理器和一个名为date 的新属性和以下正则表达式:(\d{4}/\d{2}/\d{2}) (\d{2}:\d{2}:\d{2}\.\d{3}) .?\d{4} 您可以看到这有两个捕获组——一个用于年/月/日部分,一个用于小时/分钟/秒/毫秒部分。

      运行ExtractText 后,结果如下。您可以看到各个捕获组在date.1 和date.2 中,但date.0 包含整个正则表达式匹配。

      --------------------------------------------------
      Standard FlowFile Attributes
      Key: 'entryDate'
          Value: 'Wed Feb 21 09:25:16 PST 2018'
      Key: 'lineageStartDate'
          Value: 'Wed Feb 21 09:25:16 PST 2018'
      Key: 'fileSize'
          Value: '62'
      FlowFile Attribute Map Content
      Key: 'date'
          Value: '2018/02/21'
      Key: 'date.0'
          Value: '2018/02/21 09:25:16.832 -0800'
      Key: 'date.1'
          Value: '2018/02/21'
      Key: 'date.2'
          Value: '09:25:16.832'
      Key: 'filename'
          Value: '813454866687188'
      Key: 'firstName'
          Value: 'Andy'
      Key: 'fullName'
          Value: ' '
      Key: 'lastName'
          Value: 'LoPresto'
      Key: 'path'
          Value: './'
      Key: 'uuid'
          Value: '9e5de17c-2d62-401e-ad13-d49adf5fdd85'
      --------------------------------------------------
      This is a message generated at 2018/02/21 09:25:16.832 -0800.
      

      【讨论】:

        【解决方案3】:

        您可以使用getDelimitedField 表达式语言获取这些值。

        如果您想捕获您的流文件内容,请使用 ExtractText 处理器,它本身使用以下正则表达式创建新属性。

        dates:(.*)
        

        如果您有以下内容

        1,Hi,23,001
        

        它将存储在名为 dates 的属性中,您可以通过 ${dates}

        在流中使用它

        如果您想获得这些值,请使用下面的表达式。

        使用更新属性,来捕获如下的值。

        ID :${dates:getDelimitedField(1)}
        Name:${dates:getDelimitedField(2)}
        Age:${dates:getDelimitedField(3)}
        

        您可以像往常一样在流程中使用它,例如${ID},${Name},${Age}

        希望这对你真的有帮助。

        【讨论】:

          猜你喜欢
          • 2016-05-25
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-24
          • 2023-01-30
          • 2023-03-10
          • 2010-09-05
          相关资源
          最近更新 更多