Implementación de un DWH: creación de objetos

06 Nov, 2015
Por Edgar Barrios
 
Continuando con el ejemplo de implementación de un DWH, ahora vamos entrar en detalle con los objetos que se deben crear en la base de datos que contendrá el DWH. Para un mejor entendimiento de lo expuesto en este artículo, se recomienda ver primero el artículo Fuentes de datos y área de staging en un Data Warehouse (DWH).
 
Lo primero es identificar el tipo de modelo a implementar, de los cuales tenemos el modelo estrella y el modelo copo de nieve, para entender un poco de que se trata a continuación se presenta una breve definición y las diferencias existentes entre ellos:
 
       Estrella: Desnormaliza las dimensiones.
 
 
       Copo de nieve: Normaliza las dimensiones.
 
 
Tabla Comparativa Modelo Estrella Vs Modelo Copo de Nieve
 
 
Dadas las razones expuestas en la tabla anterior, lo más recomendable es siempre usar el modelo estrella.  Sin embargo, dependiendo de las necesidades el usuario puede usar el que desee.
 
Para nuestro ejemplo el modelo a utilizar es el modelo estrella, el cual se puede observar en la siguiente imagen:
 
A continuación se muestran las tablas que se deben crear:
 


Dim_Sales_Rep: en esta tabla se encuentra la data de los vendedores, y prácticamente es la misma información que tenemos en el Staging en la tabla STA_Sales_Rep, con la excepción del campo surrogate key (SK), que no es más que una clave numérica que se usará en esta tabla como el primary key.

 
Dim_Customer: en esta tabla se encuentra la data de los clientes, y es exactamente la misma data de la tabla STA_Customer con la excepción de que esta tabla tendrá el surrogate key como PK.
 
Dim_Date: en esta tabla se encuentra exactamente la misma data que en la tabla STA_Date del Staging.
 
Dim_Product: en esta tabla se encuentra la misma data que se encuentra en la tabla STA_Product, pero aquí existirá el campo surrogate key.
 
Fact_Sales: esta será la tabla de la fact, Aquí estarán los SKs de las tablas de dimensión, excepto la tabla Dim_Date que en su lugar tendrá un campo con la clave de la tabla Dim_Date y los campos de las medidas, que en este caso serán: las cantidades vendidas y el monto de la venta
 
Se deben crear las claves primarias para las tablas de dimensión y definir índices tanto para las tablas de dimensión como para las tablas fact.
Ya pudimos ver cuáles son las áreas involucradas en un DWH, ahora vamos ver a manera de resumen los pasos a seguir para ejecutar el proceso de Extracción, Transformación y Carga (ETL por sus siglas en inglés) del DWH:

       Crear las tablas en el área de Staging (planas y de dimensión) y en el DWH con sus respectivas primary keys. La tabla de la Fact en el DWH debe ser particionada. Generalmente dicho particionado se hace por el año.
       Crear los índices que puedan ser necesarios.
       Crear en la herramienta para desarrollar el ETL los procesos para cargar las tablas planas desde la fuente hasta el Staging. Es importante que a estas tablas se les haga un TRUNCATE antes de insertar la información que viene de la fuente.
       Es importante solo traerse las columnas y filas necesarias.
       Llenar en el ETL las tablas de las dimensiones en el Staging.  En  caso que alguno de los queries para el llenado de las dimensiones sea muy lento, crear los índices necesarios para optimizarlos. Es importante recordar que en estas tablas NO deben estar los surrogates keys.
       Llenar la tabla STA_Date, construyendo para esto o bien un Store Procedure o un desarrollo en el ETL que se encargue de llenar dicha tabla.
       Llenar las dimensiones en el DWH con un proceso del ETL usando como fuente las dimensiones ya calculadas en el Staging.  Estas tablas son casi iguales a las que están en el Staging con la excepción  del surrogate key, que debe ser el primary key de las dimensiones.
       Desarrollar los procesos para cargar las medidas en la fact en el ETL.  En caso de que alguno de los queries creados para llenar las medidas de la fact sea muy lento, crear los índices necesarios para optimizarlos.
       Crear un proceso automático que ejecute los procesos del ETL en el orden mencionado con la frecuencia requerida de carga (diario, mensual, etc).