Está en la página 1de 6

thesolidqjournal business intelligence

Por Salvador Ramos

10

Integration Services:
pieza fundamental en los proyectos de BI (parte 1 de 2)
Un elemento fundamental en un proyecto de BI es el Data Warehouse, lo que implica la existencia de un proceso ETL que lo alimente desde los diferentes orgenes. Para realizar este proceso, SQL Server incluye una herramienta llamada Integration Services (SSIS) que nos ser de gran ayuda para la realizacin de dichos procesos. Daremos un paseo por un proyecto de SSIS comentando las caractersticas ms destacables, haciendo consideraciones de diseo y rendimiento, y mostrando los componentes ms usados.
Introduccin

n primer lugar, quiero aclarar que vamos a abordar este captulo partiendo de que nuestro proyecto de BI se va a realizar con las herramientas que nos proporciona SQL Server concretamente. No quiero que el lector se lleve a engao al ver una perspectiva que considere muy focalizada en herramientas tras leer el captulo. As que lo anticipo en estas primeras lneas, ese es el objetivo, focalizarnos en SQL Server, sus herramientas y mis experiencias con ellas. Si el lector necesita informacin ms conceptual, hay multitud de informacin sobre diseo, construccin y carga de un Data Warehouse. Para ello le recomiendo que lea las publicaciones de dos grandes gurs en esta materia, Ralph Kimball y Bill Inmon. En la mayor parte de los proyectos de BI, tenemos un componente fundamental, que es nuestro Data Warehouse o Data Mart. En l dispondremos de los datos sobre los que se van a centrar las consultas de los usuarios. Tambin va a servir como fuente de datos para la carga de los cubos de Analysis Services y para la explotacin de la informacin desde herramientas de analticas y de reporting. Ahora vamos abordar la realizacin de procesos de ETL utilizando Integration Services, partiendo de la premisa de que nuestros orgenes de datos sern

Figura 1. Arquitectura de BI

bases de datos relacionales (SQL Server, Oracle, MySQL, u otra), y de que contaremos con un Staging Area y con un DataMart, siendo ambas, bases de datos almacenadas en SQL Server. Y aplicando una serie de buenas prcticas que hemos ido recopilando en base a nuestra experiencia Figura 1.

Qu es Integration Services?
Integration Services es una herramienta que apareci con SQL Server 2005, dando un salto radical

The SolidQ Journal, Marzo 2011 www.solidq.com/sqj

11

con respecto a las herramientas proporcionadas por versiones anteriores. Pasemos a incluir la propia definicin que hace el fabricante de ella: Microsoft Integration Services es una plataforma para la creacin de soluciones empresariales de transformaciones de datos e integracin de datos. Integration Services sirve para resolver complejos problemas empresariales mediante la copia o descarga de archivos, el envo de mensajes de correo electrnico como respuesta a eventos, Figura 2. SSIS: un arma de doble filo la actualizacin de almacenamientos de datos, la limpieza y minera de datos, y la administracin de objetos y datos de SQL Server. Los Por ltimo, quiero destacar que este tipo de herrapaquetes pueden funcionar por separado o mientas son muy potentes. Los desarrollos con ellas conjuntamente con otros paquetes para hacer son muy rpidos, y nos permiten crear una gran cantifrente a las complejas necesidades de la dad de procesos en reducidos periodos de tiempo de empresa. Integration Services puede extraer y desarrollo e implantacin. Es muy sencillo crear un transformar datos de muchos orgenes distinnuevo paquete que mueva y transforme datos a un tos, como archivos de datos XML, archivos nuevo destino, luego de ese destino hacer nuevos planos y orgenes de datos relacionales, y, procesos para los cuales sea su origen de datos, y as posteriormente, cargarlos en uno o varios sucesivamente, sin un buen diseo previo del objedestinos. tivo global a conseguir y de las dependencias que se Integration Services contiene un variado convan creando entre ellos. Por ello, considero que esta junto de tareas y transformaciones integradas, herramienta puede ser un arma de doble filo: bien herramientas para la creacin de paquetes y el usada nos puede ayudar tremendamente a generar servicio Integration Services para ejecutar y dichos procesos, coordinar su ejecucin, y manejar administrar los paquetes. Las herramientas grfilas cadenas de dependencia entre ellos. Pero utilizarla cas de Integration Services se pueden usar para sin un previo diseo y anlisis de todo lo anterior, crear soluciones sin escribir una sola lnea de puede crearnos un grave problema, incluso podemos cdigo. Tambin se puede programar el amplio llegar al punto de que el tocar simple proceso puede modelo de objetos de Integration Services para ser muy costoso, por las dependencias e implicaciocrear paquetes mediante programacin y codifines que tiene con otros procesos y que les hara dejar car tareas personalizadas y otros objetos de de funcionar correctamente. En este sentido, creo paquete. que podemos aplicar la famosa frase una imagen vale ms que mil palabrasFigura 2. Como se indica en la definicin anterior, no es Como ha podido comprobar, Integration Servislo una herramienta para ETL, sino que tambin ces es una herramienta muy completa y con muchas tiene una serie de tareas orientadas a la administrafuncionalidades, e incluso con ciertos riesgos si no cin que sern utilizadas por los DBAs. hacemos un uso apropiado de ella.

