如何从 Apache Nifi 的属性中提取名称目录?
How can I extract the name directories from an attribute in Apache Nifi?
如何在 Apache Nifi 中提取名称目录?
我想从流文件的 'absolute-path' 属性中提取名称,并将其保存为同一流文件的属性。
例如:absolute.path 的值为“C:\Users_SEG19”
并将它们放入新属性中,例如:year= 2019, time=01_SEG
我尝试使用“UpdateAttribute”中的 replaceAll 函数从“absolute.path”中提取信息,但无法识别带有 () 的我组。我不知道如何在 NiFi 中操作正则表达式中的组和 NiFi 中的属性。
例如,我想删除目录的最后两个名称,但是没有用。
${'absolute.path':replaceAll('(\[0-9]{2}_SEG)(\([0-9]{4}\/)$)','')}
这个表达式适用于任何 Java 正则表达式,但这里不行。
如果我尝试这样的事情:
time = ${"absolute.path":replaceFirst(".*\(.*)\\d{4}", "")}
有如下错误:
Error
UpdateAttribute
processor allows arbitrary new/existing attributes to have values assigned from regular expression parsing 通过其他属性的表达式语言。您的场景示例:
现有属性absolute.path = "C:\Users_SEG19"
为以下项添加动态属性:
- 时间 =
${"absolute.path":replaceFirst(".+\\(\w+)\\\d{4}", "")}
- 年 =
${"absolute.path":replaceFirst(".*(\d{4})$", "")}
生成的流文件将具有以下属性:
- absolute.path = "C:\Users_SEG19"
- 时间 = "01_SEG"
- 年份 = "2019"
表达式中属性 absolute.path 周围的额外引号是因为它包含一个 .
字符。
更新
由于 Windows 斜杠的方向,斜杠转义需要加倍。
</code> 在正则表达式中引用“组 1”,因此我们<em>提取</em> 组中包含的任何内容,然后<em>替换</em> 整个匹配(整个原始值)与组的内容。</p>
<p>如果您希望两者的表达式相同,您可以指定一个包含两个组的表达式,并将其替换为一个属性的 <code>
和另一个属性的 </code>。</p>
<p>刚才本地环境中运行的输出:</p>
<pre><code>--------------------------------------------------
Standard FlowFile Attributes
Key: 'entryDate'
Value: 'Wed Oct 07 10:37:39 PDT 2020'
Key: 'lineageStartDate'
Value: 'Wed Oct 07 10:37:39 PDT 2020'
Key: 'fileSize'
Value: '0'
FlowFile Attribute Map Content
Key: 'absolute.path'
Value: 'C:\Users_SEG19'
Key: 'filename'
Value: 'b16c325e-6d21-4d54-82f6-971c47152d63'
Key: 'path'
Value: './'
Key: 'time'
Value: '01_SEG'
Key: 'uuid'
Value: 'b16c325e-6d21-4d54-82f6-971c47152d63'
Key: 'year'
Value: '2019'
--------------------------------------------------
如何在 Apache Nifi 中提取名称目录? 我想从流文件的 'absolute-path' 属性中提取名称,并将其保存为同一流文件的属性。
例如:absolute.path 的值为“C:\Users_SEG19” 并将它们放入新属性中,例如:year= 2019, time=01_SEG
我尝试使用“UpdateAttribute”中的 replaceAll 函数从“absolute.path”中提取信息,但无法识别带有 () 的我组。我不知道如何在 NiFi 中操作正则表达式中的组和 NiFi 中的属性。 例如,我想删除目录的最后两个名称,但是没有用。
${'absolute.path':replaceAll('(\[0-9]{2}_SEG)(\([0-9]{4}\/)$)','')}
这个表达式适用于任何 Java 正则表达式,但这里不行。 如果我尝试这样的事情:
time = ${"absolute.path":replaceFirst(".*\(.*)\\d{4}", "")}
有如下错误: Error
UpdateAttribute
processor allows arbitrary new/existing attributes to have values assigned from regular expression parsing 通过其他属性的表达式语言。您的场景示例:
现有属性absolute.path = "C:\Users_SEG19"
为以下项添加动态属性:
- 时间 =
${"absolute.path":replaceFirst(".+\\(\w+)\\\d{4}", "")}
- 年 =
${"absolute.path":replaceFirst(".*(\d{4})$", "")}
生成的流文件将具有以下属性:
- absolute.path = "C:\Users_SEG19"
- 时间 = "01_SEG"
- 年份 = "2019"
表达式中属性 absolute.path 周围的额外引号是因为它包含一个 .
字符。
更新
由于 Windows 斜杠的方向,斜杠转义需要加倍。
</code> 在正则表达式中引用“组 1”,因此我们<em>提取</em> 组中包含的任何内容,然后<em>替换</em> 整个匹配(整个原始值)与组的内容。</p>
<p>如果您希望两者的表达式相同,您可以指定一个包含两个组的表达式,并将其替换为一个属性的 <code>
和另一个属性的 </code>。</p>
<p>刚才本地环境中运行的输出:</p>
<pre><code>--------------------------------------------------
Standard FlowFile Attributes
Key: 'entryDate'
Value: 'Wed Oct 07 10:37:39 PDT 2020'
Key: 'lineageStartDate'
Value: 'Wed Oct 07 10:37:39 PDT 2020'
Key: 'fileSize'
Value: '0'
FlowFile Attribute Map Content
Key: 'absolute.path'
Value: 'C:\Users_SEG19'
Key: 'filename'
Value: 'b16c325e-6d21-4d54-82f6-971c47152d63'
Key: 'path'
Value: './'
Key: 'time'
Value: '01_SEG'
Key: 'uuid'
Value: 'b16c325e-6d21-4d54-82f6-971c47152d63'
Key: 'year'
Value: '2019'
--------------------------------------------------