A fonte de dados SQL Server oferece um canal bidirecional para leitura e gravação em bancos de dados SQL Server. Este tópico descreve as capacidades de sincronização de dados do SQL Server suportadas pelo DataWorks.
Versões suportadas
O SQL Server Reader utiliza o driver com.microsoft.sqlserver sqljdbc4 4.0. Para detalhes sobre o driver, consulte a documentação oficial. As versões do SQL Server suportadas por este driver estão listadas abaixo:
|
Versão |
Suportado (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 |
Limitação
A sincronização em lote suporta leitura a partir de views.
Tipos de coluna suportados
Para obter a lista completa de tipos de coluna do SQL Server, consulte a documentação do SQL Server. A tabela a seguir, usando o SQL Server 2016 como exemplo, lista o suporte para tipos de coluna comuns.
|
Tipo de coluna do SQL Server 2016 |
SQL Server Reader |
SQL Server Writer |
|
bigint |
Suportado |
Suportado |
|
bit |
Suportado |
Suportado |
|
decimal |
Suportado |
Suportado |
|
int |
Suportado |
Suportado |
|
money |
Suportado |
Suportado |
|
numeric |
Suportado |
Suportado |
|
smallint |
Suportado |
Suportado |
|
smallmoney |
Suportado |
Suportado |
|
tinyint |
Suportado |
Suportado |
|
float |
Suportado |
Suportado |
|
real |
Suportado |
Suportado |
|
date |
Suportado |
Suportado |
|
datetime2 |
Suportado |
Suportado |
|
datetime |
Suportado |
Suportado |
|
datetimeoffset |
Não suportado |
Não suportado |
|
smalldatetime |
Suportado |
Suportado |
|
time |
Suportado |
Suportado |
|
char |
Suportado |
Suportado |
|
text |
Suportado |
Suportado |
|
varchar |
Suportado |
Suportado |
|
nchar |
Suportado |
Suportado |
|
ntext |
Suportado |
Suportado |
|
nvarchar |
Suportado |
Suportado |
|
binary |
Suportado |
Suportado |
|
image |
Suportado |
Suportado |
|
varbinary |
Suportado |
Suportado |
|
cursor |
Não suportado |
Não suportado |
|
hierarchyid |
Não suportado |
Não suportado |
|
sql_variant |
Suportado |
Suportado |
|
Spatial Geometry Types |
Não suportado |
Não suportado |
|
table |
Não suportado |
Não suportado |
|
rowversion |
Não suportado |
Não suportado |
|
uniqueidentifier |
Suportado |
Suportado |
|
xml |
Suportado |
Suportado |
|
Spatial Geography Types |
Não suportado |
Não suportado |
A tabela a seguir lista as conversões de tipos de coluna realizadas pelo SQL Server Reader e pelo SQL Server Writer para o SQL Server.
|
Categoria |
Tipo de dados do SQL Server |
|
Inteiro |
BIGINT, INT, SMALLINT e TINYINT |
|
Ponto flutuante |
FLOAT, DECIMAL, REAL e NUMERIC |
|
String |
CHAR, NCHAR, NTEXT, NVARCHAR, TEXT, VARCHAR, NVARCHAR(MAX) e VARCHAR(MAX) |
|
Data e hora |
DATE, DATETIME e TIME |
|
Booleano |
BIT |
|
Binário |
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 Gerenciamento de fontes de dados. Consulte as descrições de parâmetros no console do DataWorks para entender o significado dos parâmetros ao adicionar uma fonte de dados.
Desenvolver uma tarefa de sincronização de dados
Para informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias de configuração a seguir.
Guia de configuração de tarefa de sincronização em lote de tabela única
Para o procedimento, consulte Configuração via interface sem código e Configuração em modo script.
Para a lista completa de parâmetros e uma demonstração de script para o modo script, consulte o Apêndice: Demonstração de script e descrições de parâmetros abaixo.
Guia de configuração de tarefa de sincronização de leitura em lote de banco de dados inteiro
Para o procedimento, consulte Configure sincronização completa de banco de dados em tempo real.
Perguntas frequentes
-
Recuperação de dados de sincronização primária-secundária
A sincronização primária-secundária refere-se a uma configuração em que o SQL Server utiliza recuperação de desastres primária-secundária, e o banco de dados secundário recupera continuamente dados do banco de dados primário via binlog. Como há um atraso na sincronização de dados entre primário e secundário, especialmente sob condições como latência de rede, os dados recuperados no secundário podem diferir significativamente do primário. Consequentemente, os dados sincronizados a partir do secundário não representam um snapshot completo no momento atual.
-
Restrições de consistência
O SQL Server pertence à categoria RDBMS e pode fornecer interfaces de consulta de dados fortemente consistentes. Por exemplo, enquanto uma tarefa de sincronização está em execução, se outros writers estiverem gravando no banco de dados, o SQL Server Reader não visualizará os dados recém-gravados ou atualizados, graças ao recurso de snapshot do banco de dados.
O texto acima descreve o comportamento de consistência de dados do SQL Server Reader no modo single-threaded. O SQL Server Reader pode realizar extração de dados concorrente com base na sua configuração, portanto, a consistência estrita de dados não pode ser garantida.
Quando o SQL Server Reader divide os dados com base no splitPk, ele inicia várias tarefas concorrentes para realizar a sincronização. Essas tarefas concorrentes não pertencem à mesma transação de leitura e existem intervalos de tempo entre elas. Portanto, os dados extraídos não constituem um snapshot completo e consistente.
Tecnicamente, não é possível obter um snapshot consistente com multithreading; isso deve ser tratado do ponto de vista de engenharia. Abordagens de engenharia envolvem compensações. As opções a seguir são fornecidas e você pode escolha com base na sua situação.
Utilize sincronização single-threaded sem fragmentação de dados. A desvantagem é a velocidade mais lenta, mas garante a consistência.
Interrompa outros writers para que os dados atuais fiquem estáticos — por exemplo, bloqueando a tabela ou parando a sincronização secundária. A desvantagem é o possível impacto nos negócios online.
-
Codificação do banco de dados
O SQL Server Reader usa JDBC para extração de dados. O JDBC se adapta nativamente a várias codificações e realiza a conversão de codificação no nível subjacente. Portanto, o SQL Server Reader não exige que você especifique a codificação — ele pode detectar e converter automaticamente.
-
Métodos de sincronização incremental de dados
O SQL Server Reader usa instruções JDBC SELECT para extrair dados, então você pode usar
SELECT…WHERE…para extração incremental de dados, da seguinte forma:Quando uma aplicação online grava no banco de dados (incluindo inserções, atualizações e exclusões lógicas), ela preenche uma coluna de modificação com o timestamp da alteração. Para tais aplicações, o SQL Server Reader precisa apenas anexar o timestamp da sincronização anterior à cláusula WHERE.
Para dados de streaming apenas de adição (append-only), o SQL Server Reader precisa apenas anexar o ID autoincremental máximo da execução anterior à cláusula WHERE.
Se não houver uma coluna de negócio para distinguir registros recém-inseridos ou atualizados, o SQL Server Reader não poderá realizar sincronização incremental e só poderá sincronizar o conjunto completo de dados.
-
Segurança de SQL
O SQL Server Reader fornece o parâmetro querySql para permitir que você implemente instruções de extração SELECT personalizadas. O SQL Server Reader não realiza nenhuma validação de segurança no querySql.
Apêndice: Demonstração de script e descrições de parâmetros
Configure uma tarefa de sincronização em lote usando o editor de código
Se desejar configure uma tarefa de sincronização em lote usando o editor de código, configure os parâmetros relacionados no script de acordo com os requisitos unificados de formato de script. Para mais informações, consulte Configuração em modo script. As informações a seguir descrevem os parâmetros que devem ser configurados para fontes de dados ao utilizar o editor de código para tarefas de sincronização em lote.
Exemplo de script do 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"
}
]
}
}
Caso queira usar querySql, o seguinte exemplo de código de script do Reader pode ser utilizado (a fonte de dados SQL Server é sql_server_source, a tabela de destino é dbo.test_table e a coluna de destino é 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. O modo script suporta a adição de fontes de dados. O valor aqui deve corresponder ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
table |
Nome da tabela a ser sincronizada. Um único job pode sincronizar apenas uma tabela. |
Sim |
Nenhum |
|
column |
Conjunto de colunas a serem sincronizadas da tabela configurada, descrito como um array JSON. Por padrão, todas as colunas são usadas, por exemplo [ * ].
|
Sim |
Nenhum |
|
splitFactor |
Fator de divisão. Permite configure em quantos shards os dados sincronizados serão divididos. Se a concorrência for configurada, os dados serão divididos em Nota
Faixa recomendada: 1 a 100. Valores muito altos podem causar erros de falta de memória. |
Não |
5 |
|
splitPk |
Ao extrair dados, especifique
|
Não |
Nenhum |
|
where |
Condição de filtro. O SQL Server Reader constrói uma instrução SQL usando
|
Não |
Nenhum |
|
querySql |
Formato: |
Não |
Nenhum |
|
fetchSize |
Este parâmetro define o número de linhas que o plugin busca do servidor de banco de dados em cada lote. Ele determina o número de idas e vindas na rede entre o Data Integration e o servidor, podendo melhorar o desempenho da extração. Nota
Se |
Não |
1024 |
|
driverVersion |
Versão do driver do SQL Server. O padrão é 4,0. É possível especifique a versão 12.10, que suporta autenticação Active Directory Service Principal. |
Não |
4,0 |
Para os valores de
table,columnewhereconfigurados, o SQL Server Reader os monta em uma instrução SQL e a envia ao banco de dados SQL Server.Quanto ao valor de
querySqlconfigurado, o SQL Server Reader o envia diretamente ao banco de dados SQL Server.
Exemplo de script do 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"
}
]
}
}
Parâmetros do script do Writer
|
Parâmetro |
Descrição |
Obrigatório |
Valor padrão |
|
datasource |
Nome da fonte de dados. O modo script suporta a adição de fontes de dados. O valor aqui deve corresponder ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
table |
Nome da tabela a ser sincronizada. |
Sim |
Nenhum |
|
column |
Colunas da tabela de destino onde os dados serão gravados, separadas por vírgulas. Por exemplo, |
Sim |
Nenhum |
|
preSql |
Instruções SQL a serem executadas antes do início da tarefa de sincronização de dados. No modo assistente, apenas uma instrução SQL é permitida; no modo script, múltiplas instruções são suportadas, por exemplo, para limpar dados antigos. |
Não |
Nenhum |
|
postSql |
Instruções SQL a serem executadas após a conclusão da tarefa de sincronização de dados. No modo assistente, apenas uma instrução SQL é permitida; no modo script, múltiplas instruções são suportadas, por exemplo, para adicionar um timestamp. |
Não |
Nenhum |
|
writeMode |
Modo de importação. O modo |
Não |
insert |
|
batchSize |
Número de registros confirmados em um único lote. Este valor pode reduzir significativamente o número de idas e vindas na rede entre o sistema de sincronização de dados e o SQL Server, melhorando o throughput geral. Se o valor for muito alto, o processo de sincronização pode ficar sem memória (OOM). |
Não |
1.024 |
|
driverVersion |
Versão do driver do SQL Server. O padrão é 4,0. É possível especifique a versão 12.10, que suporta autenticação Active Directory Service Principal. |
Não |
4,0 |