Fermer

juillet 6, 2022

Comment implémenter le chargement incrémentiel dans Snowflake à l’aide de Stream and Merge

Comment implémenter le chargement incrémentiel dans Snowflake à l’aide de Stream and Merge


Snowflake est une base de données relationnelle hébergée dans le cloud utilisée pour créer un entrepôt de données à la demande. Les données de l’entrepôt de données peuvent être chargées en chargement complet ou en chargement incrémentiel. Le chargement complet est un processus de suppression de toutes les données existantes et de leur rechargement. Les chargements complets sont des tâches consommatrices de temps et de ressources par rapport aux chargements incrémentiels qui ne chargent qu’une petite quantité de données nouvelles ou mises à jour au lieu de charger des données complètes à chaque fois. Nous pouvons obtenir un chargement incrémentiel dans snowflake en implémentant la capture de données modifiées (CDC) à l’aide d’objets Stream et Merge. L’objet de flux est utilisé pour la capture de données modifiées, qui comprend des insertions, des mises à jour et des suppressions, ainsi que des métadonnées sur chaque modification afin que des actions puissent être entreprises à l’aide des données modifiées. Les données capturées à l’aide du flux sont ensuite fusionnées dans la table cible à l’aide de la condition de correspondance et de non-correspondance.

Qu’est-ce que la diffusion et la fusion ?

Fusionner

La commande Fusionner est utilisée pour effectuer des modifications sur la table, pour mettre à jour les enregistrements existants, supprimer les enregistrements anciens/inactifs ou ajouter de nouvelles lignes à partir d’une autre table.

Snowflake propose deux clauses pour effectuer la fusion :

  1. Matched Clause – Matched Clause effectue une opération de mise à jour et de suppression sur la table cible lorsque les lignes satisfont à la condition.
  2. Clause non concordante – La clause non concordante effectue l’opération d’insertion lorsque la ligne remplissant les conditions ne correspond pas. Les lignes de la table source qui ne correspondent pas à la table cible seront insérées.

Flux

Stream est une table créée en haut de la source pour capturer les données de modification ; il suit les modifications apportées aux lignes de la table source.

L’objet de flux créé contient uniquement le décalage à partir duquel la capture des données modifiées peut être suivie, cependant, les données principales dans la source restent inchangées.

3 colonnes supplémentaires sont ajoutées à la table source dans un flux-

ColonneLa description
MÉTADONNÉES$ACTIONIl ne peut avoir que deux valeurs Insert/Delete
METADONNEES$ISUPDATECe sera marqué comme vrai si l’enregistrement est une mise à jour
MÉTADONNÉES$ROW_IDIl existe des clés de hachage uniques qui seront suivies pour chaque modification.

Comme nous savons maintenant ce qu’est stream and merge , Voyons comment utiliser stream and merge pour charger les données-

Étape 1-

Connectez-vous à la base de données Snowflake et créez des exemples de tables source et cible

Capture1

Étape 2-

Créer un flux sur la table source en utilisant la requête ci-dessous-

Photo2

Étape 3

Insérons des données factices dans la table source-

Photo3

Après avoir inséré des données dans la source, vérifions les données capturées dans le flux-

Photo4

Comme nous avons inséré des données pour la première fois dans la source, les lignes nouvellement insérées seront marquées comme INSERT dans la colonne METADATA$ACTION et METADATA$UPDATE comme FALSE dans le flux.

Étape 4-

Insérez les données dans la cible en utilisant le flux et fusionnez en utilisant la requête ci-dessous-

Photo5

Comme nous insérons des données la première fois, il n’y aura pas de correspondance identifiant personnel dans la table cible et que le drapeau METADATA$ACTION est INSERT, la commande de fusion insérera toutes les données dans la table cible telles quelles.

Photo6

Étape 5

Mettons à jour quelques lignes source et chargeons-les à nouveau dans la cible-

Photo7

Dès que nous mettons à jour la table source, le flux capture ces modifications et met à jour les données du flux.

Photo8

La ligne mise à jour sera marquée comme INSERT et l’ancienne ligne que nous avons mise à jour sera marquée comme Supprimer dans la colonne METADATA$ACTION. de sorte que lorsque nous chargeons des données mises à jour de la source vers la cible, une ligne plus ancienne avec City Nagpur sera supprimée et une ligne mise à jour avec City Mumbai sera insérée.

Exécutez à nouveau la même commande de flux et de fusion que nous avons utilisée précédemment pour charger uniquement les données mises à jour dans la cible, les données cibles mises à jour ressembleront à ceci-

Image9

Ici, vous avez réussi à effectuer un chargement incrémentiel à l’aide de flocon de neige.

Pour automatiser ce processus de chargement, nous pouvons créer une tâche, cette tâche s’exécutera après un intervalle de temps spécifié et chargera les données dans la cible s’il y a des changements de source.

Bonne lecture!






Source link