Está en la página 1de 35

ETL: Extraccin, transformacin y carga en un

DATAWAREHOUSE
Indice

1.- Definir el mbito del proyecto de DW/ETL

2.- Crear una base de datos para el datawarehouse.

3.- Crear tablespaces/usuarios/objetos.

4.- Invocar a los procedimientos para la primera carga del dw.

5.- Invocar a los procedimientos para las cargas de refresco del dw.

6.- Crear objetos adicionales como vistas materializadas en el dw.


1.- Definir el mbito del proyecto de DW/ETL

Para realizar un ejemplo sencillo, voy a trabajar con las siguientes


especificaciones:

Tanto la base de datos operacional (orcl) como el datawarehouse


(dw), van a residir en la misma mquina virtual con Windows 2003
Server. La versin de rdbms que usamos es la 11.2.0.1.0 para
Windows.

Los datos que vamos a analizar, proceden de las tablas del esquema
HR de la base de datos orcl.

Se trata de simular un datawarehouse, con la evolucin de los


salarios de los empleados, leyendo las tablas EMPLOYEES y
DEPARTMENTS.

Para poder leer los datos de orcl desde dw, trabajaremos con un
dblink.

En la base de datos dw, habr dos tablespaces: uno llamado ODS


(operational data store), para guardar tablas intermedias o
temporales y otro llamado DW, con las tablas de
dimensiones/hechos definitivas.

En la base de datos dw, crearemos un usuario llamado dw,


propietario de las tablas del ODS y del DW.
2.- Crear una base de datos para el datawarehouse.

Creamos una base de datos llamada dw, con dbca.


3.- Crear tablespaces/usuarios/objetos.
Estos son los scripts que usaremos en este tutorial, para
crear/cargar/refrescar objetos en el DW. Residen en la carpeta
C:\DW.

Veamos lo que contiene crear_objetos_dw.sql:


Veamos el modelo desde Sql*Developer, con el DataModeler

Estos son los detalles del modelo:


4.- Invocar a los procedimientos para la primera carga del dw.

Comenzamos la primera carga, leyendo las tablas employees y


departments del esquema hr, a travs del database link lorcl, y
creando tablas de stage o temporales, en el tablespace ODS. Esas
tablas sern las fuentes de datos de la tabla de dimensin
EMPLOYEES_DIM.

Veamos el contenido del script:

Lo ejecutamos desde sqlplus:

Veamos el contenido de la tabla EMPLOYEES_DIM:


La segunda carga, consiste en rellenar los datos de la tabla de
dimensin TIME_DIM, con datos procedentes del fichero
YEARS.TXT. La carga se realiza con sql*loader.

Veamos el contenido de los ficheros cargar_times_dim.ctl y


years.txt:
Invocamos al script cargar_times_dim.bat, que realiza la carga con sqlldr:

Veamos qu ha cargado y qu rechazado:


La tercera carga, consiste en crear varias tablas temporales con los datos
de EMPLOYEES, que ya estn en el tablespace ODS, y simular un
crecimiento salarial para los aos 1998, 1999 y 2000. En el ao 1998 el
salario es el original de la tabla EMPLOYEES, en el 1999 se incrementa el
salario en 1.1 y en el 2000 se incrementa en 1.2.

Finalmente, se insertan estos salarios en la tabla SALARY_FACT


(particionada por la columna YEAR).
Veamos el contenido del script de la tercera carga:

Invocamos al script CARGAR_SALARY_FACT.sql desde Sql*plus.


Veamos los datos:

Comprobemos que se han alojado en las particiones correspondientes:


5.- Invocar a los procedimientos para las cargas de refresco del
dw.

Primero vamos a proceder al refresco de la tabla de dimensin TIME_DIM,


cargando un nuevo ao con sql*loader. Luego vamos a refrescar la tabla de
dimensin EMPLOYEES_DIM con una tabla externa y una sentencia
merge. Finalmente aadiremos nuevos datos en la tabla SALARY_FACT
para los salarios de los empleados correspondientes al ao 2001, aadiendo
la particin correspondiente.
Comencemos con el refresco de TIME_DIM.

Veamos el contenido de los scripts:

Invoquemos al script desde el S.O y comprobemos despus los datos desde


sql*plus.
El segundo refresco es de EMPLOYEES_DIM. Crearemos una tabla
externa, con los datos de los cambios en la dimensin empleados. La
actualizacin de la tabla EMPLOYEES_DIM la realizaremos con una
sentencia MERGE que leer los datos de la tabla externa y los comparar
con la tabla EMPLOYEES_DIM. Si ya existe el empleado, lo actualiza, si
no existe, lo inserta.
Invocamos al script desde SQL*PLUS, y creamos la tabla externa:
Comprobemos los datos del fichero refresco_employees_ext:

Y ahora seleccionemos datos de la tabla externa:


Ahora procedemos a refrescar la tabla de dimensin EMPLOYEES_DIM,
con una clusula merge, que actualice a los empleados 198 y 199 e inserte
el 206.

Invoquemos al script:

Comprobemos los datos y validamos el merge:


El tercer refresco corresponde a la tabla de hechos SALARY_FACT.
Invoquemos al script para realizar este refresco:

Comprobemos los datos de la tabla y de la nueva particin:


6.- Crear objetos adicionales como vistas materializadas en el
dw.

Veamos el script de creacin:

Ejecutemos el script:
Comprobemos los datos de la vista materializada:

También podría gustarte