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.

Apache Nifi: Actualizar Registro – Verificar null y reemplazar con otro parámetro

Estoy utilizando Apache Nifi para el trabajo de ETL. En mi estructura de datos, debido a datos heredados, algunos campos están vacíos o nulos. Quiero completarlos con datos lógicos. Los datos son los siguientes:

[
  {
    "id": 1234,
    "business_date": "2021-11-30",
    "order_date_time": "2021-11-30 12:10:45"
  },
  {
    "id": 1,
    "business_date": null,
    "order_date_time": "2009-10-12 01:02:03"
  },
  {
    "id": 2,
    "business_date": "",
    "order_date_time": "2007-01-02 03:04:05"
  }
]

El resultado final debería ser el siguiente:

[
  {
    "id": 1234,
    "business_date": "2021-11-30",
    "order_date_time": "2021-11-30 12:10:45"
  },
  {
    "id": 1,
    "business_date": "2009-10-12",
    "order_date_time": "2009-10-12 01:02:03"
  },
  {
    "id": 2,
    "business_date": "2007-01-02",
    "order_date_time": "2007-01-02 03:04:05"
  }
]

Por lo tanto, basado en order_date_time, necesito derivar business_date si está vacío o nulo.

He leído a través de https://nifi.apache.org/docs/nifi-docs/html/record-path-guide.html
Todo es independiente y no puedo construir una solución.

Usando el procesador UpdateRecord con los siguientes detalles:

/business_date --> ${field.value:isEmpty():format(/order_date_time, "YYYY-mm-dd")}

Pero esto no parece funcionar.

¿Alguien puede enseñarme cómo se puede hacer esto?

Tags:  

Answer

  1. Avatar for davy.ai

    Para poblar campos vacíos o nulos en Apache NiFi utilizando el procesador UpdateRecord, puedes utilizar la siguiente configuración:

    1. Añade un procesador UpdateRecord a tu flujo de NiFi.
    2. Configura el Lector de Registros de Entrada y el Escritor de Registros de Salida para leer y escribir datos JSON.
    3. En el procesador UpdateRecord, añade una nueva Propiedad de Valor para establecer el valor del campo business_date utilizando el Lenguaje de Expresiones. Utiliza la siguiente expresión:

    ${field.value:isEmpty():ifElse(${field.value:toDate("yyyy-MM-dd HH:mm:ss"):format("yyyy-MM-dd")}, ${field.value})}

    Esta expresión verifica si el valor del campo está vacío o es nulo. Si lo está, entonces obtiene la fecha de negocio utilizando el order_date_time convirtiéndolo a una fecha y luego formateándolo en el formato yyyy-MM-dd. Si el valor del campo no está vacío, se mantiene el mismo valor del campo.

    1. Configura el Escritor de Registros de Salida para escribir los datos JSON actualizados.

    Con esta configuración, el procesador UpdateRecord debería ser capaz de actualizar el campo business_date con el valor de fecha derivado para los registros donde el campo está vacío o es nulo.

Comments are closed.