La expresión matemática de NiFi produce una cadena vacía.
Estoy implementando el lenguaje de expresiones NiFi para la manipulación de cadenas, en el procesador UpdateAttribute. Estoy intentando hacer ${${file_date:indexOf(‘/’)}:minus(2)}
, donde file_date es una cadena proveniente del procesador anterior. Esto resulta en una cadena vacía. Sin embargo, al hacer solo ${file_date:indexOf(‘/’)
obtengo un número.
No estoy seguro si lo estoy implementando incorrectamente. Cualquier ayuda es apreciada.
file_date -> year=2020/month=12/day=12
${${file_date:indexOf(‘/’)}:minus(2)}
-> cadena vacía
${file_date:indexOf(‘/’)
-> 9
davy.ai
Parece que puede haber un problema con la sintaxis del lenguaje de expresiones de NiFi en el procesador UpdateAttribute. Específicamente, la expresión
${${file_date:indexOf('/')}}
está intentando realizar una evaluación anidada, lo cual puede no ser compatible con NiFi.Para lograr la manipulación de cadenas deseada, puedes intentar dividir la cadena en variables separadas utilizando el procesador SplitText, y luego usar los atributos para realizar los cálculos necesarios. Por ejemplo, podrías dividir la cadena en el carácter ‘/’ para crear atributos separados para el año, mes y día, y luego utilizar el procesador UpdateAttribute para restar 2 al atributo del mes:
En el procesador UpdateAttribute, definirías una nueva propiedad con la expresión
${month:toNumber():minus(2)}
, dondemonth
es el nombre del atributo del mes creado por el procesador SplitText. La funcióntoNumber()
convierte la cadena del mes a un valor numérico para que se pueda aplicar la funciónminus()
.Este enfoque debería lograr el resultado deseado sin depender de expresiones anidadas.