Aller au contenu principal

Quand utiliser REPLACE WHERE ou des vues matérialisées ?

Les flux REPLACE WHERE et les vues matérialisées autonomes permettent de gérer des tables dérivées qui restent à jour à mesure que les données sources changent, mais ils résolvent des problèmes différents. Pour la plupart des charges de travail ETL (extraction, transformation et chargement) par batch qui écrasent périodiquement une fenêtre de temps ou une partition, utilisez un flux REPLACE WHERE incrémentiel. Utilisez des vues matérialisées pour une couche d’accélération de query qui fournit des résultats pré-calculés aux tableaux de bord et aux rapports.

Cette page couvre les tables de streaming autonomes et les vues matérialisées. Pour les flux REPLACE WHERE dans un pipeline Lakeflow, consultez Traitement par batch avec les flux REPLACE WHERE.

Utilisez REPLACE WHERE pour les écrasements de batch​

Un flux REPLACE WHERE recalcule et écrase uniquement les lignes qui correspondent à un prédicat, tel qu’une fenêtre temporelle ou une partition. Toutes les autres lignes restent inchangées. Comme le flux réévalue la query source pour cette plage de prédicats uniquement, le coût de chaque refresh dépend de la taille de la plage, et non de la taille de la table.

Une vue matérialisée conserve l'intégralité du résultat de sa query de définition. Databricks refresh une vue matérialisée de manière incrémentielle lorsque la query et les données sources le prennent en charge, et exécute sinon une refresh complète. Le fait qu’une refresh soit incrémentielle dépend de la structure de la query et des tables sources, de sorte que le coût de chaque refresh est plus difficile à prévoir. Voir Comment les vues matérialisées autonomes sont-elles actualisées ?.

Pour un modèle de données ETL en batch qui change dans des plages bornées, un flux REPLACE WHERE vous permet de contrôler exactement quelles lignes chaque refresh réécrit. Une vue matérialisée est plus adaptée lorsque les lecteurs ont besoin d'accéder rapidement à un résultat précalculé.

Mappage des structures sur les couches de médaillon​

Le tableau suivant fait correspondre chaque couche d'une architecture en médaillon à la construction recommandée par Databricks :

Couche

Construire

Pourquoi

Bronze (ingestion brute)

Ingestion avec Lakeflow Connect ou Auto Loader

Ingère les enregistrements bruts au fil de leur arrivée, sans retraitement historique.

Argent (faits)

Flux REPLACE WHERE incrémentiel

Écrase uniquement les fenêtres temporelles ou partitions affectées pour les mises à jour de faits, les données arrivées tardivement et les corrections.

Argent (dimensions)

AUTO CDC flux

Applique automatiquement la sémantique d'insertion, de mise à jour et de suppression et conserve l'historique avec la dimension à évolution lente (SCD) de type 1 ou 2.

Gold (agrégations et modèles de données)

Flux REPLACE WHERE incrémentiel

Recalcule uniquement la plage de prédicats pour les agrégats et les modèles, évitant ainsi les recalculs de table complète.

Accélération et service de la query

vue matérialisée

Fournit des résultats précalculés aux tableaux de bord et aux rapports et maintient les résultats de la query à jour.

Couche

Construire

Pourquoi

Bronze (ingestion brute)

Ingestion avec Lakeflow Connect ou Auto Loader

Ingère les enregistrements bruts au fil de leur arrivée, sans retraitement historique.

Argent (faits)

Flux REPLACE WHERE incrémentiel

Écrase uniquement les fenêtres temporelles ou partitions affectées pour les mises à jour de faits, les données arrivées tardivement et les corrections.

Argent (dimensions)

AUTO CDC flux

Applique automatiquement la sémantique d'insertion, de mise à jour et de suppression et conserve l'historique avec la dimension à évolution lente (SCD) de type 1 ou 2.

Gold (agrégations et modèles de données)

Flux REPLACE WHERE incrémentiel

Recalcule uniquement la plage de prédicats pour les agrégats et les modèles, évitant ainsi les recalculs de table complète.

Accélération et service de la query

vue matérialisée

Fournit des résultats précalculés aux tableaux de bord et aux rapports et maintient les résultats de la query à jour.

Guide de décision​

Utilisez le guide suivant pour choisir entre les deux constructions.

Utilisez un flux REPLACE WHERE lorsque vous :

  • Effectuez des écrasements par batch périodiques d’une fenêtre de temps ou d’une partition.
  • Corrigez les données arrivées tardivement.
  • Appliquer les suppressions de conformité à une plage bornée.
  • refresh les données au niveau de la partition.

Utilisez une vue matérialisée lorsque vous :

  • Accélérer les query des tableaux de bord.
  • Servez des agrégations précalculées aux lecteurs.
  • Maintenir les résultats de la query à jour pour une couche service.

Exemple : écrasement incrémentiel avec REPLACE WHERE​

L'exemple suivant définit une table cible qui ne remplace que les 7 derniers jours de données à chaque refresh. Pendant le refresh, le flux supprime les lignes correspondant au prédicat, recalcule la query source pour cette même plage et insère les résultats. Les lignes situées en dehors de la fenêtre restent inchangées :

SQL
CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME est requis pour que les colonnes correspondent par leur nom et non par leur position. Pour la syntaxe complète, les substitutions de prédicats, le remplissage (backfill) et le comportement de refresh incrémentiel, voir Flux REPLACE WHERE pour les tables de streaming autonomes.

Ressources supplémentaires​