Taller semanal del equipo de datos · Sesión 4
2026-08-19
Buenas prácticas de datos
Liquid Clustering
Cuando el problema no es la query: es cómo están guardados los datos
Taller semanal · Sesión 4
Mauro Loprete
Desde la sesión 1, en la tabla de alarmas:
Files pruned ≈ 0 con filtro selectivo → el layout no ayuda a podar archivos
cliente_id y devuelve 200 filasHoy: por qué pasa, y qué se hace.
Misma query, mismos datos, mismas 195 filas de respuesta: sin clustering lee 135 MB y poda 0; con Liquid lee 8 MB y poda 368 de 384 archivos.
cliente_id de cada archivo cubre casi todoDos técnicas venían a resolver el mismo problema, cada una con su peaje:
fecha=2024-01-15/)
cliente_id son miles de carpetas con archivos chiquitos), y si elegiste mal la clave: reescribir toda la tablaOPTIMIZE tabla ZORDER BY (cliente_id) agrupa los valores cercanos de varias columnas en los mismos archivos
El orden se lograba, pero pagando mantenimiento manual para siempre. Eso es lo que viene a jubilar Liquid Clustering.
1
Ordenar los archivos según cómo consultás
OPTIMIZE ordena solo lo que falta, no reescribe la tabla como Z-ORDERDatabricks lo recomienda hoy para todas las tablas nuevas.
-- Tabla nueva
CREATE TABLE plata.movimientos (
mov_id BIGINT, cliente_id BIGINT, fecha DATE, monto DECIMAL(18,2)
)
CLUSTER BY (cliente_id, fecha);
-- Tabla existente
ALTER TABLE plata.movimientos CLUSTER BY (cliente_id, fecha);
-- Reorganizar: el clustering es INCREMENTAL, esto lo dispara
OPTIMIZE plata.movimientos;
-- Primera vez o cambio de claves: forzar el recluster completo
OPTIMIZE plata.movimientos FULL;Gotcha número 1:
ALTER TABLE ... CLUSTER BYno reordena nada por sí solo. Sin elOPTIMIZE FULLinicial, el histórico queda como estaba.
| Criterio | Por qué |
|---|---|
| Columnas por las que filtrás seguido | Son las que activan la poda |
| Alta cardinalidad (ids, timestamps) | Con particiones viejas eran inviables; acá son ideales |
| Hasta 4 claves, pero menos suele ser mejor | En tablas medianas, 2 claves podan mejor que 4 |
CLUSTER BY AUTO: Databricks elige las claves según los patrones de consulta. Requiere tablas gestionadas por Unity Catalog y predictive optimization activo2
Desde dbt y Prophecy
El adapter de dbt para Databricks lo expone como config del modelo:
O en el propio modelo:
No hace falta salir del flujo de Prophecy y dbt: el clustering queda declarado en el proyecto, versionado como todo lo demás.
Nota: También se puede y se debe hacer en el contrato.
OPTIMIZE FULL, el histórico sigue desordenadoSiempre en ese orden. Clusterizar una tabla para salvar una query mal escrita es esconder el problema.
No clusterices nada todavía: primero la evidencia, después el cambio (y el
OPTIMIZE FULLse coordina, no se lanza un viernes).
Fin de la primera vuelta
¿Y ahora qué?
Candidatos para las próximas sesiones: modelos incrementales, MERGE, archivos chicos, caching en warehouses…
¿Preguntas? · Mauro Loprete

Buenas prácticas · Mauro Loprete