Fonctionnement de la mise en cache dans Snowflake

Automatisation des pipelines de données dans Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Trois couches de mise en cache

Couches de mise en cache.png

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

  • Cache des résultats — stocke des résultats complets et les renvoie sans démarrer d’entrepôt
  • Cache d’entrepôt ou de données — micro-partitions récemment lues en mémoire et SSD
  • Cache des métadonnées — toujours actif; stats de table pour la planif. des requêtes
Automatisation des pipelines de données dans Snowflake

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

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

Condition Échec du cache lorsque…
Le texte de la requête correspond exactement Casse, espaces ou alias diffèrent
Aucune fonction non réutilisable fonctions variant entre exécutions : RANDOM
Tables sous-jacentes inchangées DML, reclustering ou consolidation depuis la dernière exécution
Résultat persistant encore dispo 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 des métadonnées

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

Cache d’entrepôt

  • Stocke des micro-partitions récemment lues sur SSD + mémoire de l’entrepôt
  • Effacé quand l’entrepôt se met en veille
  • Garder l’auto-suspension assez longue pour préserver le cache

Cache des métadonnées

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

Modèles SQL qui empêchent l’élagage des partitions

Empêche l’élagage :

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

Permet 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...