Utiliser des clés primaires pour optimiser les pipelines de tables dynamiques¶
Snowflake peut utiliser des clés primaires pour suivre les modifications au niveau des lignes dans les tables dynamiques sans s’appuyer sur des colonnes de suivi des modifications. Cela permet une actualisation incrémentielle pour les pipelines qui exécutent des charges de travail d’insertion et de réécriture, y compris les tables dynamiques à actualisation complète, qui bloquent normalement le traitement incrémentiel en aval.
Les clés primaires sont particulièrement efficaces lorsqu’une charge de travail INSERT OVERWRITE est exécutée sur une table de base où seule une petite fraction des données est réellement modifiée. Dans ce cas, le suivi des modifications basé sur une clé primaire ne traite que les lignes modifiées au lieu de recalculer la table entière. Une clé primaire fournit un identificateur de lignes stable qui persiste en cas de réécriture.
Pour un arrière-plan conceptuel, voir Comprendre les clés primaires des tables dynamiques.
Améliorer les performances pour les charges de travail INSERT OVERWRITE¶
Lorsqu’une table de base est réécrite périodiquement via INSERT OVERWRITE, les colonnes de suivi des modifications standard sont réinitialisées et une table dynamique consommant la table de base verra un ensemble d’insertions et de suppressions pour toutes les lignes de la table de base.
Dans l’exemple suivant, un processus externe réécrit la dimension_table périodiquement, mais la plupart des lignes restent les mêmes :
Lorsque la table de dimension est réécrite via INSERTOVERWRITE, Snowflake utilise la clé primaire pour identifier les lignes de dimension effectivement modifiées et n’actualise que les faits concernés, plutôt que de recalculer l’intégralité de la jointure.
Activer l’actualisation incrémentielle en aval d’une table dynamique à actualisation complète¶
En principe, une table dynamique avec REFRESH_MODE = INCREMENTAL ne peut pas lire à partir d’une table dynamique avec REFRESH_MODE = FULL. Lorsque la table dynamique à actualisation complète possède une clé unique dérivée du système, vous pouvez définir explicitement le mode d’actualisation sur INCREMENTAL.
Exemple : Utiliser une clé primaire de table de base¶
Créez une table de base avec une clé primaire et définissez la propriété RELY pour que Snowflake l’utilise pour le suivi des modifications au niveau des lignes :
Créez une table dynamique à actualisation complète qui lit à partir de la table de base. Comme la table de base possède une clé primaire fiable, Snowflake peut dériver une clé unique de la table de base et l’enregistrer comme une contrainte unique pour la table dynamique :
Créez une table dynamique incrémentielle en aval. Cela fonctionne car la table en amont possède une clé unique fiable dérivée du système :
Exemple : Utiliser une clé primaire basée sur une requête¶
Lorsqu’une requête d’une table dynamique comprend une clause GROUP BY, Snowflake dérive automatiquement une clé unique à partir des colonnes de regroupement. Les tables en aval peuvent utiliser cette clé dérivée pour le suivi des modifications basé sur la clé primaire et activer les actualisations incrémentielles.
La table daily_sales possède une clé unique dérivée sur (sale_day, product_id), car GROUP BY garantit une ligne par combinaison. Une table en aval peut être actualisée de manière incrémentielle :
Vérifier les clés uniques dérivées du système sur une table dynamique¶
Pour voir si une table dynamique possède une clé unique dérivée, utilisez la commande SHOW UNIQUE KEYS :
Si la sortie contient une clé unique, la table dynamique prend en charge le suivi des modifications basé sur la clé primaire. Les tables dynamiques en aval peuvent utiliser REFRESH_MODE = INCREMENTAL pour la lire, même si elle utilise le mode d’actualisation complète.
Vous pouvez également vérifier la prise en charge en créant une table dynamique en aval avec REFRESH_MODE = INCREMENTAL. Si la table en amont ne possède pas de clé unique fiable, la création échoue avec une erreur.