10 junio 2009

Implementando dimensiones SCD2 con SQL Integration Services (SSIS)

Desde hace un par de semanas he estado envuelto en una nueva iniciativa de Microsoft llamada SnackTI, la cual busca crear nuevo contenido y de alta calidad, relevante para estos tiempos de nuevos retos.

De acuerdo a esto me animé a contribuir en el área de Business Intelligence y lo siguiente fue pensar en qué tema escoger. Como ven el título de este post, me decidí por mostrar algunas mejores prácticas de cómo implementar “dimensiones lentamente cambiantes” ó slowly changing dimensions (SCD2), ya que en mis primeros años trabajando con Data Warehouses, este fue uno de los temas más interesantes, no sólo por el concepto en si, sino en buscar una forma optima de implementarlas en SSIS.

Por ello he creado una serie de screencasts (casi 90 minutos en total) que muestran en detalle dos formas de implementar dimensiones SCD2. Al final tuve que partir los screencast en varios videos de aproximadamente 10 minutos cada uno para poder publicarlos en YouTube.

Implementando SCD2 con SSIS - Parte I

En esta primera parte explico el problema que busca atacar el uso de SCD2 y explico cómo funciona su procesamiento de manera lógica. El demo de esta parte presenta la forma de implementar un paquete de SSIS para manejo de SCD2 usando el SCD Transformation, el componente “out ot the box” que viene en SSIS para implementar este tipo de casos.

Implementando SCD2 con SSIS - Parte II

La segunda parte se enfoca en demostrar una forma alternativa (y sugerida) de implementar el manejo de SCD2 para dimensiones con “muchos” miembros de datos y de esa forma bajar los tiempos de ejecución del paquete versus el SCD Transformation. La forma alternativa (personalizada) usa básicamente el Merge y Split Transformation para el manejo de la discriminante que decide si el miembro en proceso es una actualización o una inserción, y; una tabla temporal y un SQL Transformation para la ejecución de la actualización en batch (por lotes) en la base de datos.

 

 

Incluyo a continuación una comparación entre los tiempos de ejecución de la primera y segunda carga de las dos formas la cual resumo a continuación:

  SCD Transformation SCD Personalizado
Primera carga

20.732 Sec.

0.999 Sec.

Segunda carga

1:04:756 Min.

1.248 Sec.


Los resultados salen a la vista. La opción personalizada es mucho más rápida en el procesamiento. Cabe resaltar que no se aplicó ninguna optimización adicional al uso directo de los paquetes..

Pueden descargar ambas versiones de los paquetes, los archivos de backup de las 2 bases de datos usadas (SQL 2008) y la  versión PDF de la presentación, desde aquí:

No olviden truncar la tabla DimCustomer en la base de datos SCDDemo_DW cuando empiecen a hacer sus pruebas.

Alan.