Convertir datos crudos en información limpia y estructurada es el corazón de cualquier proceso ETL, y Pentaho ofrece una forma visual e intuitiva de lograrlo. A continuación se explica cómo replicar las mismas transformaciones que se realizan con Python y Pandas, pero utilizando cajas conectadas en un flujo gráfico dentro de Pentaho Data Integration.
¿Cómo filtrar datos nulos y por nivel en Pentaho?
El primer paso del proceso de transformación consiste en garantizar la calidad de los datos eliminando valores nulos. Para ello se utiliza un componente de tipo filter que evalúa si el campo CodeCon no es nulo [01:07]. Solo los registros que pasan esta validación continúan por el flujo.
Acontinuación se necesita duplicar la información sin distribuirla, de modo que una copia se dirija a un segundo filtro. Este segundo filter se encarga de separar los registros cuyo nivel (level) sea igual a dos [01:42]. El resultado son dos caminos:
- Todos los registros válidos (sin nulos) avanzan hacia el procesamiento de códigos.
- Solo los registros de nivel dos pasan a un Select Values donde se conservan únicamente la descripción y el campo
Code renombrado con mayúscula inicial para mantener el estándar [02:18].
¿Cómo cortar y limpiar strings con Calculator y String Operations?
Una vez filtrados los nulos, se necesita conocer la longitud del código para aplicar distintas reglas de corte. El componente Calculator [03:05] crea un nuevo campo llamado LenCode que calcula la longitud (length) del string Code. Esto permite identificar si un código tiene once o doce caracteres.
Con esa información se agrega otro filtro que evalúa si LenCode es igual a once [03:40]. A partir de aquí el flujo se bifurca en dos ramas:
¿Qué ocurre cuando el código tiene once caracteres?
Se crea un componente de operaciones de string llamado String Code Once [04:05]. Dentro de él se generan dos variables:
CleanCode: toma los caracteres desde la posición cero hasta cinco.
ParentCode: toma desde la posición cero hasta uno.
¿Qué sucede cuando el código tiene doce caracteres?
Otro componente llamado String Code Doce [04:30] aplica reglas similares pero con rangos distintos:
CleanCode: posiciones de cero a seis.
ParentCode: posiciones de cero a dos.
Es importante notar que si el campo Code llega como entero, Pentaho lanzará un error al intentar cortarlo como string. La solución es transformar el tipo de dato a string antes de la operación [05:10].
¿Cómo unir resultados y generar el dataset final?
Una vez que ambas ramas producen CleanCode y ParentCode, se combinan mediante Append Stream [05:35], que apila los registros de ambos caminos en un solo flujo, sin importar si venían de la condición de once o de doce caracteres.
El siguiente paso es cruzar esta información con las descripciones del nivel dos. Para ello se usa un componente de Merge Join configurado como inner join [06:10]. La clave de unión es ParentCode contra el campo Code proveniente del Select Values de nivel dos. Esto asocia cada producto con la descripción de su categoría padre.
Finalmente se añaden dos componentes para completar la transformación:
- Add Sequence [07:05]: genera un identificador único incremental llamado
IDCode que avanza de uno en uno.
- Select Values [07:25]: selecciona y reordena las columnas finales del dataset.
El resultado es una tabla limpia con cuatro campos:
IDCode: identificador secuencial.
CleanCode: código del producto depurado.
- Descripción del producto.
ParentDescription: categoría a la que pertenece.
Todo el proceso es equivalente al código escrito en Pandas y Python, con la ventaja de que cada paso queda representado como una caja visual conectada. Cada caja funciona como un stage dentro del flujo, lo que facilita la lectura, el mantenimiento y la colaboración en equipo. Si algún paso te genera dudas, compártelas en los comentarios para que la comunidad pueda apoyarte.