Introducción

El proceso ETL (Extract, Transform, Load) es fundamental en la gestión y procesamiento de datos. Este proceso permite la extracción de datos de diversas fuentes, su transformación en un formato adecuado y su carga en un sistema de almacenamiento, como un data warehouse. A continuación, se desglosan los conceptos clave y se proporcionan ejemplos prácticos para entender mejor cada etapa del proceso ETL.

  1. Extract (Extracción)

Conceptos Clave

  • Fuentes de Datos: Los datos pueden provenir de diversas fuentes, como bases de datos relacionales, archivos planos, APIs, sistemas ERP, entre otros.
  • Métodos de Extracción:
    • Extracción Completa: Se extraen todos los datos de la fuente cada vez.
    • Extracción Incremental: Solo se extraen los datos que han cambiado desde la última extracción.

Ejemplo Práctico

Supongamos que tenemos una base de datos relacional y necesitamos extraer datos de una tabla de clientes.

-- Extracción completa
SELECT * FROM clientes;

-- Extracción incremental (basada en una columna de fecha de modificación)
SELECT * FROM clientes WHERE fecha_modificacion > '2023-01-01';

Ejercicio Práctico

Ejercicio 1: Escribe una consulta SQL para extraer todos los registros de una tabla llamada ventas que han sido modificados después del 1 de enero de 2023.

Solución:

SELECT * FROM ventas WHERE fecha_modificacion > '2023-01-01';

  1. Transform (Transformación)

Conceptos Clave

  • Limpieza de Datos: Eliminación de datos duplicados, corrección de errores, manejo de valores nulos.
  • Enriquecimiento de Datos: Agregar información adicional a los datos existentes.
  • Conversión de Formatos: Cambiar el formato de los datos para que sean compatibles con el sistema de destino.
  • Agregación de Datos: Resumir datos para obtener métricas clave.

Ejemplo Práctico

Supongamos que hemos extraído datos de clientes y necesitamos normalizar los nombres y calcular la edad de los clientes.

import pandas as pd
from datetime import datetime

# Datos extraídos
data = {
    'nombre': ['Juan Pérez', 'Ana Gómez', 'Luis Martínez'],
    'fecha_nacimiento': ['1980-05-15', '1992-07-22', '1985-10-30']
}
df = pd.DataFrame(data)

# Limpieza y transformación
df['nombre'] = df['nombre'].str.upper()
df['edad'] = df['fecha_nacimiento'].apply(lambda x: datetime.now().year - datetime.strptime(x, '%Y-%m-%d').year)

print(df)

Ejercicio Práctico

Ejercicio 2: Dado un DataFrame con una columna salario en formato de texto (e.g., '1,000.00'), escribe un código en Python para convertir esta columna a un formato numérico.

Solución:

import pandas as pd

# Datos extraídos
data = {
    'nombre': ['Juan Pérez', 'Ana Gómez', 'Luis Martínez'],
    'salario': ['1,000.00', '2,500.50', '3,200.75']
}
df = pd.DataFrame(data)

# Transformación
df['salario'] = df['salario'].str.replace(',', '').astype(float)

print(df)

  1. Load (Carga)

Conceptos Clave

  • Destino de los Datos: Los datos transformados se cargan en un sistema de almacenamiento, como un data warehouse, base de datos, o sistema de archivos.
  • Métodos de Carga:
    • Carga Completa: Se reemplazan todos los datos en el destino.
    • Carga Incremental: Solo se agregan o actualizan los datos que han cambiado.

Ejemplo Práctico

Supongamos que necesitamos cargar los datos transformados en una tabla de un data warehouse.

-- Carga completa
TRUNCATE TABLE clientes_transformados;
INSERT INTO clientes_transformados (nombre, edad) VALUES ('JUAN PÉREZ', 43), ('ANA GÓMEZ', 31), ('LUIS MARTÍNEZ', 38);

-- Carga incremental
MERGE INTO clientes_transformados AS target
USING (SELECT 'JUAN PÉREZ' AS nombre, 43 AS edad UNION ALL SELECT 'ANA GÓMEZ', 31 UNION ALL SELECT 'LUIS MARTÍNEZ', 38) AS source
ON target.nombre = source.nombre
WHEN MATCHED THEN
    UPDATE SET target.edad = source.edad
WHEN NOT MATCHED THEN
    INSERT (nombre, edad) VALUES (source.nombre, source.edad);

Ejercicio Práctico

Ejercicio 3: Escribe una consulta SQL para cargar datos transformados en una tabla llamada ventas_transformadas, asegurándote de realizar una carga incremental.

Solución:

MERGE INTO ventas_transformadas AS target
USING (SELECT id_venta, producto, cantidad, precio FROM ventas_transformadas_temp) AS source
ON target.id_venta = source.id_venta
WHEN MATCHED THEN
    UPDATE SET target.producto = source.producto, target.cantidad = source.cantidad, target.precio = source.precio
WHEN NOT MATCHED THEN
    INSERT (id_venta, producto, cantidad, precio) VALUES (source.id_venta, source.producto, source.cantidad, source.precio);

Conclusión

El proceso ETL es esencial para la integración y preparación de datos en cualquier organización. Comprender y dominar cada una de sus etapas (Extracción, Transformación y Carga) permite asegurar que los datos sean precisos, consistentes y estén disponibles para su análisis y toma de decisiones. Con los ejemplos y ejercicios proporcionados, se espera que los estudiantes hayan adquirido una comprensión sólida de cómo implementar y optimizar procesos ETL en sus propias organizaciones.

© Copyright 2024. Todos los derechos reservados