Transformación de códigos con Pentaho

Resumen

Transformar datos en Pentaho replica lo que harías con Pandas y Python, pero con un flujo visual de cajas conectadas. Aquí verás cómo limpiar códigos, filtrar nulos, recortar strings y unir descripciones para construir una tabla final consumible, paso a paso.

¿Cómo se inicia la transformación de códigos en Pentaho?

El primer movimiento es separar el flujo en dos data frames, igual que cuando trabajabas con padres y nombres de productos en Python. Todo arranca con un filtro que elimine los valores nulos del campo codecom.

Desde la entrada de datos, conectas la salida a un paso Filter Rows y defines la condición: codecom no debe ser nulo. Ese filtro se convierte en el punto de partida para los dos caminos siguientes.

¿Qué hace el paso Filter Rows en Pentaho? Evalúa una condición sobre cada fila y separa el flujo en dos rutas: las filas que cumplen y las que no. Sirve para descartar nulos o segmentar por niveles.

¿Cómo separar los productos por nivel jerárquico?

Una copia del flujo se envía a otro filtro que evalúa el campo level. Cuando level es igual a 2, esas filas siguen su propio camino para conservar solo las descripciones de categoría.

La clave aquí es usar Copy en lugar de Distribute al conectar pasos, para que ambos caminos reciban los mismos datos completos en vez de partirlos.

Después del filtro por nivel 2, un paso Select Values se queda únicamente con las columnas necesarias: la descripción y codecom, que se renombra a Code con mayúscula para mantener el estándar.

¿Cómo calcular la longitud de un string en Pentaho?

Para replicar la lógica de Python que evaluaba si la longitud del código era 11 o mayor, se usa el paso Calculator. Ahí defines un nuevo campo llamado LenCode que aplica la función length of a string sobre el campo code.

Si el campo code viene como integer, Pentaho lanza un error al intentar cortarlo como string. La solución es agregar un paso previo que convierta code a tipo string antes de pasar al Calculator.

¿Por qué falla el corte de strings sobre un campo numérico? Porque las funciones de subcadena solo operan sobre texto. Si el campo es entero, primero debes castearlo a string para que Pentaho pueda recortarlo.

¿Cómo cortar el código según su longitud?

Con LenCode calculado, un nuevo Filter Rows evalúa si el valor es igual a 11 y abre dos rutas paralelas:

  • String Cut Code 11: cuando la longitud es 11, se genera clean code tomando posiciones 0 a 1 y parent code también de 0 a 1.
  • String Cut Code 12: cuando la longitud no es 11, clean code va de 0 a 6 y parent code va de 0 a 2.

Cada rama produce las mismas dos variables, clean code y parent code, listas para ser unidas. Esto es exactamente lo mismo que hacías en Pandas con condicionales sobre len(), solo que apilando cajas.

¿Cómo unir flujos y enriquecer datos en Pentaho?

Las dos ramas se reúnen con un paso Append Streams, que concatena las filas de ambos caminos en un solo flujo. Tienes que indicar explícitamente cuál stream va primero y cuál segundo, de lo contrario el paso falla.

Una vez unidos, el siguiente paso es un Merge Join tipo inner join contra el flujo del nivel 2, usando parent code contra Code. Aquí está el detalle clave: si intentas unir por clean code no obtendrás resultados, porque la coincidencia ocurre con el código padre.

¿Cuál es la diferencia entre Append Streams y Merge Join? Append Streams apila filas de dos flujos, como un concat en Pandas. Merge Join combina columnas de dos flujos según una llave común, como un merge o join.

¿Cómo agregar un identificador único y seleccionar columnas finales?

Después del merge, el paso Add Sequence crea un identificador autoincremental llamado ID code, que avanza de uno en uno. Es el equivalente directo a generar una columna índice en Pandas.

Finalmente, otro Select Values ordena y conserva solo las columnas relevantes:

  1. ID code como identificador único.
  2. clean code como código limpio del producto.
  3. description con el nombre del producto.
  4. parent description con la categoría a la que pertenece.

El resultado es una tabla totalmente consumible donde cada fila tiene su código, su versión limpia, la descripción del producto y la categoría padre. Lo interesante es que este diagrama gráfico hace exactamente lo mismo que el script de Pandas, solo que apilando stages visuales en lugar de escribir líneas de código.

Si te quedó alguna duda sobre la conexión entre pasos o el casteo de tipos, déjala en los comentarios y ayuda a otros estudiantes que estén replicando este flujo.