Configurer les transferts incrémentiels pour Snowflake

Ce guide vous explique comment configurer des transferts de données incrémentiels de Snowflake vers BigQuery. Les transferts incrémentiels vous permettent de ne transférer que les données qui ont été modifiées depuis la dernière exécution du transfert, ce qui peut réduire le temps et les coûts de transfert.

Limites

Les transferts Snowflake incrémentiels sont soumis aux limitations suivantes :

  • Vous devez fournir des colonnes de clé primaire pour utiliser le mode écriture "upsert". Pour en savoir plus, consultez Définir des clés primaires pour les transferts incrémentiels.
  • Les clés primaires doivent être uniques dans la table source. S'il existe des doublons, les résultats de l'opération de fusion dans BigQuery peuvent être incohérents et ne pas correspondre aux données sources.
  • La gestion automatique des modifications de schéma avec les transferts incrémentaux n'est pas disponible. Si le schéma d'une table source change, vous devez mettre à jour manuellement le schéma de la table BigQuery.
  • Les transferts incrémentiels fonctionnent mieux lorsque les modifications apportées à vos données sources sont concentrées dans un petit nombre de partitions. Les performances de transfert incrémentiel peuvent se dégrader de manière significative si les mises à jour sont dispersées dans la table source, car cela nécessite d'analyser de nombreuses partitions. Si de nombreuses lignes sont modifiées entre les transferts de données, nous vous recommandons d'utiliser plutôt un transfert complet.
  • Certaines opérations dans Snowflake, telles que CREATE OR REPLACE TABLE ou CLONE, peuvent écraser l'objet de table d'origine et son historique de suivi des modifications associé. Les transferts de données existants deviennent obsolètes et une nouvelle synchronisation complète est nécessaire pour reprendre les transferts incrémentiels.
  • Les transferts incrémentaux doivent être exécutés assez souvent pour respecter la période de conservation des données de Snowflake pour le suivi des modifications. Si le dernier transfert réussi a été exécuté en dehors de cette période, le prochain transfert sera un transfert complet.

Configurer les transferts incrémentaux

Vous pouvez configurer des transferts incrémentiels en sélectionnant la préférence d'écriture Incrémentiel dans la configuration du transfert lorsque vous configurez un transfert Snowflake.

Si vous sélectionnez Incrémentiel pour votre transfert de données, vous pouvez transférer les données en mode d'écriture Ajouter ou Upsert, qui définissent la façon dont les données sont écrites dans BigQuery lors d'un transfert de données incrémentiel. Pour activer le mode écriture Upsert, vous devez définir une clé primaire dans un fichier de schéma personnalisé. Si aucune clé primaire n'est définie, le transfert utilise par défaut le mode d'écriture Ajouter. Les sections suivantes décrivent les modes d'écriture disponibles.

Mode d'écriture "Ajouter"

Le mode d'écriture "Ajouter" n'insère que de nouvelles lignes dans votre table de destination. Cette option décharge strictement les nouvelles lignes insérées dans la table source et ajoute les données transférées sans vérifier s'il existe des enregistrements, ce qui peut potentiellement entraîner une duplication des données dans la table de destination.

Mode d'écriture "Upsert"

Le mode d'écriture "Upsert" vous permet de mettre à jour, d'insérer ou de supprimer des enregistrements dans votre table de destination à l'aide d'une clé primaire. Si la clé primaire spécifiée est présente dans la table BigQuery de destination, le connecteur Snowflake insère, met à jour ou supprime correctement les enregistrements pour refléter les modifications. Si la clé primaire n'est pas présente dans la table de destination, le connecteur insère de nouveaux enregistrements pour les insertions ou les mises à jour de la source, tandis que les suppressions sont ignorées dans ce cas.

Pour utiliser le mode d'écriture "upsert" avec votre transfert de données incrémentiel, vous devez définir des clés primaires dans votre fichier de schéma personnalisé. Tenez compte des points suivants lorsque vous choisissez une clé primaire :

  • La clé primaire peut être une ou plusieurs colonnes de votre tableau qui sont nécessaires pour que le connecteur identifie les enregistrements à mettre à jour.

  • Sélectionnez les colonnes contenant des valeurs non nulles uniques pour toutes les lignes du tableau. Nous vous recommandons d'utiliser des colonnes qui incluent des identifiants générés par le système, des codes de référence uniques (par exemple, des ID à incrémentation automatique) ou des ID de séquence immuables basés sur le temps.

  • Pour éviter toute perte ou corruption de données, les colonnes de clé primaire que vous sélectionnez doivent contenir des valeurs uniques. Si vous avez des doutes sur l'unicité de la colonne de clé primaire choisie, nous vous recommandons d'utiliser le mode d'écriture "Ajouter" ou l'ingestion complète.

Comportement des modifications de schéma

Les transferts incrémentiels ne sont pas compatibles avec l'évolution du schéma. Toute modification apportée au schéma de la table source, comme l'ajout, la suppression ou le renommage de colonnes, ou la modification des types de données des colonnes, entraînera l'échec des exécutions de transfert incrémentiel ultérieures. Si le schéma source change, vous devez exécuter un transfert de données complet pour resynchroniser les données.

Fichier de schéma personnalisé pour les transferts incrémentaux

Vous pouvez utiliser un fichier de schéma personnalisé pour définir des clés primaires pour les transferts incrémentaux et pour personnaliser le mappage de schéma. Un fichier de schéma personnalisé est un fichier JSON qui décrit le schéma source et cible.

Pour les transferts incrémentiels en mode Upsert, vous devez identifier une ou plusieurs colonnes comme clés primaires. Pour ce faire, annotez les colonnes avec le type d'utilisation PRIMARY_KEY dans le fichier de schéma personnalisé.

L'exemple suivant montre un fichier de schéma personnalisé qui définit O_ORDERKEY et O_ORDERDATE comme clés primaires pour la table orders :


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Activer le suivi des modifications

Avant de pouvoir configurer un transfert Snowflake incrémentiel, vous devez activer le suivi des modifications sur chaque table source à l'aide de la commande suivante :

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

Si le suivi des modifications n'est pas activé pour une table, le connecteur Snowflake effectue par défaut un transfert complet des données pour cette table.

Étapes suivantes

Une fois que vous avez configuré toutes les étapes requises pour un transfert Snowflake incrémentiel, vous pouvez activer les transferts incrémentiels pour votre configuration de transfert Snowflake. Pour en savoir plus, consultez Configurer un transfert Snowflake.