3 Cosas de Pentaho Data Integration que me hubiera gustado saber desde un principio


No recuerdo exactamente la fecha en que empecé a trabajar con Kettle, ahora llamado Pentaho Data Integration (PDI), para realizar tareas de ETL. Estimo que fue por el 2007 en que conocí tan útil herramienta con la cual al día de hoy me apoyo para realizar innumerable cantidad de tareas, o algoritmos de validación, que me tomaría mucho mas tiempo implementar, depurar y modificar, si lo realizara, por ejemplo, en Java.

Como todo proceso de aprendizaje, estuve expuesto a días de dolores de cabeza tratando de comprender qué estaba haciendo mal cuando PDI, por algún motivo, no realizaba lo que, según mi diseño, debería hacer. A continuación muestro algunas situaciones de las que debes estar pendiente al momento de trabajar con Strings y datos numéricos, que en su momento, aprendí algunas con ayuda de Google, y otras por ensayo y error:

Decirle a PDI que un String en null difiere de un String vacío

¿No les ha pasado que tienen una transformación en la que se leen datos de tipo VARCHAR o TEXT (y que PDI entiende como String) de una fuente sobre la cual en algún paso realizan una comparación, y que por algún motivo, la salida no es la esperada?

Por algún motivo que desconozco, los desarrolladores de PDI encontraron divertido hacer que durante una transformación, un String vacío, sea igual a null.

Este parámetro en particular se vuelve un verdadero problema cuando utilizas una User Defined Class donde esperas capturar alguna excepción de tipo NullPointerException para tomar una decisión en tu script.

Para quienes tengan transformaciones donde la sensibilidad a los datos (y sus metadatos) sea alta, lo mejor es habilitar esta opción.

Para esto, desde la barra de herramientas de PDI, elige Edit -> Edit the kettle.properties file. Busca la variable KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL y coloca ‘Y’, sin las comillas, como valor.

Kettle Properties

Quitar espacios en blanco

Otra buena práctica al trabajar con Strings, consiste en eliminar los espacios en blancos que pueden añadirse al final y que son autogenerados por algunos manejadores de base de datos, y hasta el mismo PDI, en pasos como el de Concat Fields.

Para esto, utiliza el paso String Operations y en ‘Trim type’ elige ‘both’. Sugiero realices esto antes de tener que usar el valor en algún paso como Filter Rows.

String Operations

Pérdida de precisión en variables numéricas

Se debe tener mucho cuidado y atención al momento de trabajar con valores numéricos, sobretodo cuando están sometidos a cálculos en muchos pasos en una transformación.

PDI maneja tres tipos de datos numéricos: Number, BigNumber e Integer. En el primero se mapean automáticamente cualquier valor que tenga parte decimal, en caso contrario, el valor será mapeado como Integer. Se debe tener atención en las siguientes situaciones:

– Si multiplicas un valor Number por Integer, automáticamente pierdes la precisión decimal. Si el factor entero es una constante, entonces puedes especificarla como decimal.

– Procura siempre que trabajes con valores de tipo de dato Number, establecer su formato y cual es el signo de agrupación y el signo decimal. Esto último es súper importante cuando trabajas con fuentes de datos heterogéneas con codificaciones regionales distintas (ejemplo, una base de datos y una hoja de excel). Tener esto como práctica te ahorrará mucho sdolores de cabeza y tiempo.

Por ejemplo, la siguiente transformación modifica un valor numérico que representa un descuento otorgado, sin embargo, cuando el registro es una nota de crédito, este descuento debe ser eliminado.

Ejemplo Kettle Number 1

Se utiliza entonces un Filter Rows para especificar una constante que podrá ser 0.0 o 1.0. Preste atención en que se ha especificado el typo, formato y signos.

Ejemplo Kettle Number 2

Ejemplo Kettle Number 3

Posteriormente, un paso Calculator asigna a un campo nuevo llamado “Descuento”, el resultado de multiplicar la constante definida “ES_NC” por el atributo “Monto_Facturado”. El tipo de valor y signos es especificado nuevamente, por buena práctica. El formato puede ser cambiado si así se desea, en ‘Conversion mask’.

Ejemplo Kettle Number 4

En un próximo post, hablaré de simples trucos y configuraciones, que harán que las transformaciones se ejecuten más rápido. También, tengo interés en realizar uno o varios posts dedicados al paso User Defined Class, para aquellos valientes que quieren hacer mucha mas magia con PDI.

¡Hasta pronto!

Anuncios

1 comentario en “3 Cosas de Pentaho Data Integration que me hubiera gustado saber desde un principio”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s