Fonctionnement du cache dans Snowflake

Automatisation des pipelines de données dans Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Trois niveaux de cache

Couches de cache.png

Snowflake met en cache à trois niveaux — chacun avec une portée et une durée différentes

  • Cache de résultats — stocke les résultats complets et les renvoie sans démarrer d'entrepôt
  • Cache d'entrepôt (données) — micro‑partitions récemment lues en mémoire et sur SSD
  • Cache de métadonnées — toujours actif ; statistiques de tables pour la planification
Automatisation des pipelines de données dans Snowflake

Quand le cache de résultats est utilisé (ou non)

Schéma du flux du cache de résultats Snowflake montrant une requête renvoyant instantanément un résultat en cache à l’utilisateur

Condition Échec du cache quand…
Le texte de requête correspond exactement La casse, les espaces ou les alias diffèrent
Aucune fonction non réutilisable fonctions qui changent entre exécutions : RANDOM
Tables sous-jacentes inchangées DML, reclustering ou consolidation depuis la dernière exécution
Résultat persistant encore disponible TTL de 24 h écoulé sans réutilisation, ou 31 jours
Le rôle a les privilèges requis SELECT : rôle sans privilèges ; SHOW : rôle différent
Automatisation des pipelines de données dans Snowflake

Cache d'entrepôt et cache de métadonnées

Schéma du cache de données Snowflake montrant des scénarios de succès et d’échec du cache d’entrepôt

Cache d'entrepôt

  • Stocke les micro‑partitions récemment lues sur SSD + mémoire de l'entrepôt
  • Vider lors de la suspension de l'entrepôt
  • Régler l'auto‑suspension assez long pour préserver le cache

Cache de métadonnées

  • Toujours actif, dans Cloud Services
  • Stocke les statistiques de tables
  • Certaines requêtes répondues via les seules métadonnées
Automatisation des pipelines de données dans Snowflake

Modèles SQL qui empêchent l'élagage de partitions

Empêche l'élagage :

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

Autorise l'élagage :

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Automatisation des pipelines de données dans Snowflake

Deux autres modèles SQL à éviter

Éviter SELECT *

-- Lit toutes les colonnes
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Ne lit que le nécessaire
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

Éviter les jointures croisées implicites

-- Condition de jointure manquante = cartésien
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- JOIN explicite avec condition ON
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Automatisation des pipelines de données dans Snowflake

Passons à la pratique !

Automatisation des pipelines de données dans Snowflake

Preparing Video For Download...