Domando JSON en Apache NiFi
Автор: Gonzalo Cabrera Gutiérrez
Загружено: 2025-10-29
Просмотров: 13
Описание:
La utilidad de utilizar un programa Groovy dentro del procesador *`ExecuteScript`* de Apache NiFi, en lugar de un procesador como `EvaluateJsonPath`, radica principalmente en la *automatización* y la *capacidad de manejar estructuras JSON dinámicas y anidadas* sin necesidad de describir manualmente cada ruta.
Aquí está una explicación clara de esta utilidad, basada en las fuentes proporcionadas:
1. Conversión Automática y Gestión de Claves
En NiFi 2.5, la manera de *convertir automáticamente todas las claves JSON (incluso anidadas)* en atributos es utilizando `ExecuteScript`.
*Evita la descripción manual:* A diferencia de la aproximación donde se obligaría a describir cada llave del JSON (como se implica en su consulta sobre `EvaluateJsonPath`), el script Groovy automatiza este proceso.
*Recorrido y Conversión Total:* El script está diseñado para leer el JSON, recorrer **todas las claves de primer nivel**, y convertir **cada clave en atributo**.
2. Manejo de Estructuras Anidadas (Aplanamiento)
Una de las mayores ventajas del script Groovy es su capacidad para manejar estructuras JSON complejas o anidadas.
*Función Recursiva:* El script emplea una *función recursiva* denominada `flatten` para "aplanar" (flatten) el JSON.
*Gestión de Tipos:* Esta función `flatten` está diseñada para iterar tanto sobre objetos (`Map`) como sobre listas (`List`) dentro del JSON.
*Uso de Prefijos para Anidamiento:* Para claves anidadas (por ejemplo, `contactMedium.telephone.phoneNumber`), el script puede ser extendido para *aplanar el JSON usando prefijos* (por ejemplo, `contact0_phoneNumber`). Esto es crucial cuando no se conoce de antemano la profundidad o la estructura exacta del JSON entrante.
3. Mecánica del Script
El programa Groovy realiza los siguientes pasos clave para lograr esta conversión de manera eficiente:
1. *Lectura y Parsing:* El script primero obtiene el FlowFile (`flowFile = session.get()`) y luego lee el contenido del FlowFile utilizando un `InputStreamCallback`. Posteriormente, utiliza `JsonSlurper().parseText()` para interpretar el contenido como JSON.
2. *Generación de Atributos:* Después de aplanar la estructura, el script guarda los valores en un mapa (`map`). Se asegura de guardar los atributos utilizando el **prefijo `"json_"`**.
3. *Asignación al FlowFile:* Finalmente, el script recorre el mapa de atributos (`attrs`) y asigna cada par clave/valor al FlowFile usando `session.putAttribute(flowFile, k, v)`.
4. *Preservación del Contenido:* Una ventaja adicional es que este script mantiene el contenido original del FlowFile.
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: