Saltar al contenido

Transformaciones Avanzadas en Apache Hop: Desnormalización de Filas

En este tutorial, exploraremos cómo utilizar la transformación "Desnormalizador de Filas" en Apache Hop.

Screenshot 2024-04-17 at 14.13.45-Photoroom.png-Photoroom

La transformación "Desnormalizador de Filas" te permite desnormalizar datos haciendo referencia a pares clave-valor, con la flexibilidad añadida de convertir tipos de datos durante el proceso.

¿Qué encontrarás aquí?

Escenario de caso de uso

Consideremos un escenario donde tenemos películas (film) listadas en una columna, junto con sus respectivos años (year), trimestres (quarter) y los ingresos generados (revenue).

Screenshot 2024-03-19 at 21.33.23

Observa que cada trimestre es una fila en la columna de trimestres (quarter).

Screenshot 2024-03-20 at 15.09.54

Necesitamos reestructurar los datos de ingresos basados en trimestres para cada película. Necesitamos convertir los datos de este formato:

Screenshot 2024-03-19 at 21.33.23

 
A este formato:
Screenshot 2024-03-19 at 21.32.13
 

Paso a paso

Para lograr esto, podemos utilizar la transformación "Desnormalizador de Filas" para convertir cada trimestre en una columna.

Los datos han sido generados utilizando una cuadrícula de datos (data grid).

Screenshot 2024-03-19 at 21.34.53-Photoroom.png-Photoroom

Aunque hemos demostrado esto con un ejemplo simplificado, es importante tener en cuenta que la fuente de datos puede estar en cualquier formato, como Excel, tablas, etc.

Para comenzar, cubriremos los pasos involucrados en este escenario de caso de uso:

Paso 1: Agregar y conectar la transformación "Desnormalizador de Filas".

Screenshot 2024-03-25 at 14.40.25-Photoroom.png-Photoroom

Paso 2: Configurar la transformación "Desnormalizador de Filas":

Screenshot 2024-03-25 at 14.41.29-Photoroom.png-Photoroom

  • Nombre de la transformación (Transform name): Define un nombre para la transformación (denormalize-rows).
  • Campo clave tipo (Type key field):  Elige el campo clave que sirve como el campo fuente para la desnormalización basada en sus valores (quarter).
  • Campo de agrupación (Group field): Luego, en la sección de campo de grupo, conserva los campos fuente que se utilizarán para agrupar y elimina el resto (film y year).
  • Nombre del campo de destino (Target fieldname): Especifica el nombre de las columnas de trimestres que se generarán (quarter1, quarter2, quarter3, y quarter4).
  • Nombre del campo de valor (Value fieldname): selecciona la columna que contiene el monto correspondiente a los valores clave de trimestres (revenue).
  • Valores clave (Key values): Especifica los valores clave fuente que se utilizarán para la desnormalización (quarter1, quarter2, quarter3, y quarter4)

💡 Ten en cuenta que mantenemos los nombres de los campos de destino con los mismos valores clave como quarter1, quarter2, quarter3, y quarter4 respectivamente, pero puedes elegir un nombre diferente para las columnas que se generarán.

Sin embargo, estamos pasando por alto un paso crucial.

Al hacer clic en "OK" para guardar, aparece un mensaje que indica que si los datos no están ordenados, los resultados desnormalizados pueden ser incorrectos. Por lo tanto, es necesario ordenar los datos antes de continuar con la desnormalización.

Agregamos y conectamos una transformación "Ordenar Filas".

Screenshot 2024-03-26 at 11.15.13-Photoroom.png-Photoroom

Luego la configuramos proporcionando un nombre y obteniendo los campos de la transformación anterior.

Screenshot 2024-03-26 at 13.32.53-Photoroom.png-Photoroom

  • Nombre de la transformación (Transform name): Especifica el nombre de la transformación, este nombre debe ser único en la canalización (sorting).
  • Campos (Fields): Utiliza la opción "Obtener Campos" para recuperar todos los campos de la transformación anterior (film, year, quarter y revenue).

