En el diseño de data warehouses el tratamiento de datos históricos es uno de los aspectos complejos y que admiten más variantes. No importa cuántas modificaciones en los diseños hayamos visto, siempre habrá un modelo de datos diferente que requiera de nuevas aproximaciones.

Uno de los escenarios más comunes es el tratamiento de miembros versionados (historificados) en dimensiones, las conocidas como Slowly Changing Dimensions (SCD). En los casos de Tipo 0 ó 1 no tenemos necesidad de preocuparnos por las diferentes versiones, simplemente no actualizaremos (en el caso de las Tipo 0) o haremos una actualización simple (en el caso de las Tipo 1)

Sin embargo, a partir del Tipo 2 tendremos que lidiar con historificación y versiones de nuestros miembros. Uno de los métodos más habituales es el de controlar dichas versiones con campos extra para marcar el inicio y el fin de la versión en el tiempo. Esto es, el rango de tiempo en el que una versión determinada del miembro fue válida.

En este caso nuestro objetivo es que los hechos estén asociados a la versión del miembro correspondiente. Para ello, el miembro que escojamos para asociar al hecho deberá ser aquel que esté entre las fechas de inicio y fin de cierta versión. Si la versión es la última disponible se suele dejar el campo de fecha de fin con el valor NULL para indicar que aún no ha llegado a su fin.

Hasta ahora, para tratar este escenario en Integration Services teníamos varias opciones:

  1. Usar un Lookup en modo partial caché o no caché y modificando la consulta
  2. Usar un Merge Join + un Conditional Split para elegir el miembro adecuado para cada línea de hechos
  3. Usar un Script Component que cargue la tabla de referencia (la dimensión) en memoria y evalúe la condición de pertenencia al rango temporal mediante código .Net

En estos posts excluiremos la opción número 3, dado que es mucho más compleja a nivel de desarrollo y queda fuera del ámbito de la serie.

Asumiendo que nuestras dimensiones se encuentran en una instancia de SQL Server, a partir de la versión SQL Server 2014 (codename Hekaton) podemos plantear una opción extra que alivia ciertas limitaciones de las anteriores: usar un Lookup en modo partial caché o no caché, modificando la consulta y usando una tabla en memoria para almacenar la dimensión. 

Compararemos sus ventajas y desventajas, tanto a nivel de desarrollo como de rendimiento, y finalmente expondremos la alternativa que aparece en SQL Server 2014. Para todos los ejemplos usaremos como ejemplo Adventure Works DW 2012 con las modificaciones necesarias para aprovechar las funcionalidades extra

Lookup en modo partial o no-caché

 

 

Merge Join + Conditional Split

0 Shares:
1 comment
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like

Un paseo por Azure ML Services 

Azure ML y sus recursos han expandido enormemente las posibilidades para los desarrolladores de Machine Learning y los Científicos de Datos para obtener datos, analizarlos, entrenar modelos y publicarlos. Acompañame en éste artículo para conocer los elementos básicos y saber cómo puedes aprovechar la potencia de Azure para tus desarrollos ML.

SQL Server 2017 en Linux

Vale, SQL Server 2017 corre en Linux, ¿me interesa? Sí, ¿por qué? Porque no hablamos simplemente de que corra un nuevo sistema operativo...sino que se pueden utilizar para despliegues rápidos en entornos escalables basados en docker, kubernetes, etc. Daremos un repaso a cómo aprovecharnos de los nuevos escenarios de despliegue en nuestras empresas, aunque sean tradicionalmente entornos Microsoft.