2014/04/24

CARGANDO ARCHIVOS CON DIFERENTE CANTIDAD DE COLUMNAS CON SSIS

Hola, en esta entrega les mostraré una de las formas para poder cargar la información contenida en archivos planos pero que no contienen la misma cantidad de columnas, utilizando Integration Services.

Para comenzar, les mostraré los archivos que como podemos observar no contienen la misma cantidad de columnas:
En un post anterior ( CARGAR ARCHIVOS CON INTEGRATION SERVICES ) ya explique como podemos cargar varios archivos, utilizando el mismo paquete podemos hacer unas pequeñas modificaciones, si nosotros mantenemos la conexión al archivo actual, obtendremos algo similar a lo siguiente donde podemos observar que el archivo en sus filas contiene un número variable de columnas:

Lo que necesitamos hacer a continuación es, en el apartado Advanced borrar las columnas y definir solo una de un tamaño considerable para poder leer la línea completa como se muestra en la imagen:

En nuestro Flat File Source ya no veremos todas las columnas declaradas en el Flat File Connection Manager, porque las hemos eliminado y en su lugar solo definimos una sola columna.

Posteriormente necesitamos agregar un objeto Script Component que es indispensable para completar nuestro objetivo.
Hacemos doble click y en el apartado Input Columns seleccionamos la que declaramos previamente, en el caso del ejemplo línea, después en el apartado Inputs and Outputs Columns, del lado derecho en Ouput Columns debemos agregar las columnas que consideramos nuestros archivos traerán en su contenido, para el caso del ejemplo, agregué 11 columnas de tipo DT_STR y longitud 50.
En el mismo Script Transformation Editor, pero en el apartado Script daremos click en Edit Script…  y se abrirá la ventana para agregar el código que se muestra.
public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        char[] delimitador = { '|' };
        string[] columnas;
        columnas = Row.linea.Split(delimitador);
        try
        {
            Row.Column0 = columnas.Length > 0 ? columnas[0] : null;
            Row.Column1 = columnas.Length > 1 ? columnas[1] : null;
            Row.Column2 = columnas.Length > 2 ? columnas[2] : null;
            Row.Column3 = columnas.Length > 3 ? columnas[3] : null;
            Row.Column4 = columnas.Length > 4 ? columnas[4] : null;
            Row.Column5 = columnas.Length > 5 ? columnas[5] : null;
            Row.Column6 = columnas.Length > 6 ? columnas[6] : null;
            Row.Column7 = columnas.Length > 7 ? columnas[7] : null;
            Row.Column8 = columnas.Length > 8 ? columnas[8] : null;
            Row.Column9 = columnas.Length > 9 ? columnas[9] : null;
            Row.Column10 = columnas.Length > 10 ? columnas[10] : null; 
        }
        catch (Exception e)
        { }
    }
Ahora solo en nuestro destino, necesitamos tener en nuestra tabla la misma cantidad de columnas que declaramos, de preferencia con el mismo nombre para que automáticamente se liguen como en la imagen y como podemos observar la columna línea no se liga con ninguna columna en el destino.
Corremos nuestro paquete y al momento de consultar nuestra tabla, podremos observar que en algunas columnas el contenido es NULL, para el caso del ejemplo o el valor que hayamos indicado en la edición del Script.
Espero que les sirva de ayuda y cualquier duda o comentario será respondido a la brevedad posible.

SALUDOS.
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario