Estás en el blog de Nicolau Roca
Más allá del SELECT: fundamentos internos de Snowflake para dominar el rendimiento SQL
Una guía técnica sobre microparticiones, pruning, clustering, metadata, Query Profile y patrones de diseño para escribir SQL eficiente en Snowflake.

Introducción: deja de escribir SQL como si fuera 2010
Mucha gente escribe SQL en Snowflake como si estuviera trabajando sobre MySQL, SQL Server o un PostgreSQL local. Ese es el primer problema. Snowflake no es una base de datos relacional tradicional con índices clásicos, almacenamiento local y un optimizador limitado al servidor donde vive la instancia. Es un data warehouse cloud-native, columnar, distribuido y profundamente apoyado en metadatos.
Esa diferencia no es marketing. Tiene consecuencias directas: Snowflake puede escanear miles de millones de filas sin índices tradicionales, puede saltarse enormes cantidades de datos mediante pruning, puede reescribir consultas bajo el capó y puede separar almacenamiento y cómputo. Pero para aprovecharlo hay que entender cómo piensa el motor.
Microparticiones: la unidad real de rendimiento
El rendimiento de Snowflake empieza en las microparticiones. Cada tabla se divide automáticamente en pequeños bloques columnarizados, comprimidos e inmutables. Estas unidades contienen datos, pero también metadatos: valores mínimos y máximos por columna, recuentos de nulos, cardinalidad aproximada y otra información que el optimizador usa para decidir qué leer y qué ignorar.
Esto cambia la manera de escribir consultas. En una base de datos tradicional se piensa mucho en índices. En Snowflake se piensa en pruning: conseguir que el motor no lea lo que no necesita leer. Una consulta rápida no es solo una consulta que calcula bien; es una consulta que consigue reducir el volumen físico de datos escaneados.
Pruning: evitar leer es más importante que leer rápido
Cuando aplicas filtros sobre columnas bien distribuidas y con buenos rangos de metadatos, Snowflake puede descartar microparticiones completas antes de escanearlas. Ese es uno de sus mecanismos más potentes. Pero si escribes filtros que impiden al motor usar metadatos, pierdes esa ventaja.
Ejemplos típicos de problemas: aplicar funciones sobre columnas filtradas, convertir tipos en tiempo de consulta, usar condiciones demasiado genéricas, consultar sin rango temporal o abusar de SELECT *. El motor puede seguir ejecutando la consulta, pero probablemente leerá mucho más de lo necesario.
Clustering: cuándo ayuda y cuándo es ruido
Las claves de clustering pueden ayudar cuando una tabla es grande, se consulta repetidamente por patrones estables y el orden natural de carga no favorece el pruning. Pero no son magia. Si una tabla es pequeña, si los filtros son muy variados o si el mantenimiento de clustering cuesta más de lo que ahorra, puede ser una mala decisión.
La pregunta correcta no es “¿debo clusterizar?”. La pregunta correcta es: ¿qué patrones de consulta necesito acelerar y qué coste operativo estoy dispuesto a pagar? Snowflake da herramientas para medir profundidad de clustering, partitions scanned, bytes scanned y evolución de rendimiento. Sin medición, el clustering es decoración cara.
Query Profile: mirar donde realmente duele
El Query Profile es una de las herramientas más importantes para entender Snowflake en producción. Permite ver operadores, escaneos, joins, agregaciones, reparticiones, spills y tiempos relativos. Si solo miras la duración total de una query, estás viendo el síntoma, no la causa.
Al analizar una consulta hay que revisar cuántas microparticiones se escanean, qué operadores dominan el tiempo, si existen spills a disco remoto, si los joins generan explosiones de cardinalidad y si el warehouse está infra o sobredimensionado. Optimizar Snowflake no es subir talla de warehouse a ciegas; es entender el plan físico.
Patrones prácticos de rendimiento
- Evita
SELECT *en procesos productivos y modelos analíticos. - Filtra por columnas con buen potencial de pruning, especialmente fechas o claves de particionado lógico.
- No envuelvas columnas filtradas en funciones si puedes evitarlo.
- Materializa capas intermedias cuando el coste de recomputar sea alto.
- Usa tablas transitorias o temporales con criterio para procesos ETL.
- Revisa Query Profile antes de cambiar arquitectura.
- Optimiza joins antes de culpar al warehouse.
- Mide coste, no solo tiempo.
Conclusión
Dominar Snowflake no consiste en saber escribir SQL estándar. Consiste en entender cómo almacena, cómo decide qué escanear, cómo distribuye trabajo y cómo convierte una consulta lógica en ejecución física. El SQL sigue siendo la interfaz, pero el rendimiento está debajo.
Si escribes Snowflake como si fuera una base de datos de 2010, pagarás con tiempo y créditos. Si entiendes microparticiones, pruning, clustering, perfiles de consulta y diseño de capas, Snowflake deja de ser una caja negra y se convierte en una plataforma realmente gobernable.




