La source de données SQL Server offre un canal bidirectionnel pour la lecture et l'écriture dans les bases de données SQL Server. Cette rubrique décrit les capacités de synchronisation des données SQL Server prises en charge par DataWorks.
Versions prises en charge
SQL Server Reader utilise le pilote com.microsoft.sqlserver sqljdbc4 4,0. Pour plus de détails sur le pilote, consultez la documentation officielle. Le tableau ci-dessous répertorie les versions de SQL Server prises en charge par ce pilote :
|
Version |
Prise en charge (Oui/Non) |
|
SQL Server 2016 |
Oui |
|
SQL Server 2014 |
Oui |
|
SQL Server 2012 |
Oui |
|
PDW 2008R2 AU34 |
Oui |
|
SQL Server 2008 R2 |
Oui |
|
SQL Server 2008 |
Oui |
|
SQL Server 2019 |
Non |
|
SQL Server 2018 |
Non |
|
Azure SQL Managed Instance |
Non |
|
Azure Synapse Analytics |
Non |
|
Azure SQL Database |
Oui |
Limitations
La synchronisation par lots prend en charge la lecture à partir de vues.
Types de colonne pris en charge
Pour obtenir la liste complète des types de colonne SQL Server, consultez la documentation SQL Server. Le tableau suivant, qui prend SQL Server 2016 comme exemple, répertorie la prise en charge des types de colonne courants.
|
Type de colonne SQL Server 2016 |
SQL Server Reader |
SQL Server Writer |
|
bigint |
Pris en charge |
Pris en charge |
|
bit |
Pris en charge |
Pris en charge |
|
decimal |
Pris en charge |
Pris en charge |
|
int |
Pris en charge |
Pris en charge |
|
money |
Pris en charge |
Pris en charge |
|
numeric |
Pris en charge |
Pris en charge |
|
smallint |
Pris en charge |
Pris en charge |
|
smallmoney |
Pris en charge |
Pris en charge |
|
tinyint |
Pris en charge |
Pris en charge |
|
float |
Pris en charge |
Pris en charge |
|
real |
Pris en charge |
Pris en charge |
|
date |
Pris en charge |
Pris en charge |
|
datetime2 |
Pris en charge |
Pris en charge |
|
datetime |
Pris en charge |
Pris en charge |
|
datetimeoffset |
Non pris en charge |
Non pris en charge |
|
smalldatetime |
Pris en charge |
Pris en charge |
|
time |
Pris en charge |
Pris en charge |
|
char |
Pris en charge |
Pris en charge |
|
text |
Pris en charge |
Pris en charge |
|
varchar |
Pris en charge |
Pris en charge |
|
nchar |
Pris en charge |
Pris en charge |
|
ntext |
Pris en charge |
Pris en charge |
|
nvarchar |
Pris en charge |
Pris en charge |
|
binary |
Pris en charge |
Pris en charge |
|
image |
Pris en charge |
Pris en charge |
|
varbinary |
Pris en charge |
Pris en charge |
|
cursor |
Non pris en charge |
Non pris en charge |
|
hierarchyid |
Non pris en charge |
Non pris en charge |
|
sql_variant |
Pris en charge |
Pris en charge |
|
Spatial Geometry Types |
Non pris en charge |
Non pris en charge |
|
table |
Non pris en charge |
Non pris en charge |
|
rowversion |
Non pris en charge |
Non pris en charge |
|
uniqueidentifier |
Pris en charge |
Pris en charge |
|
xml |
Pris en charge |
Pris en charge |
|
Spatial Geography Types |
Non pris en charge |
Non pris en charge |
Le tableau suivant répertorie les conversions de type de colonne effectuées par SQL Server Reader et SQL Server Writer pour SQL Server.
|
Catégorie |
Type de données SQL Server |
|
Entier |
BIGINT, INT, SMALLINT et TINYINT |
|
Virgule flottante |
FLOAT, DECIMAL, REAL et NUMERIC |
|
Chaîne |
CHAR, NCHAR, NTEXT, NVARCHAR, TEXT, VARCHAR, NVARCHAR(MAX) et VARCHAR(MAX) |
|
Date et heure |
DATE, DATETIME et TIME |
|
Booléen |
BIT |
|
Binaire |
BINARY, VARBINARY, VARBINARY(MAX) et TIMESTAMP |
Ajouter une source de données
Avant de développer une tâche de synchronisation dans DataWorks, ajoutez la source de données requise à DataWorks en suivant les instructions fournies dans la rubrique Configuration de la source de données. Consultez les descriptions des paramètres dans la console DataWorks pour comprendre la signification des paramètres lors de l'ajout d'une source de données.
Développer une tâche de synchronisation des données
Pour connaître le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.
Guide de configuration d'une tâche de synchronisation par lots à table unique
Pour la procédure, consultez les rubriques Configuration via l'interface utilisateur sans code et Configuration en mode script.
Pour la liste complète des paramètres et un exemple de script pour le mode script, consultez la section Annexe : Exemple de script et descriptions des paramètres ci-dessous.
Guide de configuration d'une tâche de synchronisation par lots pour la lecture de base de données entière
Pour la procédure, consultez la rubrique Configurer des tâches de synchronisation en temps réel pour l'intégralité de la base de données.
FAQ
-
Récupération des données de synchronisation primaire-secondaire
La synchronisation primaire-secondaire fait référence à une configuration où SQL Server utilise une reprise après sinistre de type primaire-secondaire, et la base de données secondaire récupère continuellement les données de la base de données principale via le journal binaire (binlog). En raison du décalage temporel inhérent à la synchronisation des données entre le primaire et le secondaire, notamment en cas de latence réseau, les données récupérées sur le secondaire peuvent différer considérablement de celles du primaire. Par conséquent, les données synchronisées à partir du secondaire ne constituent pas un instantané complet à l'instant T.
-
Contraintes de cohérence
SQL Server appartient à la catégorie des SGBDR (Systèmes de gestion de base de données relationnelle) et peut fournir des interfaces de requête de données fortement cohérentes. Par exemple, lorsqu'une tâche de synchronisation est en cours d'exécution, si d'autres processus écrivent dans la base de données, SQL Server Reader ne verra pas les données nouvellement écrites ou mises à jour, grâce à la fonctionnalité d'instantané de la base de données.
Ce qui précède décrit le comportement de cohérence des données de SQL Server Reader en mode monothread. SQL Server Reader pouvant effectuer une extraction de données concurrente selon votre configuration, une cohérence stricte des données ne peut être garantie.
Lorsque SQL Server Reader divise les données en fonction de splitPk, il démarre plusieurs tâches concurrentes pour effectuer la synchronisation. Ces tâches concurrentes n'appartiennent pas à la même transaction de lecture et présentent des décalages temporels entre elles. Par conséquent, les données extraites ne constituent pas un instantané complet et cohérent.
Techniquement, il n'est pas possible d'obtenir un instantané cohérent avec le multithreading ; cette problématique doit être abordée d'un point de vue ingénierie. Les approches d'ingénierie impliquent des compromis. Les options suivantes sont proposées ; choisissez celle qui correspond le mieux à votre situation.
Utilisez la synchronisation monothread sans fragmentation des données. L'inconvénient est une vitesse plus lente, mais la cohérence est assurée.
Arrêtez les autres processus d'écriture afin que les données actuelles soient statiques, par exemple en verrouillant la table ou en arrêtant la synchronisation secondaire. L'inconvénient est un impact potentiel sur les activités en ligne.
-
Encodage de la base de données
SQL Server Reader utilise JDBC pour l'extraction des données. JDBC s'adapte nativement à divers encodages et effectue la conversion d'encodage au niveau inférieur. Par conséquent, SQL Server Reader ne nécessite pas que vous spécifiiez l'encodage ; il peut le détecter et le convertir automatiquement.
-
Méthodes de synchronisation incrémentielle des données
SQL Server Reader utilise des instructions SELECT JDBC pour extraire les données. Vous pouvez donc utiliser
SELECT…WHERE…pour l'extraction incrémentielle des données, comme suit :Lorsqu'une application en ligne écrit dans la base de données (y compris les insertions, les mises à jour et les suppressions logiques), elle renseigne une colonne de modification avec l'horodatage de la modification. Pour de telles applications, SQL Server Reader n'a qu'à ajouter l'horodatage de la synchronisation précédente à la clause WHERE.
Pour les données de flux en ajout seul (append-only), SQL Server Reader n'a qu'à ajouter l'ID auto-incrémenté maximal de l'exécution précédente à la clause WHERE.
S'il n'existe aucune colonne métier permettant de distinguer les enregistrements nouvellement insérés ou mis à jour, SQL Server Reader ne peut pas effectuer de synchronisation incrémentielle et ne peut synchroniser que l'ensemble complet des données.
-
Sécurité SQL
SQL Server Reader fournit le paramètre querySql pour vous permettre d'implémenter des instructions SELECT d'extraction personnalisées. SQL Server Reader n'effectue aucune validation de sécurité sur querySql.
Annexe : Exemple de script et descriptions des paramètres
Configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code
Si vous souhaitez configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code, configurez les paramètres associés dans le script en respectant les exigences de format de script unifié. Pour plus d'informations, consultez la rubrique Configuration en mode script. Les informations suivantes décrivent les paramètres que vous devez configurer pour les sources de données lors de la configuration d'une tâche de synchronisation par lots à l'aide de l'éditeur de code.
Exemple de script Reader
{
"type":"job",
"version":"2.0",//Version number.
"steps":[
{
"stepType":"sqlserver",//Plugin name.
"parameter":{
"datasource":"",//Data source.
"column":[//Columns.
"id",
"name"
],
"where":"",//Filter condition.
"splitPk":"",//If splitPk is specified, it indicates that you want to use the field represented by splitPk for data sharding.
"table":""//Data table.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//Number of error records.
},
"speed":{
"throttle":true,//When throttle is false, the mbps parameter does not take effect, meaning no rate limiting; when throttle is true, rate limiting is enabled.
"concurrent":1 //Job concurrency.
"mbps":"12",//Rate limit, where 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Si vous souhaitez utiliser querySql, vous pouvez utiliser l'exemple de code de script Reader suivant (la source de données SQL Server est sql_server_source, la table cible est dbo.test_table et la colonne cible est name).
{
"stepType": "sqlserver",
"parameter": {
"connection": [
{
"querySql": ["select name from dbo.test_table"],
"datasource": "sql_server_source"
}
],
"datasource": "sql_server_source",
"column": ["name"],
"where": "",
"splitPk": "id"
},
"name": "Reader",
"category": "reader"
}
Paramètres du script Reader
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
|
datasource |
Le nom de la source de données. Le mode script prend en charge l'ajout de sources de données. La valeur indiquée ici doit correspondre au nom de la source de données ajoutée. |
Oui |
Aucune |
|
table |
Le nom de la table à synchroniser. Une seule tâche peut synchroniser une seule table. |
Oui |
Aucune |
|
column |
L'ensemble des colonnes à synchroniser depuis la table configurée, décrit sous forme de tableau JSON. Par défaut, toutes les colonnes sont utilisées, par exemple [ * ].
|
Oui |
Aucune |
|
splitFactor |
Le facteur de division. Vous pouvez configurer le nombre de fragments dans lesquels les données synchronisées sont divisées. Si la concurrence est configurée, les données sont divisées en Remarque
Plage recommandée : 1 à 100. Des valeurs trop élevées peuvent provoquer des erreurs de mémoire insuffisante (OOM). |
Non |
5 |
|
splitPk |
Lorsque SQL Server Reader extrait des données, la spécification de
|
Non |
Aucune |
|
where |
La condition de filtre. SQL Server Reader construit une instruction SQL en utilisant la
|
Non |
Aucune |
|
querySql |
Format : |
Non |
Aucune |
|
fetchSize |
Ce paramètre définit le nombre de lignes que le plugin récupère auprès du serveur de base de données à chaque lot. Il détermine le nombre d'allers-retours réseau entre Data Integration et le serveur et peut améliorer les performances d'extraction. Remarque
Si |
Non |
1024 |
|
driverVersion |
La version du pilote SQL Server. La valeur par défaut est 4,0. Vous pouvez spécifier la version 12.10, qui prend en charge l'authentification par principal de service Active Directory. |
Non |
4,0 |
Pour les valeurs
table,columnetwhereque vous configurez, SQL Server Reader les assemble en une instruction SQL et l'envoie à la base de données SQL Server.Pour la valeur
querySqlque vous configurez, SQL Server Reader l'envoie directement à la base de données SQL Server.
Exemple de script Writer
{
"type":"job",
"version":"2.0",//Version number.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"sqlserver",//Plugin name.
"parameter":{
"postSql":[],//SQL statements to be executed after the data synchronization task.
"datasource":"",//Data source.
"column":[//Columns.
"id",
"name"
],
"table":"",//Table name.
"preSql":[]//SQL statements to be executed before the data synchronization task.
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//Number of error records.
},
"speed":{
"throttle":true,//When throttle is false, the mbps parameter does not take effect, meaning no rate limiting; when throttle is true, rate limiting is enabled.
"concurrent":1, //Job concurrency.
"mbps":"12"//Rate limit, where 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Paramètres du script Writer
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
|
datasource |
Le nom de la source de données. Le mode script prend en charge l'ajout de sources de données. La valeur indiquée ici doit correspondre au nom de la source de données ajoutée. |
Oui |
Aucune |
|
table |
Le nom de la table à synchroniser. |
Oui |
Aucune |
|
column |
Les colonnes de la table cible dans lesquelles écrire, séparées par des virgules. Par exemple, |
Oui |
Aucune |
|
preSql |
Instructions SQL à exécuter avant le démarrage de la tâche de synchronisation des données. En mode Assistant, une seule instruction SQL est autorisée ; en mode script, plusieurs instructions sont prises en charge, par exemple pour effacer les anciennes données. |
Non |
Aucune |
|
postSql |
Instructions SQL à exécuter après la fin de la tâche de synchronisation des données. En mode Assistant, une seule instruction SQL est autorisée ; en mode script, plusieurs instructions sont prises en charge, par exemple pour ajouter un horodatage. |
Non |
Aucune |
|
writeMode |
Le mode d'importation. Le mode |
Non |
insert |
|
batchSize |
Le nombre d'enregistrements validés en un seul lot. Cette valeur peut réduire considérablement le nombre d'allers-retours réseau entre le système de synchronisation des données et SQL Server et améliorer le débit global. Si la valeur est trop élevée, le processus de synchronisation peut manquer de mémoire (OOM). |
Non |
1 024 |
|
driverVersion |
La version du pilote SQL Server. La valeur par défaut est 4,0. Vous pouvez spécifier la version 12.10, qui prend en charge l'authentification par principal de service Active Directory. |
Non |
4,0 |