es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  

Answer

  1. Avatar for 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:

    SplitText -> UpdateAttribute -> (siguiente procesador)
    

    En el procesador UpdateAttribute, definirías una nueva propiedad con la expresión ${month:toNumber():minus(2)}, donde month es el nombre del atributo del mes creado por el procesador SplitText. La función toNumber() convierte la cadena del mes a un valor numérico para que se pueda aplicar la función minus().

    Este enfoque debería lograr el resultado deseado sin depender de expresiones anidadas.

Comments are closed.