Aplicando Ordenamiento de Columnas en Amazon Redshift
El ordenamiento de columnas mediante llaves de ordenamiento (SORT KEYS) en Redshift permite optimizar el rendimiento de las consultas organizando físicamente los datos en disco. Este enfoque reduce el tiempo de escaneo de bloques y acelera las operaciones comunes como filtros, uniones y agregaciones.
1. Estrategia para Aplicar Llaves de Ordenamiento
Antes de implementar llaves de ordenamiento, sigue estos pasos:
a. Analiza los patrones de consulta
Identifica las columnas que se utilizan más frecuentemente en:
- Cláusulas
WHERE
- Cláusulas
JOIN
- Cláusulas
GROUP BY y ORDER BY
b. Evalúa el volumen de datos
El rendimiento mejora significativamente en tablas grandes donde la selección es crítica.
c. Define el tipo de llave de ordenamiento
- COMPOUND SORTKEY: Útil para accesos secuenciales.
- INTERLEAVED SORTKEY: Beneficioso para múltiples patrones de acceso.
2. Ejemplo Práctico: Implementación de Llaves de Ordenamiento
Escenario:
- Tienes una tabla de transacciones llamada
ventas con las siguientes columnas:
venta_id
fecha
cliente_id
total
- Las consultas comunes incluyen filtros por
fecha y cliente_id.
a. Llave de Ordenamiento Compuesta
Si las consultas filtran principalmente por fecha:
CREATE TABLE ventas (
venta_id INT,
fecha DATE,
cliente_id INT,
total DECIMAL(10, 2)
)
COMPOUND SORTKEY (fecha, cliente_id);
- Redshift ordena físicamente los datos primero por
fecha y luego por cliente_id.
b. Llave de Ordenamiento Entrelazada
Si las consultas filtran dinámicamente por fecha o cliente_id:
CREATE TABLE ventas (
venta_id INT,
fecha DATE,
cliente_id INT,
total DECIMAL(10, 2)
)
INTERLEAVED SORTKEY (fecha, cliente_id);
- Redshift optimiza para acceder rápidamente a cualquier columna especificada en la llave entrelazada.
3. Cargando Datos con Llaves de Ordenamiento
Cuando cargas datos en una tabla con llaves de ordenamiento:
- Utiliza la instrucción
COPY para importar datos desde S3 u otra fuente.
- Redshift aplicará automáticamente el orden especificado en las llaves durante la carga.
Ejemplo de carga:
COPY ventas
FROM 's3://mi-bucket/ventas.csv'
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY'
CSV;
4. Verificando el Ordenamiento
Redshift proporciona vistas del sistema para evaluar el rendimiento de tus llaves de ordenamiento:
a. Verifica el uso de columnas en consultas
Consulta la vista SVL_QUERY_SUMMARY para ver cómo las consultas usan las columnas:
SELECT table_id, column, sum(scan_count) AS total_scans
FROM svl_query_summary
GROUP BY table_id, column
ORDER BY total_scans DESC;
b. Evalúa la distribución de datos
Consulta la vista SVV_TABLE_INFO para revisar la distribución de datos:
SELECT table_id, diststyle, sortkey1, skew_sortkey1, rows
FROM svv_table_info
WHERE table_name = 'ventas';
5. Optimizando el Ordenamiento
a. Ajusta las claves según el uso
Si cambian los patrones de consulta, considera ajustar las llaves de ordenamiento:
-
Crea una nueva tabla con el nuevo esquema.
-
Copia los datos a la nueva tabla:INSERT INTO nueva_tabla SELECT * FROM ventas;
-
Renombra las tablas si es necesario.
b. Reclama espacio en disco
Usa VACUUM para reorganizar datos y aplicar el ordenamiento:
VACUUM ventas;
6. Consideraciones Adicionales
- Costo de mantenimiento:
INTERLEAVED SORTKEY tiene mayor costo en actualizaciones y cargas masivas.
- Tamaño de las tablas: Las tablas pequeñas no suelen beneficiarse significativamente de llaves de ordenamiento.
Conclusión
Aplicar llaves de ordenamiento correctamente puede transformar el rendimiento de tu clúster Redshift. Evalúa cuidadosamente tus patrones de uso, selecciona el tipo de llave adecuado y monitorea el impacto para garantizar un rendimiento óptimo.