Supongamos que tenemos un conjunto de ficheros que se han generado con un programa que exporta los datos de las columnas con un tamaño fijo. Por ejemplo un programa que exporta los siguientes cuatro campos
Cada registro será de la siguiente forma
La cuestión es cómo usar NiFi para procesar estos ficheros. Si buscamos en internet la forma clásica de hacerlo es usando un replaceText (linea a linea) para convertir los ficheros en csv separados por punto y coma (;)
Pero existe otra manera de mapear estos ficheros usando expresiones GROK y así poder usar directamente un ConvertRecord sin necesidad de realizar un tratamiento previo del fichero de texto. Para ello haremos lo siguiente
Para el caso que nos ocupa el fichero de pattern será
FECHA_ALTA .{8} ESTADO_CIVIL .{1} EDAD .{2} GENERO .{1}
FILA %{FECHA_ALTA:fecha_alta}%{ESTADO_CIVIL:estado_civil}%{EDAD:edad}%{GENERO:genero}
Una vez tenemos el fichero de pattern podremos configurar el RecordReader tipo Grok para que haga uso de este pattern y poder procesar el fichero en entrada directamente a un Record
Una vez configurado podemos poner en marcha el proceso y ver que los records se generan correctamente
Vemos que se añaden dos campos extra, uno (_raw) que contiene el registro antes de su procesado y otro (stackTrace) que contendrá la información relacionada con los posibles fallos que se puedan producir al procesar cada linea del fichero.
Dejo aquí una template de ejemplo con un flujo de prueba basado en lo explicado en este post