如何从 NIFI 中的流文件名称中提取子字符串
How to Extract a substring from a flowfile Name in NIFI
我有一个名为 'test.abcde.houses.csv' 的文件,我想提取子字符串 'abcde',我将在下一个处理器组中使用它来查询数据库。
目前,我正在使用 updateAttribute 处理器组来尝试提取子字符串。
这是我在值部分使用的代码。
var userPattern = java.util.regex.Pattern.compile('(.+?)\.[0-9]{8}-[0-9]{7,9}\..+');
var userMatcher = userPattern.matcher(fileName);
var matchExists = userMatcher.matches();
var user;
var userRemove;
if (matchExists) {
user = userMatcher.group(1);
userRemove = user + ".";
}
else {
throw 'Unable to parse username from file metadata.';
}
问题:
- 这是在 NIFI 中从流文件名中提取子字符串的正确方法吗?
- 我使用的处理器组是否正确?
- 此代码是否适用于 Nifi?
您需要使用 NiFi 表达式语言,这是一种 NiFi 自己的脚本功能,它提供了引用属性、将它们与其他值进行比较以及操纵它们的值的能力。请参考这个official documentation.
UpdateAttribute
处理器用于update/derivenew/delete属性。所以需要使用UpdateAttribute
里面的Expression Language来操作属性。
示例:
test.abcde.houses.csv
- 这是你的文件名,如果你想从文件名中提取 abcde
字符串,那么你可以使用 getDelimitedField
函数(表达式语言字符串函数),如下所示。如果表达式未计算,则 user
属性将具有 empty/null
值。
属性:user
(如果已经存在则 update/assign 值,否则创建新属性)
值:${filename:getDelimitedField(2, '.')}
(abcde
在 filename
属性值中的第二个 index/position)
Expression Language有Boolean, Conditional, String Manipulation等函数,所以你可以很容易的将你的JS逻辑复制到UpdateAttribute
来导出想要的属性值。
我有一个名为 'test.abcde.houses.csv' 的文件,我想提取子字符串 'abcde',我将在下一个处理器组中使用它来查询数据库。
目前,我正在使用 updateAttribute 处理器组来尝试提取子字符串。
这是我在值部分使用的代码。
var userPattern = java.util.regex.Pattern.compile('(.+?)\.[0-9]{8}-[0-9]{7,9}\..+');
var userMatcher = userPattern.matcher(fileName);
var matchExists = userMatcher.matches();
var user;
var userRemove;
if (matchExists) {
user = userMatcher.group(1);
userRemove = user + ".";
}
else {
throw 'Unable to parse username from file metadata.';
}
问题:
- 这是在 NIFI 中从流文件名中提取子字符串的正确方法吗?
- 我使用的处理器组是否正确?
- 此代码是否适用于 Nifi?
您需要使用 NiFi 表达式语言,这是一种 NiFi 自己的脚本功能,它提供了引用属性、将它们与其他值进行比较以及操纵它们的值的能力。请参考这个official documentation.
UpdateAttribute
处理器用于update/derivenew/delete属性。所以需要使用UpdateAttribute
里面的Expression Language来操作属性。
示例:
test.abcde.houses.csv
- 这是你的文件名,如果你想从文件名中提取 abcde
字符串,那么你可以使用 getDelimitedField
函数(表达式语言字符串函数),如下所示。如果表达式未计算,则 user
属性将具有 empty/null
值。
属性:user
(如果已经存在则 update/assign 值,否则创建新属性)
值:${filename:getDelimitedField(2, '.')}
(abcde
在 filename
属性值中的第二个 index/position)
Expression Language有Boolean, Conditional, String Manipulation等函数,所以你可以很容易的将你的JS逻辑复制到UpdateAttribute
来导出想要的属性值。