Configuration de la réplication pour Snowflake Connector for MySQL

Note

Le Snowflake Connector for MySQL est soumis aux Conditions du connecteur.

Le processus de configuration de la réplication pour Snowflake Connector for MySQL est le suivant :

Et en option :

Ajout d’une source de données

Une source de données est une représentation d’un seul serveur MySQL. Snowflake Connector for MySQL peut répliquer des données provenant de plusieurs sources de données. Avant de démarrer la réplication, vous devez ajouter au moins une source de données.

Snowflake Connector for MySQL réplique les données de chaque source de données dans une base de données de destination distincte dans Snowflake. La même base de données de destination ne peut pas être utilisée par plusieurs sources de données.

Pour ajouter une source de données, exécutez la commande suivante :

CALL PUBLIC.ADD_DATA_SOURCE('<data_source_name>', '<dest_db>');
Copy

Où :

data_source_name

Spécifie le nom unique de la source de données. Le nom doit correspondre au nom d’une source de données définie dans la configuration de l’agent. Assurez-vous que le nom sélectionné remplit les conditions suivantes :

  • Le nom contient uniquement des lettres majuscules (AZ) et des chiffres décimaux (0-9).

  • Le nom ne peut pas dépasser 50 caractères.

dest_db

Spécifie le nom de la base de données de destination dans Snowflake. Si la base de données n’existe pas, la procédure la crée automatiquement. Sinon, le connecteur utilise une base de données existante. Dans ce cas, vous devez accorder au connecteur des privilèges sur la base de données avant d’ajouter une source de données.

Note

Une fois ajoutée, une source de données ne peut pas être renommée ni abandonnée.

(Facultatif) Octroi de privilèges sur la base de données de destination

Pour utiliser une base de données existante comme base de données de destination, Snowflake Connector for MySQL nécessite l’autorisation CREATE SCHEMA sur cette base de données. Le connecteur est le propriétaire des schémas et des tables contenant les données MySQL ingérées.

Pour accorder l’autorisation CREATE SCHEMA, exécutez la commande suivante :

GRANT CREATE SCHEMA ON DATABASE <dest_db> TO APPLICATION <app_db_name>;
Copy

Où :

dest_db

Spécifie le nom de la base de données de destination des données d’une source de données.

app_db_name

Spécifie le nom de la base de données du connecteur.

Ajout d’autres sources de données

Vous pouvez ajouter de nouvelles sources de données à tout moment. Pour ajouter une nouvelle source de données alors que l’agent est déjà en cours d’exécution, procédez comme suit :

  1. Ajoutez une source de données.

  2. Assurez-vous que l’agent est arrêté.

  3. Configurez la connexion de l’agent à la nouvelle source de données.

  4. Exécutez le conteneur Docker de l’agent.

Ajouter une table source pour la réplication

Pour ajouter des tables sources pour la réplication, exécutez la commande suivante :

CALL PUBLIC.ADD_TABLES('<data_source_name>', '<schema_name>', <table_names_array>);
Copy

Où :

data_source_name

Spécifie le nom de la source de données qui contient la table source.

schema_name

Spécifie le nom du schéma de la table source.

table_names_array
Spécifie le tableau de noms de table :

ARRAY_CONSTRUCT('<table_name>', '<other_table_name>', ...)

L’ajout d’une table source a les effets suivants :

  • schema_name et table_name sont utilisés respectivement comme nom de schéma et nom de table pour répliquer les données sources à partir de la base de données source.

Note

Dans un appel de procédure, vous pouvez ajouter plusieurs tables provenant de la même source de données et du même schéma.

Note

Les noms de schéma et de table doivent correspondre

Vous devez utiliser exactement le même nom de table et le même nom de schéma, casse comprise, que ceux définis dans la base de données source. Les noms que vous fournissez sont utilisés mot pour mot pour générer la requête SELECT dans la base de données source. Les noms de serveur MySQL peuvent être sensibles à la casse et l’utilisation d’une casse différente peut entraîner une exception « La table n’existe pas ».

