04 julio 2015

Filas de Longitud Variable - Flat File

Un archivo plano de filas de longitud variable es un archivo de origen de texto. Puede ser un archivo de valores separados por coma (CSV) o un archivo delimitado por tabuladores (TDF). Puede ser un archivo de longitud fija donde las columnas son identificadas por posición o por ordinales. La principal diferencia entre un archivo plano "normal" y un archivo plano de filas de longitud variable es que el número de posiciones de texto es fijado en un archivo plano normal y ese número puede cambiar con cada fila en un archivo plano de longitud variable.
Veamos un ejemplo de un archivo plano de longitud variable (FilasLonVar.csv)
TipoRegistro,Nombre1,Valor1,Nombre2,Valor2,Nombre3,Valor3
A,Varios Uno,11
B,Varios Dos,22,Varios Dos A,23
C,Varios Tres,33,Varios Tres A,34,Varios Tres B,345
A,Varios Cuatro,44
C,Varios Cinco,55,Varios Cinco A,56,Varios Cinco B,567
B,Varios Seis,66,Varios Seis A,67
Hay siete columnas posibles: TipoRegistro, Nombre1, Valor1, Nombre2, Valor2, Nombre3, Valor3. No todas las filas contienen siete valores. De hecho, la primera fila contiene sólo tres valores:
A, Varios Uno,11
En este formato, el TipoRegistro está en la primera columna y esto indica cuántas columnas de datos se esperan en la fila. Las filas de TipoRegistro A contienen tres valores, las filas de TipoRegistro B contienen cinco valores, y las de TipoRegistro C contienen siete valores.

Leyendo un Data Flow

Es típico cargar los datos desde un archivo plano en un Data Flow SSIS usando un administrador de conexión Flat File. Caminaremos a través de la configuración de un administrador de conexión Flat File para este archivo.
Para empezar, agregue un nuevo paquete SSIS llamado FilasLongitudVariable.dtsx a su proyecto SSIS. Agregue una tarea Data Flow al Control Flow y abra el Editor Data Flow (Pestaña). Arrastre un adaptador de origen Flat File en la superficie de la tarea Data Flow y abra su editor. Haga clic en el botón New para crear un nuevo administrador de conexión Flat File.
Nombré a su administrador de conexión Flat File Archivo Longitud Variable. Crear un archivo de texto con los datos del ejemplo anterior y llámelo FilasLonVar.csv. Guarde y navegue a esa ubicación para la propiedad File Name. También marque la casilla de verificación Column Names in the First Data Row. Cuando hago clic en la página Columns, el Flat File Connection Manager Editor aparece como se muestra en la figura siguiente.
 
Este comportamiento es diferente de las ediciones anteriores de SSIS. En versiones anteriores, el administrador de conexión Flat File lanzaría un error.

Tipos de registros Splitting

Gracias a la nueva funcionalidad en la versión SSIS 2014 del administrador de conexión Flat File, tenemos todos los datos entrando como filas separadas. Pero las filas de datos contienen información de diferentes tipos. Las filas necesitan ser filtradas basadas en el tipo de registro. Ahora necesitamos analizar los datos como fluyen a través de la tarea Data Flow. Hay un par de maneras de abordar esto, pero lo veremos con la transformación División Condicional.
Arrastre una transformación División Condicional en la superficie de la tarea Data Flow y conectar una ruta de flujo de datos desde el adaptador de origen Flat File a la División Condicional. Abra el editor de la transformación. En la columna Output Name de la grilla, introduzca TipoA. En la correspondiente Condition, arrastrar (o escribir) la columna TipoRegistro, agregando el texto =="A" (note que "A" está entre comillas dobles). Repita esto para cada tipo de registro, =="B" y =="C", como es mostrado en la figura siguiente.
 
Haga clic en el botón OK para cerrar el Conditional Split Transformation Editor. Es importante notar que esto habría requerido un componente Script en versiones anteriores de SSIS porque el administrador de conexión Flat File en las versiones anteriores no podría analizar los archivos que contienen filas con un número variable de columnas.

Terminando el Flujo

Puede utilizar varios componentes de flujo de datos para terminar una ruta de flujo de datos. En un entorno de producción, esto sería probablemente un adaptador destino OLE DB. En un entorno de desarrollo o prueba, es posible que desee terminar con un componente que no requiera conectividad de base de datos o la creación de objetos de base de datos, en este caso usaremos destinos Flat Files.
Puede usar cualquier componente que no requiera de configuración para ejecutarse y tener éxito en la tarea Data Flow, tales como una transformación Columna Derivada o Multidifusión. Aquí, utilizará transformaciones Multicast para terminar el flujo de la ruta Data Flow.
Arrastre tres transformaciones Multicast en la superficie de la tarea Data Flow. Conecte una salida de la transformación Conditional Split a la Multicast TipoA. Cuando se le solicite, seleccione el búfer de salida TipoA en la ventana Input Output Selection, como se muestra en la figura siguiente.
 
Repita este proceso para las conexiones TipoB y TipoC. Cuando haya terminado, su flujo de datos podría aparecer como se muestra en la figura siguiente.
 
Primero crearemos 3 archivos planos vacíos en nuestro directorio con el blog de notas, los podemos llamar DestinoA.csv, DestinoB.csv y DestinoC.csv.
Arrastre un destino de Archivo Plano a la superficie de la tarea Data Flow. Conecte la salida de la transformación Multidifusión al destino de Archivo Plano; editamos el destino Flat File, lo llamamos DestinoA y cargamos el archivo DestinoA.csv del directorio.
De la misma forma arrastramos dos destinos Flat File para el DestinoB y DestinoC y los configuramos adecuadamente.
La figura siguiente nos muestra cómo se mostrará.
 
Vamos a ejecutarlo, la ejecución debería tener éxito, y cuando lo hace, los resultados serán marcados en verde como se ve en la figura siguiente.
 

La siguiente figura nos muestra el resultado del archivo de texto DestinoA.csv.

1 comentarios:

Narcizo dijo...

Una solución inherente a SSIS 2014, que nos permite cargar filas de longitud variables y separarlas en archivos individuales. Espero les sea de utilidad.