Hoe caching werkt in Snowflake

Automatisering van datapijplijnen in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Drie cachinglagen

Cachinglagen.png

Snowflake cachet resultaten op drie niveaus — elk met eigen scope en duur

  • Result cache — slaat volledige queryresultaten op en retourneert ze zonder warehouse te starten
  • Warehouse- of datacache — recent gescande micro-partitions in geheugen en SSD
  • Metadata‑cache — altijd aan; tabelstatistieken voor queryplanning
Automatisering van datapijplijnen in Snowflake

Wanneer de Result Cache wordt gebruikt (en wanneer niet)

Snowflake Query Result Cache-stroomdiagram met een query die direct een gecachet resultaat aan de gebruiker teruggeeft

Voorwaarde Cache-miss wanneer…
Querytekst komt exact overeen Hoofdletters, spaties of aliassen verschillen
Geen niet-herbruikbare functies functies die per run veranderen: RANDOM
Onderliggende tabellen ongewijzigd DML, reclustering of consolidatie sinds vorige run
Bestaand resultaat nog beschikbaar 24-uurs TTL verlopen zonder hergebruik, of 31 dagen
Rol heeft vereiste rechten SELECT: rol mist rechten SHOW: andere rol
Automatisering van datapijplijnen in Snowflake

Warehouse‑cache en Metadata‑cache

Snowflake datacache-diagram met cache-hit versus cache-miss scenario's voor warehouses

Warehouse‑cache

  • Slaat recent gescande micro-partitions op op warehouse‑SSD + in geheugen
  • Leeg bij onderbreken van het warehouse
  • Stel auto‑suspend lang genoeg in om de cache te behouden

Metadata‑cache

  • Altijd aan, draait in Cloud Services
  • Slaat tabelstatistieken op
  • Sommige queries beantwoord alleen met metadata
Automatisering van datapijplijnen in Snowflake

SQL‑patronen die partition pruning voorkomen

Voorkomt pruning:

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

Maakt pruning mogelijk:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Automatisering van datapijplijnen in Snowflake

Nog twee SQL‑patronen om te vermijden

Vermijd SELECT *

-- Leest elke kolom
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Leest alleen wat nodig is
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Vermijd impliciete cross-joins

-- Ontbrekende join-voorwaarde = Cartesian
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- Expliciete JOIN met ON-voorwaarde
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Automatisering van datapijplijnen in Snowflake

Laten we oefenen!

Automatisering van datapijplijnen in Snowflake

Preparing Video For Download...