Tables récemment retirées

Si des tables ont été récemment retirées (Retirer une table de la réplication), il se peut qu’il ne soit pas possible de les rajouter à ce stade de la configuration. Si une erreur accompagnée d’un message Tables are not ready to be re-added apparaît, attendez quelques minutes avant de réessayer.

Ajouter une table source avec des filtres de colonne

Pour ajouter une table source avec des colonnes filtrées, exécutez la commande suivante :

CALL PUBLIC.ADD_TABLE_WITH_COLUMNS('<data_source_name>', '<schema_name>', '<table_name>', <included_columns_array>, <excluded_columns_array>);
Copy

Où :

data_source_name

Spécifie le nom de la source de données qui contient la table source.

schema_name

Spécifie le nom du schéma de la table source.

table_name

Spécifie le nom de la table source.

included_columns
Spécifie le tableau de noms de colonne qui doivent être répliqués :

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

excluded_columns
Spécifie le tableau de noms de colonne qui doivent être ignorés :

ARRAY_CONSTRUCT('<column_name>', '<other_column_name>', ...)

Attention

Les noms de colonne transmis à la procédure doivent être sensibles à la casse, exactement tels qu’ils sont représentés dans la base de données source.

Les règles suivantes s’appliquent à la procédure ci-dessus :

  • Le filtrage se produit avant l’ingestion des données par Snowflake : seules les données des colonnes sélectionnées sont diffusées vers Snowflake dans les chargements instantanés et incrémentiels.

  • included_columns et excluded_columns ne sont que des masques. De cette façon, le connecteur ne générera pas d’erreur si une colonne spécifiée n’existe pas. Le masque de la colonne inexistante sera simplement ignoré.

  • Vous ne devez pas fournir à la fois included_columns et excluded_columns. Si vous voulez dresser la liste de included_columns, vous devez laisser excluded_columns vide, et vice versa.

  • Si les deux tableaux ne sont pas vides et qu’il n’y a pas de colonnes contradictoires, included_columns a la priorité sur excluded_columns.

  • Si une colonne apparaît dans included_columns et dans excluded_columns, la procédure génère une erreur.

  • Si les tableaux included_columns et excluded_columns sont tous les deux vides, toutes les colonnes disponibles seront ingérées.

  • Quelle que soit la configuration, les colonnes de clé primaire sont toujours répliquées.

Par exemple, supposons que nous ayons une table source avec des colonnes données : A, B, C, D, où A est une colonne de clé primaire. Dans ce cas :

Colonnes incluses

Colonnes exclues

Résultat prévu

[]

[]

[A, B, C, D]

[A, B]

[]

[A, B]

[B]

[]

[A, B]

[]

[C, D]

[A, B]

[]

[A, B]

[A, C, D]

[A, B, Z]

[]

[A, B]

[A]

[A]

Erreur

Retirer une table de la réplication

Pour retirer une table source de la réplication, exécutez la commande suivante :

CALL PUBLIC.REMOVE_TABLE('<data_source_name>', '<schema_name>', '<table_name>');
Copy

Où :

data_source_name

Spécifie le nom de la source de données qui contient la table source.

schema_name

Spécifie le nom du schéma de la table source.

table_name

Spécifie le nom de la table source.

Note

Le processus de retrait d’une table de la réplication prend quelques minutes. Une fois l’opération terminée, la table disparaîtra de la vue PUBLIC.REPLICATION_STATE dans le connecteur (voir Surveillance du Snowflake Connector for MySQL). Ce n’est qu’alors qu’elle pourra être de nouveau activée pour la réplication.

À ce stade, la table de destination continue à appartenir à l’application de connecteur. Si vous souhaitez abandonner ou modifier la table de destination, vous devez commencer par faire d’un rôle de votre compte le propriétaire de cette table. Exécutez la requête suivante en tant que ACCOUNTADMIN :

GRANT OWNERSHIP ON TABLE <destination_database_name>.<schema_name>.<table_name>
  TO ROLE <role_name>
  REVOKE CURRENT GRANTS;
