Contacta con nosotros.

Bosonit Agile Center

Portales 71, 2º Of. 7,8,9 y 10. LOGROÑO

Isabel la Católica, 6. (Edificio Hiberus). ZARAGOZA

Salvador Granes, 3. MADRID

San Esteban de Etxebarri, 8. BILBAO

Contacta con nosotros.
Back to top

Bosonit

  /  Data management   /  Creación de ETL en SSIS, SAP y PENTAHO

El acrónimo ETL (Extract Transform Load) se refiere al proceso que permite mover datos desde múltiples fuentes de origen, darles un formato óptimo, sanearlos y cargarlos en bases de datos, datamarts o datawarehouses para ser analizados. Las ETL componen una parte fundamental en el mundo del Business Intelligence (BI) ya que relacionan datos con información, conocimiento y sabiduría.

Con el siguiente artículo se quiere explicar el proceso de creación ETL para un caso dado. Durante el proceso se detallan todas las acciones necesarias para realizar esta tarea en distintos sistemas (SSIS, SAP o PENTAHO).

1. Estructura de origen/salida de datos:

A continuación, mostraremos las estructuras de las consultas utilizadas para el ejemplo y los resultados de las mismas.
TABLA DESTINO


RESULTADO DESTINO

 

TABLA ORIGEN DESCRIPCION PAISES

 

RESULTADO ORIGEN DESCRIPCION PAISES

TABLA ORIGEN PRODUCCION PAISES


RESULTADO ORIGEN PRODUCCION PAISES

2. SAP:

Se plantea un problema relativo a los tipos de los datos de origen y destino (integer y decimales), dado que desde las fuentes de datos se envían con tipo integer, pero en la tabla final se convierten en de tipo decimal debido a una serie de operaciones matemáticas. Para poder hacer esta conversión se deben realizar una serie de cambios en SAP.

Hay dos maneras de solucionar esta incidencia, la primera es creando unas templates temporales para forzar que después de la conversión y antes del mapping funcione con decimales. La segunda es hacerlo mediante un cast, que es una función que nos permite cambiar el tipo de formato de un determinado campo por otro, en nuestro caso de integer (10) a decimal (10,2). A continuación, un ejemplo de la creación de templates.

 

Vamos a ver más a fondo la versión realizada con el cast. Para ello creamos un nuevo proyecto, con un WorkFlow, que a su vez contendrá un DataFlow (donde estarán todas las tablas)

Empezamos añadiendo las dos tablas creadas en SQL a SAP.

 

Una vez que están añadidas se crea una Query para cada tabla.

 

Básicamente vamos a pasar todos los campos de la tabla origen a la Query, pero en el campo “PERCENTAGE_VAT” añadiremos un cast para convertir el tipo de dato de origen (que es integer) a decimal (10,2).

 

En la otra tabla hacemos lo mismo, pero con el campo “GROSS_PRICE”

En este punto vamos a crear otra Query que unirá tablas origen con tabla final, haremos el “Join” de las tablas origen, meteremos la operación de cálculo del precio neto + IVA en el “campo calculado” RETAIL_PRICE, y mapearemos el resto de campos directamente (si quisiéramos llamarlos en tabla destino de manera diferente no habría ningún problema).

 

JOIN:

 

Mapeo:

 

En este ejemplo lo que queremos es calcular el precio de un producto con su IVA. Cada producto tiene un precio bruto e IVA diferente.

 

Este sería el resultado final en SAP, ya nos salen los datos calculados y convertidos a decimal (10,2).

En SQL.

3. SSIS:

Al igual que el ejemplo anterior en SAP, se plantea un problema con datos de tipo decimal e integer, viniendo datos de origen de tipo integer, pero en la tabla final va a ser de tipo decimal.
Esta sería la casuística dada:

 

Una vez en SSIS creamos nuestro Control Flow que equivale a un WorkFlow de SAP ya que es la estructura central donde se estructura la ejecución de la ETL y dentro de este un Data Flow al igual que en SAP.

 

Dentro del Data Flow realizaremos nuestro proceso de ETL empezando por colocar las tablas origen con las que vamos a trabajar.

 

En nuestro caso utilizaremos ADO NET Source como nuestro conector a BD, aunque podríamos usar cualquier atendiendo a nuestras necesidades. Dentro configuraremos tanto la base de datos a la que conectar, así como la tabla que vayamos a utilizar.

 

El siguiente paso será crear un JOIN para relacionar datos de ambas tablas para ello el primer paso será realizar una ordenación de estos para poder unirlos correctamente (requisito de SSIS para realizar JOINS). Usaremos el siguiente control y le diremos que ordene la tabla por sus cables primarias.

 

Una vez ordenados los datos realizaremos el JOIN.

Quedando el proceso de ETL de la siguiente manera:

Dado que los valores de origen de los campos GROSS_PRICE y PERCENTAGE_VAT vienen como integer y el valor esperado en destino es decimal necesitamos realizar una conversión de estos para más tarde poder operarlos.

El Siguiente paso será añadir un campo calculado a nuestra ETL. Para ello utilizaremos el siguiente control:

En el definiremos el nombre de nuestro nuevo campo, el tipo y el valor que este contiene tanto por medio de otros campos o utilizando alguna función para obtenerlo.

Realizamos en este apartado la conversión del tipo para que en destino tenga el tipo deseado:
((DT_DECIMAL,2)GROSS_PRICE * (DT_DECIMAL,2)PERCENTAGE_VAT / 100) + (DT_DECIMAL,2)GROSS_PRICE

Y finalmente añadimos la tabla de destino donde guardar nuestros datos (también podemos decirle a SSIS que solo pase algunos de los campos a destino).

4. PENTAHO:

Al igual que apartados anteriores detallaremos el proceso de creación de una ETL mediante Pentaho.

Lo primero que haremos será colocar las tablas origen que vamos a utilizar durante el proceso. Para realizar un JOIN entre dos tablas necesitamos al igual que en SSIS realizar una ordenación por sus claves primarias para que obtenga todas las coincidencias entre ambas tablas.
Simplemente escogemos las claves primarias por las que unir y el tipo de JOIN (en este caso INNER):

El siguiente paso será crear el campo calculado para el campo TOTAL_PRICE:

Al igual que en sistemas anteriores escogemos nombre, tipo y valor del campo calculado.
Finalmente, mediante el mapeo final colocamos los nombres de las columnas de la tabla final una vez realizado todo el proceso.

Autores: Jorge Irazola Vallejo