Paramétrez Openflow Connector for SQL Server¶
Note
Ce connecteur est soumis aux conditions d’utilisation de Snowflake Connector.
Cette rubrique explique comment configurer le Openflow Connector for SQL Server.
Pour plus d’informations sur le processus de chargement incrémentiel, consultez Réplication incrémentielle.
Conditions préalables¶
Avant de configurer le connecteur, assurez-vous d’avoir rempli les conditions préalables suivantes :
Assurez-vous d’avoir consulté À propos de Openflow Connector for SQL Server.
Assurez-vous d’avoir consulté Versions du serveur SQL prises en charge.
Assurez-vous d’avoir configuré votre déploiement d’exécution. Pour plus d’informations, consultez les rubriques suivantes :
Si vous utilisez Openflow - Snowflake Deployments, assurez-vous d’avoir examiné la configuration des domaines requis et d’avoir accordé l’accès aux domaines requis pour le connecteur SQL Server.
Configurer votre instance SQL Server¶
Avant de configurer le connecteur, effectuez les tâches suivantes dans votre environnement SQL Server :
Note
Vous devez effectuer ces tâches en tant qu’administrateur de base de données.
Activez le suivi des modifications sur les bases de données et les tables que vous prévoyez de répliquer, comme montré dans l’exemple SQL Server suivant :
ALTER DATABASE <database> SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON); ALTER TABLE <schema>.<table> ENABLE CHANGE_TRACKING;
Note
Exécutez ces commandes pour chaque base de données et chaque table que vous prévoyez de répliquer.
Le connecteur exige que le suivi des modifications soit activé sur les bases de données et les tables avant le début de la réplication. Assurez-vous que le suivi des modifications est activé pour chaque table que vous prévoyez de répliquer. Vous pouvez également activer le suivi des modifications pour d’autres tables lorsque le connecteur est en cours d’exécution.
Créez une connexion pour l’instance SQL Server :
CREATE LOGIN <user_name> WITH PASSWORD = '<password>';
Cette connexion est utilisée pour créer des utilisateurs pour les bases de données que vous prévoyez de répliquer.
Créez un utilisateur pour chaque base de données que vous répliquez en exécutant la commande SQL Server suivante dans chaque base de données :
USE <source_database>; CREATE USER <user_name> FOR LOGIN <user_name>;
Accordez les autorisations SELECT et VIEW CHANGE TRACKING à l’utilisateur pour chaque base de données que vous répliquez :
GRANT SELECT ON <database>.<schema>.<table> TO <user_name>; GRANT VIEW CHANGE TRACKING ON <database>.<schema>.<table> TO <user_name>;
Exécutez ces commandes dans chaque base de données pour chaque table que vous prévoyez de répliquer. Ces autorisations doivent être accordées à l’utilisateur de chaque base de données que vous avez créée précédemment.
(Facultatif) Accordez le privilège VIEW DEFINITION sur les types de données définis par l’utilisateur (UDDT).
Si vos tables contiennent des colonnes qui utilisent des types de données définis par l’utilisateur (UDDT), et si ces UDDT appartiennent à un autre utilisateur que l’utilisateur du connecteur, vous devez accorder l’autorisation VIEW DEFINITION à l’utilisateur du connecteur, comme indiqué dans l’exemple suivant SQL Server :
GRANT VIEW DEFINITION TO <user_name>;
Sans cette autorisation, les colonnes utilisant des UDDT sont exclues silencieusement de la réplication.
(Facultatif) Configurez la connexion SSL.
Si vous utilisez une connexion SSL pour vous connecter au SQL Server, créez le certificat racine pour votre serveur de base de données. Ceci est nécessaire lors de la configuration du connecteur.
Configurer votre environnement Snowflake¶
En tant qu’administrateur de compte Snowflake, effectuez les tâches suivantes :
Créez une base de données de destination dans Snowflake pour stocker les données répliquées :
CREATE DATABASE <destination_database>;
Créez un utilisateur de service Snowflake :
CREATE USER <openflow_user> TYPE = SERVICE COMMENT='Service user for automated access of Openflow';
Créez un rôle Snowflake pour le connecteur et accordez-lui les privilèges requis :
CREATE ROLE <openflow_role>; GRANT ROLE <openflow_role> TO USER <openflow_user>; GRANT USAGE ON DATABASE <destination_database> TO ROLE <openflow_role>; GRANT CREATE SCHEMA ON DATABASE <destination_database> TO ROLE <openflow_role>;
Utilisez ce rôle pour gérer l’accès du connecteur à la base de données Snowflake.
Pour créer des objets dans la base de données de destination, vous devez accorder les privilèges USAGE et CREATE SCHEMA sur la base de données au rôle utilisé pour gérer l’accès.
Créez un entrepôt Snowflake pour le connecteur et accordez-lui les privilèges requis :
CREATE WAREHOUSE <openflow_warehouse> WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 300 AUTO_RESUME = TRUE; GRANT USAGE, OPERATE ON WAREHOUSE <openflow_warehouse> TO ROLE <openflow_role>;
Snowflake recommande de commencer par une taille d’entrepôt XSMALL, puis de tester différentes tailles en fonction du nombre de tables répliquées et de la quantité de données transférées. Un grand nombre de tables s’adaptent généralement mieux aux entrepôts multi-clusters qu’à un entrepôt de plus grande taille. Pour plus d’informations, consultez la section relative aux entrepôts multi-clusters.
Configurez les clés publiques et privées pour l’authentification par paire de clés :
Créez une paire de clés sécurisées (publique et privée).
Stockez la clé privée de l’utilisateur dans un fichier à fournir à la configuration du connecteur.
Attribuez la clé publique à l’utilisateur du service Snowflake :
ALTER USER <openflow_user> SET RSA_PUBLIC_KEY = 'thekey';
Pour plus d’informations, voir Authentification par paire de clés et rotation de paires de clés.
Installer le connecteur¶
Pour installer le connecteur, procédez comme suit en tant qu’ingénieur des données :
Accédez à la page d’aperçu d’Openflow. Dans la section Featured connectors, sélectionnez View more connectors.
Sur la page des connecteurs Openflow, trouvez le connecteur et sélectionnez Add to runtime.
Dans la boîte de dialogue Select runtime, sélectionnez votre environnement d’exécution dans la liste déroulante Available runtimes, puis cliquez sur Add.
Note
Avant d’installer le connecteur, assurez-vous que vous avez créé une base de données et un schéma dans Snowflake pour que le connecteur puisse stocker les données ingérées.
Authentifiez-vous au déploiement avec les identifiants de votre compte Snowflake et sélectionnez Allow lorsque vous êtes invité à autoriser l’application d’exécution à accéder à votre compte Snowflake. Le processus d’installation du connecteur prend quelques minutes.
Authentifiez-vous auprès de l’environnement d’exécution avec les identifiants de votre compte Snowflake.
Le canevas Openflow apparaît avec le groupe de processus du connecteur ajouté.
Configuration du connecteur¶
Pour configurer le connecteur, procédez comme suit en tant qu’ingénieur des données :
Cliquez avec le bouton droit de la souris sur le groupe de processus importé et sélectionnez Parameters.
Renseignez les valeurs des paramètres requis comme décrit dans Paramètres de débit.
Paramètres de débit¶
Commencez par définir les paramètres du contexte des paramètres source SQLServer, puis définissez le contexte des paramètres de destination SQLServer. Une fois cette opération terminée, activez le connecteur. Le connecteur se connecte à la fois à SQLServer et à Snowflake et démarre l’exécution. Toutefois, le connecteur ne réplique aucune donnée tant que les tables à répliquer n’ont pas été explicitement ajoutées à sa configuration.
Pour configurer des tables spécifiques pour la réplication, modifiez le contexte des paramètres d’ingestion SQLServer. Une fois que vous avez appliqué les modifications au contexte des paramètres d’ingestion SQLServer, la configuration est reprise par le connecteur et le cycle de vie de la réplication démarre pour chaque table.
Contexte des paramètres source SQLServer¶
Paramètre |
Description |
|---|---|
SQLServer Connexion URL |
L’adresse complète URL JDBC de la base de données source. Exemple :
|
Pilote SQLServer JDBC |
Cochez la case Reference asset pour charger le pilote JDBC du serveur SQL. |
Nom d’utilisateur SQLServer |
Le nom d’utilisateur du connecteur. |
Mot de passe SQLServer |
Le mot de passe du connecteur. |
Contexte des paramètres de destination SQLServer¶
Paramètre |
Description |
Obligatoire |
|---|---|---|
Base de données de destination |
La base de données dans laquelle les données sont conservées. Elle doit déjà exister dans Snowflake. Le nom est sensible à la casse. Pour les identificateurs sans guillemets, indiquez le nom en majuscules. |
Oui |
Stratégie d’authentification Snowflake |
Lorsque vous utilisez :
|
Oui |
Identificateur de compte Snowflake |
Lorsque vous utilisez :
|
Oui |
Stratégie de connexion à Snowflake |
Lorsque vous utilisez KEY_PAIR, spécifiez la stratégie de connexion à Snowflake :
|
Requis pour BYOC avec KEY_PAIR uniquement ; ignoré dans les autres cas. |
Résolution de l’identificateur d’objet Snowflake |
Spécifie la manière dont les identificateurs d’objets sources tels que les schémas, les tables et les noms de colonnes sont stockés et interrogés dans Snowflake. Ce paramètre détermine si vous devrez utiliser des guillemets doubles dans les requêtes SQL. Option 1 : Par défaut, insensible à la casse (recommandé).
Note Snowflake recommande d’utiliser cette option si les objets de la base de données ne sont pas censés avoir des noms avec une casse mixte. Important Ne modifiez pas ce paramètre une fois que l’ingestion du connecteur a commencé. La modification de ce paramètre après le début de l‘ingestion interrompt l’ingestion existante. Si vous devez modifier ce paramètre, créez une nouvelle instance de connecteur. Option 2 : sensible à la casse.
Note Snowflake recommande d’utiliser cette option si vous devez préserver la casse source pour des raisons héritées ou de compatibilité. Par exemple, si la base de données source comprend des noms de tables qui ne diffèrent que par la casse, comme |
Oui |
Clé privée de Snowflake |
Lorsque vous utilisez :
|
Non |
Fichier de clé privée de Snowflake |
Lorsque vous utilisez :
|
Non |
Mot de passe de la clé privée de Snowflake |
Lorsque vous utilisez :
|
Non |
Rôle Snowflake |
Lorsque vous utilisez :
|
Oui |
Nom d’utilisateur Snowflake |
Lorsque vous utilisez :
|
Oui |
Entrepôt Snowflake |
Entrepôt Snowflake utilisé pour exécuter des requêtes. |
Oui |
Contexte des paramètres d’ingestion SQLServer¶
Paramètre |
Description |
|---|---|
Noms des tables incluses |
Une liste de chemins d’accès aux tables sources séparés par des virgules, y compris leurs bases de données et leurs schémas, par exemple :
|
Table incluse Regex |
Une expression régulière à associer aux chemins d’accès aux tables, y compris les noms de bases de données et de schémas. Chaque chemin correspondant à l’expression est répliqué, et les nouvelles tables correspondant au modèle qui sont créées ultérieurement sont également incluses automatiquement, par exemple :
|
Filtre JSON |
Une adresse JSON contenant une liste de noms de tables entièrement qualifiés et un modèle de regex pour les noms de colonnes à inclure dans la réplication. L’exemple suivant inclut toutes les colonnes qui se terminent par
|
Fusionner la planification des tâches CRON |
Expression CRON définissant les périodes au cours desquelles les opérations de fusion du journal vers la table de destination seront déclenchées. Paramétrez cet élément sur Par exemple :
Pour plus d’informations et d’exemples, consultez le tutoriel sur les déclencheurs cron dans la documentation de Quartz |
Répliquer des tables à partir d’un serveur de réplique SQL Server¶
Le connecteur peut ingérer des données d’un serveur principal, d’un serveur d’abonnés à l’aide de la réplication transactionnelle , ou d’une réplique secondaire dans un groupe de disponibilité Toujours activé. Avant de configurer le connecteur pour qu’il se connecte à une réplique SQL Server, assurez-vous que la réplication entre les nœuds principaux et les nœuds de réplique fonctionne correctement. Lorsque vous enquêtez sur des problèmes liés à des données manquantes dans le connecteur, assurez-vous d’abord que les lignes manquantes et les événements de suivi des modifications sont présents dans le serveur de réplique utilisé par le connecteur.
Pour assurer la continuité, assurez-vous que le même utilisateur de connexion est disponible sur le serveur principal et le serveur de réplique, et qu’il a accès aux données et aux tables de suivi des modifications.
Réplication transactionnelle¶
La réplication transactionnelle est un mécanisme de distribution de données qui copie les modifications de données d’un éditeur vers les abonnés. Pour configurer le connecteur afin qu’il lise à partir d’un serveur d’abonnés au lieu d’un serveur de l’éditeur, spécifiez l’URL du serveur d’abonnés dans le paramètre SQLServer Connection URL.
Avertissement
Ne modifiez pas le serveur de base de données une fois la réplication commencée. Chaque base de données conserve son propre état de suivi des modifications de manière indépendante, de sorte que le passage à un autre serveur entraînerait une perte de traçage des modifications déjà traitées et pourrait causer une perte de données.
Groupes de disponibilité Toujours activé¶
Les groupes de disponibilité Toujours activé sont une solution de haute disponibilité et de reprise après incident qui conserve des copies synchronisées des bases de données à des fins de basculement. Le connecteur peut lire à partir d’une réplique secondaire dans le groupe de disponibilité. Pour une expérience optimale, configurez une écoute du groupe de disponibilité et utilisez le nom DNS de l’écoute dans le paramètre SQLServer Connection URL.
Redémarrer la réplication de table¶
Une table à l’état FAILED, par exemple, en raison d’une clé primaire manquante ou d’un changement de schéma non pris en charge, ne redémarre pas automatiquement. Si une table passe à l’état FAILED ou si vous devez redémarrer la réplication à partir de zéro, utilisez la procédure suivante pour supprimer et ajouter à nouveau la table à la réplication.
Note
Si l’échec a été causé par un problème dans la table source, tel qu’une clé primaire manquante, résolvez ce problème dans la base de données source avant de continuer.
Supprimez la table des paramètres de flux. Dans le contexte Paramètres d’ingestion, supprimez la table dans les Included Table Names ou modifiez le Included Table Regex de sorte que la table n’a plus aucune correspondance.
Vérifiez que la table a été supprimée :
Dans le canevas de l’environnement d’exécution Openflow, cliquez avec le bouton droit de la souris sur un groupe de processeurs et choisissez Controller Services.
Dans la table répertoriant les services du contrôleur, recherchez la ligne Table State Store, cliquez sur les trois points verticaux sur le côté droit de la ligne, puis choisissez View State.
Important
Vous devez attendre que l’état de la table soit entièrement supprimé de cette liste avant de poursuivre. Ne continuez pas tant que cette modification de la configuration n’est pas terminée.
Nettoyez la destination. Une fois que l’état de la table indique qu’elle est entièrement supprimés, DROP manuellement la table de destination dans Snowflake. Notez que le connecteur ne remplacera pas une table de destination existante pendant la phase de l’instantané. Si la table existe toujours, la réplication échouera à nouveau. En option, la table et le flux de journal peuvent également être supprimés s’ils ne sont plus nécessaires.
Rajouter la table : Mettez à jour les paramètres Included Table Names ou Included Table Regex pour inclure à nouveau la table.
Vérifiez le redémarrage. Vérifiez le Table State Store en utilisant les instructions données précédemment. L’état de la table doit apparaître avec le statut NEW, puis SNAPSHOT_REPLICATION et pour finir INCREMENTAL_REPLICATION.
Répliquer un sous-ensemble de colonnes dans une table¶
Le connecteur filtre les données répliquées par table sur un sous-ensemble de colonnes configurées.
Pour appliquer des filtres aux colonnes, modifiez la propriété Filtre de colonne dans le contexte Paramètres de réplication, en ajoutant un tableau de configurations, une entrée pour chaque table à laquelle vous souhaitez appliquer un filtre.
Incluez ou excluez des colonnes par nom ou modèle. Vous pouvez appliquer une seule condition par table ou combiner plusieurs conditions, les exclusions ayant toujours la priorité sur les inclusions.
L’exemple suivant montre les champs disponibles. Les champs schema et table sont obligatoires. Une ou plusieurs des adresses suivantes : included, excluded, includedPattern, excludedPattern sont exigées.
[
{
"schema": "<source table schema>",
"table" : "<source table name>",
"included": ["<column name>", "<column name>"],
"excluded": ["<column name>", "<column name>"],
"includedPattern": "<regular expression>",
"excludedPattern": "<regular expression>",
}
]
Suivre les changements de données dans les tables¶
Le connecteur réplique l’état actuel des données provenant des tables sources, mais aussi chaque état de chaque ligne de chaque jeu de modifications. Ces données sont stockées dans des tables de journal créées dans le même schéma que la table de destination.
Les noms des tables de journal sont formatés comme suit : <source_table_name>_JOURNAL_<timestamp>_<schema_generation> où <timestamp> correspond au nombre de secondes écoulées depuis l’époque de référence au moment où la table source a été ajoutée à la réplication, et <schema_generation> est un nombre entier qui augmente à chaque modification du schéma de la table source. Par conséquent, les tables sources qui subissent des modifications de schéma auront plusieurs tables de journal.
Lorsque vous supprimez une table de la réplication, puis que vous l’ajoutez à nouveau, la valeur <timestamp> change, et <schema_generation> recommence à partir de 1.
Important
Snowflake recommande de ne pas modifier la structure des tables de journal de quelque manière que ce soit. Le connecteur les utilise pour mettre à jour la table de destination dans le cadre du processus de réplication.
Le connecteur ne supprime jamais les tables de journal, mais il utilise le journal le plus récent pour chaque table source répliquée, en se contentant de lire les flux d’ajout uniquement au-dessus des journaux. Pour récupérer le stockage, vous pouvez :
Tronquer toutes les tables de journal à tout moment.
Supprimer les tables de journal liées aux tables sources qui ont été retirées de la réplication.
Supprimer toutes les tables de journal de la dernière génération, sauf les tables activement répliquées.
Par exemple, si votre connecteur est paramétré pour répliquer activement la table source orders, et que vous avez précédemment supprimé la table customers de la réplication, vous pouvez avoir les tables de journal suivantes. Dans ce cas, vous pouvez toutes les supprimer, à l’exception de orders_5678_2.
customers_1234_1
customers_1234_2
orders_5678_1
orders_5678_2
Configuration de la planification des tâches de fusion¶
Le connecteur utilise un entrepôt pour fusionner les données de capture des données de changement (CDC) dans les tables de destination. Cette opération est déclenchée par le processeur MergeSnowflakeJournalTable. S’il n’y a pas de nouvelles modifications ou si aucun nouveau fichier de flux n’est en attente dans la file d’attente MergeSnowflakeJournalTable, aucune fusion n’est déclenchée et l’entrepôt se suspend automatiquement.
Utilisez l’expression CRON dans le paramètre de planification CRON de la tâche de fusion pour limiter le coût de l’entrepôt et restreindre les fusions aux seules heures planifiées. Elle limite les fichiers de flux arrivant au processeur MergeSnowflakeJournalTable et les fusions ne sont déclenchées qu’au cours d’une période donnée. Pour plus d’informations sur la planification, voir Stratégie de planification.
Exécutez le flux¶
Cliquez avec le bouton droit de la souris sur l’avion et sélectionnez Enable all Controller Services.
Cliquez avec le bouton droit de la souris sur le groupe de processus importé et sélectionnez Start. Le connecteur démarre l’ingestion des données.