Copy

Note

Si vous retirez une table de la réplication, corrigez son état FAILED. Vous devrez également renommer ou abandonner manuellement la table de destination avant de réactiver sa réplication.

Configuration d’une réplication planifiée

Le connecteur peut répliquer des données selon deux modes : continu ou planifié. Le mode par défaut est le mode continu.

Le mode continu réplique les données aussi vite que possible. Cela nécessite de faire fonctionner un entrepôt opérationnel 24 h/24, 7 j/7, ce qui peut générer des coûts inutiles, même sans réplication en cours.

Le mode planifié réplique les données selon une planification configurée. Son objectif est de réduire les coûts de réplication lorsqu’il n’est pas nécessaire de répliquer les données en continu ou que le volume de données est faible (ce qui fait que le connecteur est à l’état inactif la plupart du temps).

Le mode planifié lance le concept d’achèvement de la réplication. La réplication instantanée commence lorsque l’exécution de la requête SELECT <colonnes> FROM <TABLE> démarre et se termine lorsque les données sont répliquées dans la table de destination. La réplication incrémentielle commence à partir du pointeur de capture des données modifiées (Change Data Capture ou CDC) précédemment stocké, mais elle n’a pas de fin, car les données sont ingérées en continu. Par conséquent, le connecteur réplique les données à partir du pointeur CDC précédemment stocké jusqu’au dernier pointeur CDC (déterminé au début de la réplication). De cette façon, le connecteur assure l’achèvement de la réplication selon un mode planifié.

Le mode planifié réduit les coûts de réplication en suspendant l’entrepôt opérationnel. L’entrepôt peut être suspendu si la réplication de chaque table source est terminée. L’entrepôt reste suspendu jusqu’à l’exécution suivante de la réplication, selon la planification.

Note

Il peut être exécuté une seule réplication à la fois. Si une réplication est encore en cours d’exécution lorsque l’heure de l’exécution planifiée suivante arrive, cette heure planifiée est ignorée.

Pour activer le mode planifié, exécutez la commande suivante :

CALL PUBLIC.ENABLE_SCHEDULED_REPLICATION('<data_source_name>', '<schedule>');
Copy

Où :

data_source_name

Spécifie le nom de la source de données.

schedule

Spécifie la planification ou la fréquence selon laquelle le connecteur exécute la réplication de la source de données. La fréquence minimale autorisée est de 10 minutes. Pour des informations détaillées sur la spécification de la planification ou de la fréquence, voir le paramètre SCHEDULE.

Exemples de planification :

  • 60 MINUTE

    Planifie la réplication toutes les 60 minutes.

  • USING CRON 0 2 * * * UTC

    Planifie la réplication à 2 h du matin UTC tous les jours.

Pour désactiver le mode planifié, exécutez la commande suivante :

CALL PUBLIC.DISABLE_SCHEDULED_REPLICATION('<data_source_name>');
Copy

Où :

data_source_name

Spécifie le nom de la source de données.

Pour vérifier la planification actuelle, voir Affichage des sources de données.

Note

L’entrepôt opérationnel gère les réplications de toutes les sources de données. L’entrepôt ne peut être suspendu que si la réplication de chaque table source de chaque source de données est terminée. En d’autres termes, le mode planifié doit être activé pour toutes les sources de données afin de garantir le fonctionnement correct de la suspension automatique.

Avertissement

Pour terminer l’exécution planifiée et permettre la suspension de l’entrepôt opérationnel, le connecteur nécessite une activité constante dans la base de données source. Toute opération qui insère, supprime et met à jour des données dans une base de données génère une activité. L’opération peut être appliquée à n’importe quelle table, pas forcément aux tables ajoutées à la réplication. Le nombre de lignes insérées ou mises à jour n’a pas d’importance.

Prochaines étapes

Après avoir effectué ces procédures, suivez les étapes à la section Affichage des données MySQL dans Snowflake.