
Cargando datos con Pentaho Kettle
22 noviembre 2011Últimamente estoy utilizando PDI, Pentaho Data Integration, anteriormente conocido como Kettle, para realizar validación y carga de datos (ETL).
Kettle proporciona una serie de pasos (steps) e interfaces de manera que construir un proceso de extracción, proceso y carga de datos es una tarea muy sencilla. La forma más fácil de empezar es usando la interfaz gráfica, Spoon, aunque también dispone de una API de forma que se integra con cualquier aplicación Java.
Existen dos grandes tipos de procesos, los trabajos (jobs) y las transformaciones (transforms). Los primeros se utilizan para coordinar y las segundas se utilizan para realizar tareas específicas. Por ejemplo, usaremos un job para conectar con el origen de datos, pasarle los datos a una transformación y cuando ésta termine pasará el output al destino de los datos, enviando por correo electrónico el resultado. La transformación también puede conectar con orígenes de datos, pero con la finalidad de realizar operaciones sobre los datos, tal como validaciones, cálculos, y con la finalidad última de generar una salida como resultado de todas estas operaciones.
La mayor ventaja de Kettle es la gran librería de operaciones que trae de todo tipo, desde conexión con orígenes de datos (archivos, bases de datos, webservices, etc), operaciones sobre cadenas (Strings), operaciones con datos (joins, group by) y también la posibilidad de utilizar Java o Javascript para crear nuestras propias operaciones rápidamente.
Ahora vienen los inconvenientes, ya que no es oro todo lo que reluce. En primer lugar la documentación es bastante mala, está desactualizada y sin ningún tipo de orden. Los foros son de ayuda pero los responsables son bastante soberbios, paciencia. Algunas cosas no funcionan debido a bugs, algunos de ellos no solucionados durante más de un año. El diseño de transformaciones es muy sencillo, y en una semana se puede empezar a realizar cosas bastante complejas. Esto es, sin embargo, su mayor problema. El mantenimiento de transformaciones complejas (especialmente con varias joins) es tremendamente difícil. Cuando empiezar a haber más de 20 pasos en una transformación cualquier cambio resulta complicado de insertar, tal como añadir un nuevo campo. En un job que contiene varias transformaciones, siendo el output de uans el input de otras la cosa es aún mas complicada y el desarrollo se vuelve lento y con tendencia a los errores, por mucho cuidado que se ponga. El rendimiento en general es bueno, pero disminuye exponencialmente cuando el número de registros crece (un millón de registros, 7 transformaciones, hora y media en un procesador dual core y 4 gb de ram exclusivos para Kettle).
En conclusión, Kettle es una buena herramienta para realizar ETL sencillos sobre una cantidad moderada de datos (para más de un millón de registros yo no lo usaría). Además Kettle sólo puede usarse si las operaciones a realizar sobre los datos se basan en criterios estáticos (las operaciones se aplican considerando criterios previamente conocidos sobre los datos).