¡Jueves! Y seguimos con la serie de SSIS. Después de los dos últimos post en los que hemos visto como crear paquetes, su secuenciación y auditoria, en el post de hoy vamos a trabajar con archivos en vez de SQL. ¿Preparados? Vamos a ello.

En muchas ocasiones, los datos nos los encontramos en archivos planos, ya sean .csv o .txt. Creerme que hoy es el día en que el traspaso de información entre sistemas se realiza en estos formatos.

Hasta ahora, nos hemos conectado y extraído información de una base de datos SQL. Ahora, como ha variado nuestro origen, ¿qué debemos hacer lo primero?... Crear un nuevo paquete y crear una conexión al archivo ya que hasta ahora usábamos la conexión a la BDD. Para ello:

 


Y le asignamos el nombre “Carga_Dim_Divisas_CSV”: 

 

Y que ahora creamos la conexión al archivo CSV, para ello sobre el panel de conexiones hacemos click con el botón derecho sobre el lienzo blanco y hacemos click sobre “New Flat File Connection..” 

 

En la ventana que se nos ha abierto, le asignamos el nombre que queremos y una descripción, de manera que nuestros yoes del futuro no se acuerden de nosotros cuando tengan que modificar el proyecto J

En este caso, le he asignado el nombre Conexión_CSV. Una vez asignados los nombres, pulsamos sobre Examinar, y buscamos el archivo deseado:

 
A continuación, hacemos click en Vista Previa para ver una previsualización del archivo que acabamos de seleccionar: 

 

Podemos ver que los nombres de la columna nos vienen en la primera fila, por lo que volvemos a la pestaña General y marcamos el check “Nombre de columna de la primera fila de datos”. 

 
 En la opción de Columnas, dejamos que Visual Studio defina automáticamente la estructura de la tabla pero si observamos la estructura, nos da una pista de los datos de la tabla que queremos cargar:

 

 Ahora vamos a la opción Avanzadas, y aquí es donde definimos los tipos de datos que vamos a cargar, así como si longitud. Como consejo, aquí definiría un ancho grande de manera que podamos cargar todo y luego en la definición a la tabla del DWH, definimos el tipo de datos. Para ello seleccionamos todas las columnas y la opción OutputColumnWidth establecemos 2000: 

 

Y con esto acabamos de configurar la conexión, para verificar que lo hemos hecho correctamente hacemos click sobre Vista Previa y vemos la previsualización de los datos.

Una vez configurada la conexión, ¿qué es lo que nos toca ahora? Exactamente, ¡meternos en harina que es lo que nos gusta!

Abrimos el paquete Carga_Dim_Divisas_CSV.dtsx y aquí arrastramos la “Origen de archivo plano” (una diferencia con las tareas que hemos arrastrado hasta ahora).

 
 

Hacemos doble click sobre la tarea para entrar a configurarla. Seleccionamos la conexión que acabamos de crear:

 

 Y para comprobar que estamos cargando los datos correctos y la conexión funciona correctamente le damos click sobre Preview: 

 

Ahora vamos a la opción Columns y vemos que todas las columnas tengan el check marcado y validamos la configuración. 

 

 

Ahora ya tenemos configurado tanto la conexión como el origen de los datos ¿no? Bien, ¿qué nos falta? ¡Bingooo! El destino, ¿hoy estáis atentos?.... A medias porque no hemos renombrado el componente que es lo primero que deberíamos haber hechoJ. Una vez renombrado, continuamos con la configuración de destino, para ello, como nuestro destino sigue siendo nuestro DWH, arrastramos al lienzo el componente “Destino de OLE DB” y le cambiamos el nombre para que no se nos olvide:


 

 
 

Una vez hecho los pasos anteriores, las conectamos:

 

Y ahora procedemos a configurar el componente, para ello lo primero que hacemos es seleccionar la conexión que queremos usar, que en este caso es “Conexión_DWH”:

 

A continuación, seleccionamos la tabla deseada que hemos creada previamente:

 

Ahora vamos a la pestaña de Mappings para asegurarnos de que todas las columnas de origen tienen su columna en destino:

 

Una vez comprobados que las columnas están asociadas correctamente, validamos y volvemos a la pantalla de control de flujo y arrastramos al lienzo el componente “Tarea Flujo de Datos”:

 

 

 Le cambiamos el nombre y ejecutamos el paquete: 

 

Y como podemos ver, nos ha ejecutado correctamente el paquete:

 

Bien, hasta aquí hemos visto como cargar archivos desde un CSV directamente, pero es recomendable para evitar problemas con el tipo de los datos de las columnas, en vez de cargar todos los datos a la tabla del DWH, cargarlas a una tabla intermedia temporal.

Para ello, creamos la tabla temporal a la que queremos cargar los datos, para ello usamos la siguiente sentencia SQL:

 

Una vez creada nuestra tabla temporal, en el diseñador de flujo de control añadimos el componente de Flujo de datos, y lo renombramos: 

Entramos dentro del componente y configuramos el origen de datos de la misma manera que hemos hecho anteriormente modificando el destino, que será la tabla temporal y no la definitiva:
 

 Tal y como se puede ver:
 
 

Una vez realizado el paso de carga de datos a la tabla temporal, tenemos que hacer la carga a la tabla definitiva. Para ello, sobre el diseñador de control de flujo, arrastramos el componente de “Tarea de flujo”, lo renombramos y lo unimos al de Carga_Dim_Divisas_Temp:


A continuación, accedemos a la configuración del componente Carga_Dim_Divisas, arrastramos el componente de Origen de datos OLE DB y asignamos el nombre:
 

 

Ahora pasamos a su configuración, para ello hacemos doble click sobre el componente y en la sección de Connection Manager seleccionamos la conexión de proyecto “Conexión_DWH” y en “Data Access Mode” escribimos la siguiente sentencia SQL:

 

Añadir que también podemos hacer que Visual Studio nos genere la consulta, para eso hacemos click sobre Build Query. Seleccionamos la tabla sobre la que queremos realizar la consulta, marcamos las columnas que queremos y automáticamente se nos genera la consulta:

 

A continuación, lo que tenemos que hacer es la conversión de los datos con el formato de destino, ya que como habréis podido ver hemos creado la tabla temporal con una configuración genérica. Para eso, lo que hacemos es arrastrar al lienzo del diseñador el componente “Conversión de datos”. Una vez arrastrado, lo unimos con el componente anterior:

 

Abrimos el componente de conversión de datos y en este punto es donde configuramos las transformaciones del tipo de datos que queremos aplicar. Para ello seleccionamos las columnas que queremos: 


 Y procedemos a modificar el nombre de salida como el tipo de dato y su longitud:

 
Una vez hecho, procedemos a configurar el destino de la información para ello, extraemos al lienzo el Destino OLE DB: 


Lo unimos al componente anterior, y configuramos el componente de destino con la conexión correcta y la tabla de destino: 

 
Y en la pestaña de Mappings tenemos que asociar las columnas de transformación a las columnas de destino:

 

Y procedemos a ejecutar el paquete... a ver qué pasa… J:

 

¡Tachan! Hemos procedido a la extracción de un archivo .csv y la carga a una tabla temporal para su posterior carga a la tabla DWH.

Y con esto es suficiente por hoy y reservamos para la siguiente semana el trabajar con varios ficheros.

¡Nos vemos en los datos!