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:
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.
Publicar un comentario