So funktioniert Caching in Snowflake

Automatisierung von Datenpipelines in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Drei Caching-Ebenen

Caching-Ebenen.png

Snowflake cached Ergebnisse auf drei Ebenen — jeweils mit anderer Reichweite und Dauer

  • Result Cache — speichert komplette Abfrageergebnisse und liefert sie ohne Warehouse-Lauf zurück
  • Warehouse-/Datencache — kürzlich gescannte Mikro-Partitionen in Speicher und SSD
  • Metadata Cache — immer aktiv; Tabellenstatistiken für die Planerstellung
Automatisierung von Datenpipelines in Snowflake

Wann der Result Cache greift (und wann nicht)

Snowflake-Result-Cache: Flussdiagramm zeigt, wie eine Abfrage sofort ein gecachtes Ergebnis zurückgibt

Bedingung Cache-Miss, wenn …
Abfragetext exakt identisch Groß-/Kleinschreibung, Leerzeichen oder Aliase abweichen
Keine nicht-wiederverwendbaren Funktionen Funktionen ändern sich pro Lauf: RANDOM
Zugrunde liegende Tabellen unverändert Seit letztem Lauf DML, Re-Clustering oder Konsolidierung
Persistiertes Ergebnis verfügbar 24‑h‑TTL ohne Nutzung abgelaufen oder 31 Tage
Rolle hat nötige Berechtigungen SELECT: Rolle fehlt Berechtigung; SHOW: andere Rolle
Automatisierung von Datenpipelines in Snowflake

Warehouse-Cache und Metadata Cache

Snowflake-Datencache: Diagramm mit Cache-Hit vs. Cache-Miss im Warehouse

Warehouse-Cache

  • Speichert zuletzt gescannte Mikro-Partitionen auf Warehouse-SSD und im Speicher
  • Wird geleert, wenn das Warehouse pausiert
  • Auto-Suspend lang genug setzen, um Cache zu erhalten

Metadata Cache

  • Immer aktiv, in den Cloud Services
  • Speichert Tabellenstatistiken
  • Manche Abfragen nur aus Metadaten beantwortet
Automatisierung von Datenpipelines in Snowflake

SQL‑Muster, die Partition Pruning verhindern

Verhindert Pruning:

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

Ermöglicht Pruning:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Automatisierung von Datenpipelines in Snowflake

Zwei weitere SQL‑Muster, die du vermeiden solltest

SELECT * vermeiden

-- Liest alle Spalten
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Liest nur das Nötige
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Implizite Cross-Joins vermeiden

-- Fehlende Join-Bedingung = kartesisch
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- Explizites JOIN mit ON-Bedingung
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Automatisierung von Datenpipelines in Snowflake

Lass uns üben!

Automatisierung von Datenpipelines in Snowflake

Preparing Video For Download...