Tengo un archivo llamado 'test.abcde.houses.csv' y quiero extraer la subcadena 'abcde' que usaré en mi próximo grupo de procesadores para consultar la base de datos.
Actualmente, estoy usando el grupo updateAttribute Processor para intentar extraer la subcadena.
Este es el código que estoy usando en la sección de valores.
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.'; }Pregunta:
Debe usar NiFi Expression Language, una especie de función de secuencias de comandos propia de NiFi que brinda la capacidad de hacer referencia a atributos, compararlos con otros valores y manipular sus valores. Consulte esta documentación oficial .
El procesador UpdateAttribute se utiliza para actualizar/derivar nuevos/eliminar atributos. Por lo tanto, debe usar el lenguaje de expresión dentro de UpdateAttribute para manipular los atributos.
Ejemplo:
test.abcde.houses.csv : este es su nombre de archivo y si desea extraer la cadena abcde del nombre de archivo, puede usar la función getDelimitedField (función de cadena de lenguaje de expresión) como se muestra a continuación. Si la expresión no se evaluó, el atributo de user tendrá un valor empty/null .
Propiedad: user (si ya está presente, actualice/asigne el valor; de lo contrario, cree un nuevo atributo)
Valor: ${filename:getDelimitedField(2, '.')} ( abcde está en el segundo índice/posición en el valor del atributo de nombre de filename )
Expression Language tiene funciones booleanas, condicionales, de manipulación de cadenas, etc., por lo que puede replicar fácilmente su lógica JS en UpdateAttribute para derivar el valor de atributo deseado.