Tables dynamiques comparées aux flux et aux tâches, ainsi qu’aux vues matérialisées

À l’instar des flux et des tâches, les tables dynamiques offrent un moyen de transformer les données dans votre pipeline.

Les tables dynamiques comparées aux flux et aux tâches

Bien que les tables dynamiques aient un objectif similaire en comparaison des tâches, il existe des différences importantes.

Comparison between streams/tasks and dynamic tables

Flux et tâches

Tables dynamiques

Les tâches utilisent une approche impérative : vous écrivez un code procédural pour transformer les données des tables de base.

Les tables dynamiques utilisent une approche déclarative : vous écrivez une requête qui spécifie le résultat que vous voulez obtenir, et les données sont extraites et transformées à partir des tables de base utilisées dans la requête.

Vous définissez un calendrier d’exécution du code qui transforme les données.

Un processus d’actualisation automatisé détermine le calendrier d’exécution des actualisations. Le processus planifie ces actualisations afin de respecter le niveau d’actualisation cible spécifié (latence).

Le code procédural peut contenir des appels à du code non déterministe, des procédures stockées et d’autres tâches. Le code procédural peut contenir des appels à des UDFs et à des fonctions externes.

Bien que l’instruction SELECT pour une table dynamique puisse contenir des jointures, des agrégations, des fonctions de fenêtre et d’autres fonctions et constructions SQL, l’instruction ne peut pas contenir d’appels à des procédures stockées et à des tâches. Actuellement, l’instruction SELECT ne peut pas non plus contenir d’appels à des fonctions externes.

Cette limitation est due à la manière dont les tables dynamiques sont actualisées. Pour actualiser les données, un processus automatisé analyse l’instruction SELECT pour la table dynamique afin de déterminer la meilleure approche pour actualiser les données. Le processus automatisé ne peut pas le déterminer pour certains types de requêtes.

Pour la liste complète des restrictions relatives à l’instruction SELECT, voir Types de requêtes prenant en charge les actualisations incrémentielles et Constructions de requête non prises en charge actuellement dans les tables dynamiques.

Les tâches peuvent utiliser des flux pour actualiser les données des tables cibles de manière incrémentielle. Vous pouvez programmer l’exécution de ces tâches à intervalles réguliers.

Un processus d’actualisation automatisé effectue régulièrement des actualisations incrémentielles des tables dynamiques. Le processus détermine le calendrier, sur la base d’un objectif de niveau d’actualisation des données que vous spécifiez.

Comparatif entre les tables dynamiques et les vues matérialisées

Les tables dynamiques présentent certaines similitudes avec les vues matérialisées dans la mesure où toutes deux matérialisent les résultats d’une requête. Il existe toutefois des différences importantes :

Vues matérialisées

Tables dynamiques

Les vues matérialisées sont conçues pour améliorer les performances des requêtes de manière transparente.

Par exemple, si vous interrogez la table de base, l’optimiseur de requêtes de Snowflake peut réécrire la requête automatiquement pour interroger la vue matérialisée à la place.

Les tables dynamiques sont conçus pour construire des pipelines de données à plusieurs niveaux.

Bien que les tables dynamiques puissent améliorer les performances des requêtes, l’optimiseur de requêtes de Snowflake ne réécrit pas automatiquement les requêtes pour utiliser les tables dynamiques. Une table dynamique n’est utilisée dans une requête que si vous la spécifiez dans la requête.

Une vue matérialisée ne peut utiliser qu’une seule table de base. Une vue matérialisée ne peut pas être basée sur une requête complexe (c’est-à-dire une requête avec des jointures ou des vues imbriquées).

Une table dynamique peut être basée sur une requête complexe, y compris une requête avec des jointures et des unions.

Les données auxquelles on accède par l’intermédiaire des vues matérialisées sont toujours à jour. Si une opération DML modifie les données de la table de base, Snowflake met à jour la vue matérialisée ou utilise les données mises à jour à partir de la table de base.

Les données sont actuelles jusqu’au temps de latence cible de la table dynamique.

La maintenance des vues matérialisées est automatiquement gérée par un service de calcul distinct, y compris la logique d’actualisation, en même temps que le calcul des mises à jour, généralement moyennant un coût supplémentaire.