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>');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>;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 :
Assurez-vous que l’agent est arrêté.
Configurez la connexion de l’agent à la nouvelle source de données.
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>);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
ettable_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>);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
etexcluded_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
etexcluded_columns
. Si vous voulez dresser la liste deincluded_columns
, vous devez laisserexcluded_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é surexcluded_columns
.Si une colonne apparaît dans
included_columns
et dansexcluded_columns
, la procédure génère une erreur.Si les tableaux
included_columns
etexcluded_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>');
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;
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>');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>');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.