A source de dados do SQL Server permite ler e gravar dados no SQL Server por meio de um canal bidirecional. Este tópico descreve os recursos de sincronização de dados do SQL Server compatíveis com o dataworks.
Versões compatíveis
O SQL Server Reader usa o driver com.microsoft.sqlserver sqljdbc4 4.0. Para consultar os recursos do driver, consulte a documentação oficial. O driver é compatível com as seguintes versões do SQL Server:
|
Versão |
Compatível (sim/não) |
|
SQL Server 2016 |
Sim |
|
SQL Server 2014 |
Sim |
|
SQL Server 2012 |
Sim |
|
PDW 2008R2 AU34 |
Sim |
|
SQL Server 2008 R2 |
Sim |
|
SQL Server 2008 |
Sim |
|
SQL Server 2019 |
Não |
|
SQL Server 2018 |
Não |
|
Azure SQL Managed Instance |
Não |
|
Azure Synapse Analytics |
Não |
|
Azure SQL Database |
Sim |
Limites
A sincronização em lote pode ler views.
Tipos de campo compatíveis
Para a lista completa de tipos de campo do SQL Server, consulte a documentação do SQL Server. A tabela a seguir usa o SQL Server 2016 como exemplo para mostrar os tipos comuns e a compatibilidade de cada um.
|
Tipo de campo do SQL Server 2016 |
SQL Server Reader |
SQL Server Writer |
|
bigint |
Compatível |
Compatível |
|
bit |
Compatível |
Compatível |
|
decimal |
Compatível |
Compatível |
|
int |
Compatível |
Compatível |
|
money |
Compatível |
Compatível |
|
numeric |
Compatível |
Compatível |
|
smallint |
Compatível |
Compatível |
|
smallmoney |
Compatível |
Compatível |
|
tinyint |
Compatível |
Compatível |
|
float |
Compatível |
Compatível |
|
real |
Compatível |
Compatível |
|
date |
Compatível |
Compatível |
|
datetime2 |
Compatível |
Compatível |
|
datetime |
Compatível |
Compatível |
|
datetimeoffset |
Não compatível |
Não compatível |
|
smalldatetime |
Compatível |
Compatível |
|
time |
Compatível |
Compatível |
|
char |
Compatível |
Compatível |
|
text |
Compatível |
Compatível |
|
varchar |
Compatível |
Compatível |
|
nchar |
Compatível |
Compatível |
|
ntext |
Compatível |
Compatível |
|
nvarchar |
Compatível |
Compatível |
|
binary |
Compatível |
Compatível |
|
image |
Compatível |
Compatível |
|
varbinary |
Compatível |
Compatível |
|
cursor |
Não compatível |
Não compatível |
|
hierarchyid |
Não compatível |
Não compatível |
|
sql_variant |
Compatível |
Compatível |
|
Spatial Geometry Types |
Não compatível |
Não compatível |
|
table |
Não compatível |
Não compatível |
|
rowversion |
Não compatível |
Não compatível |
|
uniqueidentifier |
Compatível |
Compatível |
|
xml |
Compatível |
Compatível |
|
Spatial Geography Types |
Não compatível |
Não compatível |
A tabela a seguir lista os mapeamentos de tipos do SQL Server para o SQL Server Reader e o SQL Server Writer.
|
Categoria de tipo |
Tipo de dados do SQL Server |
|
Integer |
BIGINT, INT, SMALLINT e TINYINT |
|
Floating-point |
FLOAT, DECIMAL, REAL e NUMERIC |
|
String |
CHAR, NCHAR, NTEXT, NVARCHAR, TEXT, VARCHAR, NVARCHAR (MAX) e VARCHAR (MAX) |
|
Date and time |
DATE, DATETIME e TIME |
|
Boolean |
BIT |
|
Binary |
BINARY, VARBINARY, VARBINARY (MAX) e TIMESTAMP |
Adicionar uma fonte de dados
Antes de desenvolver uma tarefa de sincronização no DataWorks, adicione a fonte de dados necessária ao DataWorks seguindo as instruções em Data source configuration. Visualize as descrições dos parâmetros no console do DataWorks para entender o significado deles ao adicionar uma fonte de dados.
Desenvolver tarefas de sincronização de dados
Para informações sobre o ponto de entrada e o procedimento para configurar uma tarefa de sincronização, consulte os guias a seguir.
Configure uma tarefa de sincronização em lote de tabela única
visualize o procedimento, consulte Codeless UI configuration e Script mode configuration.
Para consultar todos os parâmetros do modo de script e scripts de exemplo, consulte Appendix: Sample scripts and parameters.
Configure uma tarefa de sincronização de leitura em lote de banco de dados completo
visualize o procedimento, consulte Configure real-time full-database synchronization tasks.
Perguntas frequentes
-
Recuperação de dados em uma configuração de primária e réplica
Em uma configuração de recuperação de desastres com primária e réplica, a réplica recupera dados continuamente da primária por meio de binlogs. A replicação pode apresentar atrasos, especialmente devido à latência de rede. Portanto, os dados da réplica podem diferir significativamente da primária, e os dados sincronizados a partir da réplica podem não ser um snapshot completo no momento atual.
-
Restrições de consistência
O SQL Server é um RDBMS e fornece interfaces de consulta com consistência forte. Por exemplo, se outro writer atualizar o banco de dados após o início de uma tarefa de sincronização, o SQL Server Reader não capturará esses dados atualizados por causa do comportamento de snapshot do banco de dados.
Isso se aplica à consistência no modelo de thread única do SQL Server Reader. Como o SQL Server Reader pode extrair dados simultaneamente com base na sua configuração, nem sempre há garantia de consistência estrita.
Quando o SQL Server Reader divide os dados por splitPk, ele inicia várias tarefas simultâneas. Essas tarefas não compartilham uma única transação de leitura e começam em momentos diferentes, portanto, os dados resultantes não formam um snapshot completo e consistente.
Atualmente, não é tecnicamente viável obter um snapshot consistente em várias threads. As abordagens de engenharia a seguir têm prós e contras; escolha a mais adequada às suas necessidades.
Use sincronização de thread única sem dividir os dados. Ela é mais lenta, mas oferece boa consistência.
Suspenda outros writers para que os dados permaneçam estáticos, por exemplo, bloqueando a tabela ou não ative a sincronização da réplica. Isso pode afetar os negócios online.
-
Codificação do banco de dados
O SQL Server Reader usa JDBC para extrair dados. O JDBC lida com diferentes codificações e as converte internamente, portanto, você não precisa especificar a codificação para o SQL Server Reader.
-
Sincronização incremental de dados
O SQL Server Reader extrai dados com instruções SELECT JDBC. modifique a consulta e Use
SELECT…WHERE…para extração incremental das seguintes formas:Quando um aplicativo online grava dados, ele preenche o campo modify com o timestamp da alteração para inserções, atualizações e exclusões lógicas. O SQL Server Reader pode usar uma condição WHERE após o timestamp da sincronização anterior.
Para registros append-only (somente anexação), defina uma condição WHERE com base no maior ID de incremento automático do estágio anterior.
Se nenhum campo de negócios identificar os registros inseridos ou modificados, o SQL Server Reader não poderá sincronizar incrementalmente e deverá sincronizar todos os dados.
-
Segurança do SQL
O SQL Server Reader fornece querySql para que você possa escrever uma consulta de extração SELECT, mas não valida querySql quanto à segurança.
Apêndice: Scripts e parâmetros de exemplo
Configure uma tarefa de sincronização em lote usando o editor de código
Para configurar uma tarefa de sincronização em lote usando o editor de código, configure os parâmetros relacionados no script com base nos requisitos de formato unificado de script. Para mais informações, consulte Script mode configuration. As informações a seguir descrevem os parâmetros que você deve configurar para as fontes de dados ao configurar uma tarefa de sincronização em lote pelo editor de código.
Script de exemplo do Reader
{ "type":"job", "version":"2.0",//Version number. "steps":[ { "stepType":"sqlserver",//Plug-in name. "parameter":{ "datasource":"",//Data source. "column":[//Fields. "id", "name" ], "where":"",//Filter condition. "splitPk":"",//If splitPk is specified, data is split by that field. "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, mbps is ignored and throughput is unlimited; when true, throughput is limited. "concurrent":1 //Job concurrency. "mbps":"12",//Rate limit. Here, 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Para fazer consultas com querySql, use um script do Reader como o seguinte. Aqui, a fonte de dados do SQL Server é sql_server_source, a tabela é dbo.test_table e a coluna é 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"
}
Parâmetros do script do Reader
Parâmetro | Descrição | Obrigatório | Valor padrão |
datasource | Nome da fonte de dados. No modo de script, você pode adicionar uma fonte de dados. O valor deve corresponder ao nome da fonte de dados adicionada. | Sim | Nenhum |
table | Nome da tabela a ser sincronizada. Uma tarefa suporta apenas uma tabela. | Sim | Nenhum |
column | Colunas a serem sincronizadas da tabela configurada, descritas como um array JSON. Por padrão, todas as colunas são selecionadas, como [ * ].
| Sim | Nenhum |
splitFactor | Um fator de divisão que define o número de shards de dados. Com várias tarefas simultâneas, os dados são divididos em Nota Faixa recomendada: 1 a 100. Um valor muito grande pode causar erro de falta de memória (OOM). | Não | 5 |
splitPk | Quando o SQL Server Reader extrai dados, ao especificar
| Não | Nenhum |
where | Uma condição de filtro. O SQL Server Reader monta uma instrução SQL a partir das condições
| Não | Nenhum |
querySql | Formato: | Não | Nenhum |
fetchSize | O número de registros recuperados em cada lote pelo plug-in e pelo servidor de banco de dados. Determina o número de interações de rede com o Data Integration e pode melhorar o desempenho de extração. Nota
| Não | 1024 |
driverVersion | A versão do driver do SQL Server. O padrão é 4.0. Especifique a versão 12.10, que suporta a autenticação Active Directory Service Principal. | Não | 4.0 |
O SQL Server Reader monta as informações configuradas de
tableecolumnewhereem uma instrução SQL e as envia para o SQL Server.O SQL Server Reader monta as informações configuradas de
querySqlem uma instrução SQL e as envia para o SQL Server.
Script de exemplo do Writer
{ "type":"job", "version":"2.0",//Version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"sqlserver",//Plug-in name. "parameter":{ "postSql":[],//SQL statements to run after the synchronization task. "datasource":"",//Data source. "column":[//Fields. "id", "name" ], "table":"",//Table name. "preSql":[]//SQL statements to run before the synchronization task. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"//Number of error records. }, "speed":{ "throttle":true,//When throttle is false, mbps is ignored and throughput is unlimited; when true, throughput is limited. "concurrent":1, //Job concurrency. "mbps":"12"//Rate limit. Here, 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Parâmetros do script do Writer
|
Parâmetro |
Descrição |
Obrigatório |
Valor padrão |
|
datasource |
Nome da fonte de dados. No modo de script, você pode adicionar uma fonte de dados. O valor deve corresponder ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
table |
Nome da tabela a ser sincronizada. |
Sim |
Nenhum |
|
column |
Campos da tabela de destino a serem gravados, separados por vírgulas. Exemplo: |
Sim |
Nenhum |
|
preSql |
Execute instruções SQL antes da tarefa de sincronização. O modo de assistente permite apenas uma instrução; o modo de script suporta várias instruções, como limpar dados antigos. |
Não |
Nenhum |
|
postSql |
Execute instruções SQL após a tarefa de sincronização. O modo de assistente permite apenas uma instrução; o modo de script suporta várias instruções, como adicionar um timestamp. |
Não |
Nenhum |
|
writeMode |
Escolha um modo de importação. Compatível com: |
Não |
insert |
|
batchSize |
O número de registros enviados em um único lote. Isso reduz bastante as interações de rede entre o Data Integration e o SQL Server e melhora o throughput. Um valor muito grande pode causar erro de falta de memória (OOM) durante a sincronização. |
Não |
1.024 |
|
driverVersion |
A versão do driver do SQL Server. O padrão é 4.0. Especifique a versão 12.10, que suporta a autenticação Active Directory Service Principal. |
Não |
4.0 |