jueves, 10 de julio de 2008

Integration Services - Uso de Look Up como Slowly Changing Dimension

En este post voy ha hablar de un uso que se le puede dar al componente Lookup (LKP) que me parece muy interesante y útil. Me he decidido a escribirlo porqué me ha servido de solución en muchas ocasiones y en los últimos días ha ayudado a mis compañeros de trabajo en sus proyectos.

El uso más típico del componente LKP de SSIS es para añadir datos de una tabla a los datos que estamos tratando en un flujo dentro de un Data Flow Task (DFT) en una relación 1 a 1, en otras palabras, al hacer una JOIN. Esto, unido a las diferentes posibilidades de gestión de errores que tiene el componente, nos permite hacer una gestión de valores muy completa.

Pero hay una posibilidad de utilizar este componente que me parece más interesante, y es como sustituto del componente Slowly Changing Dimension (SCD).

Yo personalmete le veo dos situaciones en las que es mejor utilizar el LKP en vez del SCD:
  • En la primera realmente no es una alternativa, sino que el SCD no funciona, y esta solución te saca del apuro. Es la situación en la que la Business Key de la tabla de destino del DFT es un Identity, cosa que el SCD no acepta. En este caso el LKP nos daría la funcionalidad que buscamos.
  • El segundo caso es en el que busquemos un procesamiento de datos más rápido, ya que fijando la cache del DFT podemos obtener un mejor rendimiento que el del SCD para volumenes de datos elevados.
Para poder hacer este uso del LKP es muy sencillo, simplemente hemos de aprovechar la gestión de errores del LKP para detectar que filas de las que nos llegan no estan en la tabla de destino y portanto hemos de insertar, y cuales hemos de tratar como existentes, y por tanto darles un trato de actualización.

La configuración del LKP es sencilla, veamosló paso a paso:
  • Paso 1: Indicar que la tabla con la que relacionar el flujo de datos que recibimos en el LKP es la de destino del proceso (igual que si aplicaramos SCD).
  • Paso 2: Indicar que queremos relacionar la tabla de destino y el flujo de datos mediante la Primary Key de la tabla de destino.
  • Paso 3: Configurar la salida de error, indicando que en caso de no encontrar coincidencia redireccione la fila erronea por la salida de error.

  • Paso 4: Crear un OLDB Destination cuya tabla sea la de destino del proceso y conectarlo con la salida de error del LKP. Esto hará que cuando el LKP no detecte coincidencia de Primary Key derive por la salida de error la fila "erronea", haciendo la misma función que la salida de New del SCD.

  • Paso 5: Crear un OLDB Command, construir la consulta SQL de update y conectarlo con la salida del LKP. De esta manera toda fila cuya Primary Key coincida con una existente en la tabla de destino irá por la salida normal del LKP e irá al OLDB Command de actualización, haciendo la misma función que la salida de actualización del SCD. En este punto podemos darle toda la funcionalidad que queramos a base de conectar OLDB Commands, pudiendo crear, por ejemplo, la misma funcionalidad que la salida Historical del SCD.

Con estos simples pasos ya tenemos un nuevo uso para el LKP. ¡Espero que os resulte tan útil como a mi!

1 comentario:

Luis dijo...

MAN seria genial que coloques un caso puntual como ejemplo con pantalla de lookup entre las dos tablas el tipo de dato tiene que ser el mismo