¡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:
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”.
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:
datos de la misma manera que hemos hecho anteriormente modificando el destino,
que será la tabla temporal y no la definitiva:
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:
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:
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:
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.
¡Nos vemos en los datos!