Cómo funciona la caché en Snowflake

Automatización de canalizaciones de datos en Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Tres capas de caché

Capas de caché.png

Snowflake cachea resultados en tres niveles — cada uno con distinto alcance y duración

  • Result cache — guarda resultados completos y los devuelve sin arrancar un warehouse
  • Warehouse o data cache — micro‑particiones recientes en memoria y SSD
  • Metadata cache — siempre activo; estadísticas de tablas para el planificador
Automatización de canalizaciones de datos en Snowflake

Cuándo se usa la Result Cache (y cuándo no)

Diagrama de flujo de la Result Cache de Snowflake que muestra una consulta devolviendo al instante un resultado en caché al usuario

Condición Fallo de caché cuando…
El texto de la consulta coincide exacto Difieren mayúsculas, espacios o alias
Sin funciones no reutilizables funciones que cambian entre ejecuciones: RANDOM
Tablas subyacentes sin cambios Hubo DML, reclustering o consolidación desde la última ejecución
Resultado persistido aún disponible TTL de 24 h sin reutilizar, o 31 días
El rol tiene los privilegios requeridos SELECT: al rol le faltan privilegios SHOW: rol distinto
Automatización de canalizaciones de datos en Snowflake

Warehouse cache y Metadata cache

Diagrama de la data cache de Snowflake mostrando aciertos y fallos de caché en el warehouse

Warehouse cache

  • Guarda micro‑particiones escaneadas recientemente en SSD + memoria del warehouse
  • Se borra al suspender el warehouse
  • Ajusta el auto-suspend lo bastante alto para conservar la caché

Metadata cache

  • Siempre activa; vive en Cloud Services
  • Guarda estadísticas de tablas
  • Algunas consultas se responden solo con metadatos
Automatización de canalizaciones de datos en Snowflake

Patrones SQL que impiden el partition pruning

Evita el pruning:

SELECT *
FROM logistics.shipments
WHERE MONTH(dispatch_date) = 3;

Permite el pruning:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Automatización de canalizaciones de datos en Snowflake

Dos patrones SQL más a evitar

Evita SELECT *

-- Lee todas las columnas
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Lee solo lo necesario
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Evita cross joins implícitos

-- Falta condición de join = cartesiano
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- JOIN explícito con condición ON
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Automatización de canalizaciones de datos en Snowflake

¡Vamos a practicar!

Automatización de canalizaciones de datos en Snowflake

Preparing Video For Download...