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 des transferts incrémentiels
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 TABLEouCLONE, 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.
Comportement d'ingestion des données
Vous pouvez spécifier la façon dont les données sont chargées dans BigQuery en sélectionnant la préférence d'écriture Complète ou Incrémentielle dans la configuration du transfert lorsque vous configurez un transfert Snowflake. Les transferts incrémentiels sont disponibles en version preview.
Vous pouvez configurer un transfert de données complet pour transférer toutes les données de vos ensembles de données Snowflake à chaque transfert de données.Vous pouvez également configurer un transfert de données incrémentiel (aperçu) pour ne transférer que les données modifiées depuis le dernier transfert de données, au lieu de charger l'intégralité de l'ensemble de données à chaque transfert. Si vous sélectionnez Incrémentiel pour votre transfert de données, vous devez spécifier les modes d'écriture Ajouter ou Upsert pour définir la façon dont les données sont écrites dans BigQuery lors d'un transfert de données incrémentiel. 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 ajoute strictement les données transférées sans vérifier s'il existe des enregistrements, ce qui peut entraîner une duplication des données dans la table de destination.
Lorsque vous sélectionnez le mode "Ajouter", vous devez sélectionner une colonne de filigrane. Une colonne de filigrane est requise pour que le connecteur Snowflake puisse suivre les modifications apportées à la table source.
Pour les transferts Snowflake, nous vous recommandons de sélectionner une colonne qui n'est mise à jour que lorsque l'enregistrement a été créé et qui ne changera pas lors des mises à jour ultérieures. Par exemple, la colonneCREATED_AT.
Mode d'écriture "Upsert"
Le mode d'écriture "upsert" met à jour une ligne ou en insère une nouvelle dans votre table de destination en recherchant une clé primaire. Vous pouvez spécifier une clé primaire pour permettre au connecteur Snowflake de déterminer les modifications nécessaires pour maintenir votre table de destination à jour avec votre table source. Si la clé primaire spécifiée est présente dans la table BigQuery de destination lors d'un transfert de données, le connecteur Snowflake met à jour cette ligne avec les nouvelles données de la table source. Si aucune clé primaire n'est présente lors d'un transfert de données, le connecteur Snowflake insère une nouvelle ligne.
Lorsque vous sélectionnez le mode "Upsert", vous devez sélectionner une colonne de filigrane et une clé primaire :
- Une colonne de filigrane est requise pour que le connecteur Snowflake puisse suivre les modifications apportées à la table source.
- Sélectionnez une colonne de filigrane qui est mise à jour chaque fois qu'une ligne est modifiée. Nous vous recommandons d'utiliser des colonnes semblables à celles de type
UPDATED_ATouLAST_MODIFIED.
- Sélectionnez une colonne de filigrane qui est mise à jour chaque fois qu'une ligne est modifiée. Nous vous recommandons d'utiliser des colonnes semblables à celles de type
La clé primaire peut être une ou plusieurs colonnes de votre table. Elle est nécessaire pour que le connecteur Snowflake puisse déterminer s'il doit insérer ou mettre à jour une ligne.
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 plutôt le mode d'écriture "Ajouter".
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é.
Comportement d'ingestion incrémentielle
Lorsque vous modifiez le schéma de table dans votre source de données, les transferts de données incrémentiels à partir de ces tables sont reflétés dans BigQuery de la manière suivante :
| Modifications apportées à la source de données | Comportement d'ingestion incrémentielle |
|---|---|
| Ajouter une colonne | Une colonne est ajoutée à la table BigQuery de destination. Les enregistrements précédents pour cette colonne auront des valeurs nulles. |
| Supprimer une colonne | La colonne supprimée reste dans la table BigQuery de destination. Les nouvelles entrées de cette colonne supprimée sont renseignées avec des valeurs nulles. |
| Modifier le type de données d'une colonne | Le connecteur n'accepte que les
conversions de types de données compatibles avec l'instruction LDD ALTER COLUMN.
Toute autre conversion de type de données entraînera l'échec du transfert de données.
Si vous rencontrez des problèmes, nous vous recommandons de créer une configuration de transfert. |
| Renommer une colonne | La colonne d'origine reste telle quelle dans la table BigQuery de destination, tandis qu'une nouvelle colonne est ajoutée à la table de destination avec le nom modifié. |
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.