La source de données SQL Server permet la lecture et l'écriture de données dans SQL Server via un canal bidirectionnel. Cette rubrique décrit les fonctionnalité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 connaître les capacités du pilote, consultez la documentation officielle. Le pilote prend en charge les versions SQL Server suivantes :
|
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 |
Limites
La synchronisation par lots peut lire les vues.
Types de champs pris en charge
Pour la liste complète des types de champs SQL Server, consultez la documentation SQL Server. Le tableau suivant utilise SQL Server 2016 comme exemple pour illustrer les types courants et leur prise en charge.
|
Type de champ 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 mappages de types SQL Server pour SQL Server Reader et SQL Server Writer.
|
Catégorie de type |
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 de 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 des tâches de synchronisation des données
Pour obtenir des informations sur le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.
Configurer une tâche de synchronisation par lots à table unique
Pour la procédure, consultez les rubriques Configuration sans code et Configuration en mode script.
Pour tous les paramètres du mode script et des exemples de scripts, consultez la rubrique Annexe : Exemples de scripts et paramètres.
Configurer une tâche de synchronisation de lecture par lots pour toute la base de données
Pour la procédure, consultez la rubrique Configurer des tâches de synchronisation en temps réel pour toute la base de données.
FAQ
-
Récupération des données sur une configuration primaire-réplique
Dans une configuration de reprise après sinistre primaire-réplique, la réplique récupère continuellement les données du serveur primaire via les journaux binaires. La réplication peut présenter un décalage, notamment en raison des latences réseau. Par conséquent, les données de la réplique peuvent différer considérablement de celles du serveur primaire, et les données synchronisées depuis la réplique peuvent ne pas constituer un instantané complet à l'instant T.
-
Contraintes de cohérence
SQL Server est un SGBDR et peut fournir des interfaces de requête fortement cohérentes. Par exemple, si un autre processus d'écriture met à jour la base de données après le démarrage d'une tâche de synchronisation, SQL Server Reader ne capturera pas ces données mises à jour en raison du comportement d'instantané de la base de données.
Ceci décrit la cohérence dans le modèle monothread de SQL Server Reader. Étant donné que SQL Server Reader peut extraire les données de manière concurrente selon votre configuration, une cohérence stricte ne peut pas toujours être garantie.
Lorsque SQL Server Reader divise les données par splitPk, il démarre plusieurs tâches concurrentes. Ces tâches ne partagent pas une seule transaction de lecture et démarrent à des moments différents, de sorte que les données résultantes ne constituent pas un instantané complet et cohérent.
Un instantané cohérent sur plusieurs threads n'est actuellement pas réalisable techniquement. Les approches d'ingénierie suivantes présentent des compromis ; choisissez celle qui correspond à vos besoins.
Utilisez la synchronisation monothread sans division des données. Elle est plus lente, mais offre une bonne cohérence.
Arrêtez les autres processus d'écriture afin que les données restent statiques, par exemple en verrouillant la table ou en arrêtant la synchronisation des répliques. Cela peut affecter les activités en ligne.
-
Encodage de la base de données
SQL Server Reader utilise JDBC pour extraire les données. JDBC gère différents encodages et les convertit en interne, il n'est donc pas nécessaire de spécifier l'encodage pour SQL Server Reader.
-
Synchronisation incrémentielle des données
SQL Server Reader extrait les données avec des instructions SELECT JDBC. Utilisez
SELECT…WHERE…pour l'extraction incrémentielle de ces manières :Lorsqu'une application en ligne écrit des données, elle renseigne le champ de modification avec l'horodatage du changement pour les insertions, les mises à jour et les suppressions logiques. SQL Server Reader peut utiliser une condition WHERE après l'horodatage de la synchronisation précédente.
Pour les enregistrements en ajout seul, définissez une condition WHERE basée sur l'ID auto-incrémenté le plus élevé de l'étape précédente.
Si aucun champ métier n'identifie les enregistrements insérés ou modifiés, SQL Server Reader ne peut pas synchroniser de manière incrémentielle et doit synchroniser toutes les données.
-
Sécurité SQL
SQL Server Reader fournit querySql afin que vous puissiez écrire une requête d'extraction SELECT, mais il ne valide pas la sécurité de querySql.
Annexe : Exemples de scripts et 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 selon 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",//Numéro de version. "steps":[ { "stepType":"sqlserver",//Nom du plug-in. "parameter":{ "datasource":"",//Source de données. "column":[//Champs. "id", "name" ], "where":"",//Condition de filtrage. "splitPk":"",//Si splitPk est spécifié, les données sont divisées par ce champ. "table":""//Table de données. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"//Nombre d'enregistrements d'erreur. }, "speed":{ "throttle":true,//Lorsque throttle est false, mbps est ignoré et le débit est illimité ; lorsque true, le débit est limité. "concurrent":1 //Concurrence des tâches. "mbps":"12",//Limite de débit. Ici, 1 mbps = 1 Mo/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Pour interroger avec querySql, utilisez un script Reader comme suit. Ici, la source de données SQL Server est sql_server_source, la table est dbo.test_table et la colonne 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 | Nom de la source de données. En mode script, vous pouvez ajouter une source de données. La valeur doit correspondre au nom de la source de données ajoutée. | Oui | Aucune |
table | Nom de la table à synchroniser. Une tâche ne prend en charge qu'une seule table. | Oui | Aucune |
column | Colonnes à synchroniser depuis la table configurée, décrites sous forme de tableau JSON. Par défaut, toutes les colonnes sont sélectionnées, par exemple [ * ].
| Oui | Aucune |
splitFactor | Facteur de division qui définit le nombre de fragments de données. Avec plusieurs tâches concurrentes, les données sont divisées en Remarque Plage recommandée : 1 à 100. Une valeur excessivement grande peut provoquer une erreur de mémoire insuffisante. | Non | 5 |
splitPk | Lorsque SQL Server Reader extrait des données, la spécification de
| Non | Aucune |
where | Une condition de filtrage. SQL Server Reader assemble une instruction SQL à partir des conditions
| Non | Aucune |
querySql | Format : | Non | Aucune |
fetchSize | Le nombre d'enregistrements récupérés par lot par le plug-in et le serveur de base de données. Il détermine le nombre d'interactions réseau avec Data Integration et peut améliorer les performances d'extraction. Remarque
| 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 |
SQL Server Reader assemble les informations configurées
table,columnetwheredans une instruction SQL et l'envoie à SQL Server.SQL Server Reader assemble les informations
querySqlconfigurées. Pour les informations querySql, SQL Server Reader les envoie directement à SQL Server.
Exemple de script Writer
{ "type":"job", "version":"2.0",//Numéro de version. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"sqlserver",//Nom du plug-in. "parameter":{ "postSql":[],//Instructions SQL à exécuter après la tâche de synchronisation. "datasource":"",//Source de données. "column":[//Champs. "id", "name" ], "table":"",//Nom de la table. "preSql":[]//Instructions SQL à exécuter avant la tâche de synchronisation. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"//Nombre d'enregistrements d'erreur. }, "speed":{ "throttle":true,//Lorsque throttle est false, mbps est ignoré et le débit est illimité ; lorsque true, le débit est limité. "concurrent":1, //Concurrence des tâches. "mbps":"12"//Limite de débit. Ici, 1 mbps = 1 Mo/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Paramètres du script Writer
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
|
datasource |
Nom de la source de données. En mode script, vous pouvez ajouter une source de données. La valeur doit correspondre au nom de la source de données ajoutée. |
Oui |
Aucune |
|
table |
Nom de la table à synchroniser. |
Oui |
Aucune |
|
column |
Champs de la table de destination à écrire, séparés par des virgules. Exemple : |
Oui |
Aucune |
|
preSql |
Instructions SQL à exécuter avant la tâche de synchronisation. Le mode Assistant autorise une seule instruction ; le mode script prend en charge plusieurs instructions, telles que l'effacement des anciennes données. |
Non |
Aucune |
|
postSql |
Instructions SQL à exécuter après la tâche de synchronisation. Le mode Assistant autorise une seule instruction ; le mode script prend en charge plusieurs instructions, telles que l'ajout d'un horodatage. |
Non |
Aucune |
|
writeMode |
Choisissez un mode d'importation. Pris en charge : |
Non |
insert |
|
batchSize |
Le nombre d'enregistrements soumis en un lot. Cela réduit considérablement les interactions réseau entre Data Integration et SQL Server et améliore le débit. Une valeur excessivement grande peut provoquer une erreur de mémoire insuffisante (OOM) pendant la synchronisation. |
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 |