Al previsualizar la transformación denormalize-rows, verás los datos transformados, logrando el formato de salida deseado.

Screenshot 2024-03-26 at 13.38.48
 

Después de la desnormalización, puedes exportar el conjunto de datos a diferentes formatos según tus requisitos.

¡Pero en nuestro ejemplo simplificado, eso concluye el proceso! Hemos transformado efectivamente los datos en la cuadrícula de datos en un formato desnormalizado.

Screenshot 2024-03-19 at 21.50.12

 

¿Cómo funciona?

En resumen, ¿cómo lo hicimos?

  1. Creamos una canalización y mapeamos los datos de entrada utilizando un desnormalizador.

    Screenshot 2024-03-26 at 13.45.13
  2. El campo clave se estableció como la columna "quarter" en la fuente.

    Screenshot 2024-03-26 at 13.46.43
  3. Agrupamos los ingresos por trimestre usando "film" y "year", lo que resulta en una entrada de ingresos para cada film, year y quarter.

    Screenshot 2024-03-26 at 13.43.42
  4. El nombre del campo de destino representa las nuevas columnas a crear, generando una columna para cada valor de trimestre.

    Screenshot 2024-03-26 at 13.43.57
  5. El nombre del campo de valor indica el valor de los ingresos (revenue).

    Screenshot 2024-03-26 at 13.44.06
  6. Finalmente, el valor clave corresponde al número de trimestre para cada valor distinto en la columna "trimestre".

Screenshot 2024-03-26 at 13.44.19
El resultado es la salida desnormalizada:

Screenshot 2024-03-26 at 13.38.48

 

No cubierto en esta publicación

No hemos explorado todas las opciones disponibles en la tabla de campos de destino dentro de la transformación "Desnormalizador de Filas".

For example, in the following example, we only group by film, and select "Number of Values" as the "Aggregation" method.

Por ejemplo, en el siguiente ejemplo, solo agrupamos por película (film) y seleccionamos "Número de Valores" (Number of Values) como el método de "Agregación" (Aggregation).

Screenshot 2024-03-26 at 14.04.49-Photoroom.png-Photoroom-1

Al previsualizar la transformación "Desnormalizador de Filas", obtenemos los siguientes resultados:
Screenshot 2024-03-26 at 14.04.23-Photoroom.png-Photoroom

En lugar de mostrar el valor de los ingresos (revenue), la salida ahora indica cuántos valores de ingreso (revenue) tiene cada película (film) por año (year) y trimestre (quarter). Por ejemplo, la película "Academy Dinosaur" tiene 2 años en el conjunto de datos de entrada.

💡 Ten en cuenta que, en este caso, el valor de año no es correcto porque solo agrupamos por película.

Aparte del método de agregación, puedes explorar las otras opciones en la tabla de "Campos de Destino" que no cubrimos en esta publicación:

  • Formato (Format)
  • Longitud (Length)
  • Precisión (Precision)
  • Moneda (Currency)
  • Decimal
  • Grupo (Group)
  • Nulo si (Null if)

 

Resumen

  1. Comprender el propósito: La transformación "Desnormalizador de Filas" en Apache Hop está diseñada para revertir datos estandarizados a su estructura de tabla pivot o desnormalizada original al convertir filas en columnas.
  2. Considera la estructura de tus datos: Antes de usar el "Desnormalizador de Filas", evalúa si tus datos necesitan reestructurarse, especialmente si involucra estructuras similares a pivotes.
  3. Utiliza los campos adecuados: Al configurar la transformación, selecciona los campos apropiados de tu conjunto de datos, asegurándote de incluir aquellos relevantes para el proceso de desnormalización.
  4. Previsualiza antes de finalizar: Siempre previsualiza los resultados de la transformación para asegurarte de que se alineen con tus expectativas y requisitos. Opciones de exportación: Una vez que se completa el proceso de desnormalización, puedes exportar el conjunto de datos transformado a varios formatos de destino, adaptándote a tus necesidades y preferencias específicas.