The SolidQ Journal, Marzo 2011 www.solidq.com/sqj

thesolidqjournal business intelligence

12

Integration Services como herramienta ETL


A partir de este momento nos vamos a centrar en sus caractersticas como herramienta ETL, y ms concretamente en el uso de sus flujos de datos, estudiando el caso particular en el que tanto el origen como el destino son bases de datos relacionales. Vamos a utilizar Integration Services para implementar una serie de procesos de Extraccin, Transformacin, Limpieza y Carga de datos en nuestro DataMart, pasando stos por un rea de Staging.

Carga del Staging Area


Comencemos haciendo una serie de recomendaciones y marcando unas pautas que debemos tener en cuenta cada vez que abordemos una carga de datos, y para las cuales nos ser de gran utilidad disponer de un rea de staging: Mnimo impacto sobre el origen: para conseguir una mxima escalabilidad y para afectar lo mnimo posible al rendimiento de los servidores transaccionales que van a ser nuestros orgenes de datos, debemos consumir de ellos los mnimos recursos posibles, y centrar el consumo de dichos recursos en el servidor que se encarga de realizar los procesos ETL. Trazabilidad del dato: es muy importante saber dnde, cundo y quin ha realizado cada cambio. Para ello deberemos, adems de realizar los propios procesos de extraccin y de obtencin de diferencias entre el origen y el destino, de ir almacenando todos los cambios que nos encontremos, para, en un momento dado, poder seguir la pista de cualquier dato y de los cambios que ha sufrido. Generacin de tablas Delta: siempre es una alternativa mucho ms ptima tener una tabla delta, que tenga registradas las operaciones de insercin, actualizacin y borrado que se han ido produciendo en el origen, y aplicar esos cambios en el destino. Este proceso es mucho ms eficiente, y por supuesto, consume muchos menos recursos en origen y destino, que hacer una lectura de dicho origen, compararlo con el destino, y obtener de ah las diferencias para seguidamente

aplicarlas al destino. Hay ciertos sistemas que ya nos permiten generar este tipo de tablas, pero si no es as en nuestro caso, siempre podemos generarlas en nuestros procesos ETL. Limpieza de datos: otro punto que no debemos olvidar en ningn momento, es que en este tipo de procesos, el objetivo no es solamente traer los datos al destino y hacer ciertas transformaciones. Es muy importante llevar a cabo una serie de tareas de limpieza de datos y deteccin de incoherencias. Si por ejemplo nos encontramos con un cdigo de artculo del que nos llega una venta, pero an no est en nuestro sistema. Si podemos hacer ciertas correcciones sobre datos que

Figura 3: Carga de una tabla en el rea de Staging. Control Flow tenemos la certeza de que no son correctos, o simplemente no entrarlos al destino y dejarlos en algn lugar para que alguien los revise.

Figura 4: ratamiento de filas nuevas y modificadas DataFlow

The SolidQ Journal, Marzo 2011 www.solidq.com/sqj

13

Figura 5: Tratamiento de filas eliminadas - DataFlow Veamos muy brevemente, mediante una serie de imgenes, un ejemplo de carga de una tabla en el rea de Staging. Ver figuras 3, 4, y 5. En este caso, disponemos de una columna en el origen de datos que nos indica la fecha de ltima modificacin realizada en cada fila. Lo cual debemos aprovechar en el diseo de nuestro proceso, leyendo del origen slo las filas que han cambiado desde la ltima ejecucin correcta de dicho proceso. Esto implica que deberemos dividir nuestro proceso en dos bloques, el que se encarga de realizar las inserciones y modificaciones, y el que se encarga de los borrados, con el fin de evitar que considere filas eliminadas en nuestro destino aquellas que no hemos ledo del origen, porque no han sido modificadas desde nuestro ltimo proceso de carga.

