La planificación y extracción de datos desde MySQL en un proyecto ETL requiere una buena estructura para garantizar que los datos se extraigan de manera eficiente y segura. A continuación, te muestro los pasos esenciales:
1. Planificación de la Extracción
a. Definir los Requerimientos de Datos
- ¿Qué datos necesitas? Identifica las tablas y columnas requeridas.
- ¿Con qué frecuencia necesitas los datos? Determina si la extracción será completa (todos los datos) o incremental (solo los datos nuevos o actualizados).
- ¿Qué filtros aplicarás? Especifica condiciones como rangos de fechas o valores específicos.
b. Evaluar el Volumen de Datos
- ¿Cuántos registros? Estima el tamaño de los datos.
- Optimización: Considera índices en las tablas para acelerar las consultas.
c. Asegurar la Conexión y Seguridad
- Verifica las credenciales y permisos de acceso.
- Asegúrate de que el usuario de MySQL tenga los privilegios necesarios para realizar consultas.
2. Configuración del Entorno en Python
a. Instalación de Librerías
Asegúrate de tener instaladas las bibliotecas necesarias para conectarte a MySQL y trabajar con datos:
pip install mysql-connector-python pandas
3. Extracción de Datos desde MySQL
a. Conexión a la Base de Datos
Crea una conexión a MySQL desde Python:
import mysql.connector
# Conectar a MySQL
conexion = mysql.connector.connect(
host="localhost", # Dirección del servidor MySQL
user="etl_user", # Usuario con acceso
password="tu_password", # Contraseña del usuario
database="proyecto_etl" # Base de datos a trabajar
)
if conexion.is_connected():
print("Conexión exitosa a la base de datos")
conexion.close()
b. Consulta para Extracción de Datos
Usa consultas SQL para extraer los datos que necesitas.
Extracción Completa
import pandas as pd
# Conexión
conexion = mysql.connector.connect(
host="localhost",
user="etl_user",
password="tu_password",
database="proyecto_etl"
)
# Consulta SQL
query = "SELECT * FROM ventas;"
df = pd.read_sql(query, conexion)
# Mostrar datos
print(df.head())
conexion.close()
Extracción Incremental
Extrae datos nuevos o actualizados basándote en una columna como fecha.
query = """
SELECT *
FROM ventas
WHERE fecha >= '2025-01-01';
"""
df = pd.read_sql(query, conexion)
4. Optimización de la Extracción
a. Filtrar los Datos en SQL
Realiza filtros en la consulta SQL para reducir el volumen de datos extraídos.
SELECT producto, cantidad, precio, fecha
FROM ventas
WHERE cantidad > 5 AND fecha >= '2025-01-01';
b. Trabajar con Lotes
Si el volumen de datos es grande, extrae los datos en partes.
cursor = conexion.cursor()
# Consulta con límite
query = "SELECT * FROM ventas LIMIT 1000 OFFSET 0;"
cursor.execute(query)
for row in cursor.fetchall():
print(row)
cursor.close()
5. Validación y Registro
Asegúrate de registrar cada extracción:
- Validación: Comprueba que no haya datos corruptos o faltantes.
- Registro: Guarda un log con información de la extracción: fecha, registros extraídos, tiempo de ejecución.
6. Ejemplo Completo
Combina todo en un flujo básico:
import mysql.connector
import pandas as pd
# Configuración de conexión
conexion = mysql.connector.connect(
host="localhost",
user="etl_user",
password="tu_password",
database="proyecto_etl"
)
# Extracción de datos
query = "SELECT producto, cantidad, precio, fecha FROM ventas WHERE cantidad > 5;"
df = pd.read_sql(query, conexion)
# Mostrar resultados
print("Registros extraídos:", len(df))
print(df.head())
# Guardar en un archivo CSV
df.to_csv("ventas_filtradas.csv", index=False)
conexion.close()
7. Siguientes Pasos
- Transformación: Limpia y prepara los datos.
- Carga: Inserta los datos procesados en otro sistema, como un Data Warehouse.