res anteriores. Sobre este tema hay varias estrategias, aunque aqu nos vamos a limitar a contar las dos que son utilizadas con mayor frecuencia SCD tipo 1, sobreescribir: es el tipo ms bsico, y consiste simplemente en sobreescribir en la dimensin los cambios producidos en origen, sin dejar ningn tipo de historial de lo ocurrido, slo tendremos la ltima versin. SCD tipo 2, aadir filas: consiste en ir registrando historial de cambios, generando una nueva fila por cada versin de cambios que vaya apareciendo. Para ello hay que aadir unas columnas adicionales que permitan registrar el periodo de vigencia de cada versin y una clave que las identifique (clave subrogada), ya que la clave de origen (clave de negocio) deja de ser nica al repetirse en cada una de las versiones almacenadas. Carga de hechos: Lookups: un proceso de Lookup, consiste en el acceso mediante una clave a una tabla para que nos devuelva otras columnas de dicha tabla para la clave consultada. En el caso de las cargas de las tablas de hechos, como lo que obtenemos del origen son las claves de negocio (por ejemplo el cdigo de artculo vendido), tendremos que acceder mediante un proceso de Lookup a la dimensin Artculo para obtener para cada clave de negocio, su correspondiente clave subrogada acorde al momento temporal en que se produce dicho hecho. Inferred Members: a veces nos llegan claves que hacen referencia a otras tablas, cuya clave no

Carga del DataMart


Antes de adentrarnos en los procesos, vamos a recordar brevemente una serie de conceptos fundamentales que tenemos que tener en cuenta tanto en el diseo de nuestros Data Marts o Data Warehouses, como en la implementacin de los procesos ETL: Carga de dimensiones: SCD (Slowly Changing Dimensions): las dimensiones lentamente cambiantes permiten varias formas de registrar la modificacin de los datos a lo largo del tiempo. Cuando ocurren estos cambios, puede que queramos registrar un historial de cambios o simplemente sobreescribir los valo-

Figura 6: Carga de una tabla de dimensiones ControlFlow

The SolidQ Journal, Marzo 2011 www.solidq.com/sqj

thesolidqjournal business intelligence

14

culo. En ese caso, y para poder tener todas las filas de ventas, debemos crear una fila en la tabla de artculos, slo con los datos que tenemos, y dejarla marcada como pendiente de completar, para que posteriormente, cuando recibamos dicho artculo, completemos las columnas que hemos dejado pendientes. Veamos muy brevemente, mediante una serie de imgenes, un ejemplo de carga de una tabla de dimensiones en el DataMart, a partir de una tabla Delta. Ver figuras 6, pgina 13, 7, y 8. En este caso estamos leyendo los datos de un rea de staging, en la que hemos incluido informacin de cada ejecucin del proceso ETL, con el fin de que si no podemos realizar la carga del DataMart, podamos luego ir haciendo las cargas en el mismo orden que se produjeron en el rea de staging. Tambin hemos dividido el proceso en dos, por un lado las actualizaciones de datos basadas en conjuntos, y por otro lado las inserciones de nuevas filas.

Figura 7: Actualizaciones de la dimensin, aplicando SCD DataFlow

se encuentra en la tabla. Bien por problemas de integridad, o simplemente por la periodicidad que nos llegan los datos de ambas tablas. Por ejemplo, puede que nos llegue una venta de un artculo que no est en nuestra tabla de artculos, bien porque en la base de datos no hay integridad referencial declarativa, o porque tenemos un sistema distribuido y, aunque nos ha llegado la venta, tenemos pendiente que nos llegue el art-

Conclusin
En la columna de este mes hemos visto cmo cargar datos desde un Data Mart en un rea de ensayo utilizando las funciones ms utilizadas en SSIS. Las mejores prcticas para cargar datos deben considerarse durante la etapa de planificacin del diseo del proceso ETL. Lea mi segundo artculo del mes prximo como parte de esta serie.

Acerca del Autor


Salvador Ramos (twitter, blog) Consultor, Formador y Mentor en una amplia variedad de aplicaciones de negocio. Especializado en proyectos de Business Intelligence, bases de datos relacionales y diseo de Data Warehouses utilizando Microsoft SQL Server. Siempre interesado en proyectos de migracin a SQL Server.

Figura 8: Inserciones en la dimensin, tanto filas nuevas como versiones nuevas de filas existentes - DataFlow

The SolidQ Journal, Marzo 2011 www.solidq.com/sqj

Training