A fonte de dados PolarDB permite ler e gravar dados no PolarDB. É possível configure uma tarefa de sincronização usando a interface visual sem código ou o modo de script.
Limitações
Leitura e gravação em lote
É possível ler dados de views.
Leitura em tempo real
Ao utilizar um cluster do PolarDB for MySQL como source, é obrigatório ative o binary log. O PolarDB for MySQL é um banco de dados cloud-native totalmente compatível com o MySQL. Por padrão, ele utiliza logs físicos de alto nível em vez do binary log. Para garantir melhor integração com o ecossistema MySQL, o PolarDB permite ative o binary log.
Tipos de dados suportados
Leitura em lote
A tabela a seguir apresenta os mapeamentos de tipos de dados para o PolarDB Reader.
|
Categoria |
Tipo de dados PolarDB |
|
Inteiro |
INT, TINYINT, SMALLINT, MEDIUMINT e BIGINT |
|
Ponto flutuante |
FLOAT, DOUBLE e DECIMAL |
|
String |
VARCHAR, CHAR, TINYTEXT, TEXT, MEDIUMTEXT e LONGTEXT |
|
Data e hora |
DATE, DATETIME, TIMESTAMP, TIME e YEAR |
|
Booleano |
BIT e BOOL |
|
Binário |
TINYBLOB, MEDIUMBLOB, BLOB, LONGBLOB e VARBINARY |
Tipos de dados não listados na tabela não são suportados.
O plug-in PolarDB Reader trata TINYINT(1) como um número inteiro.
Gravação em lote
Assim como o PolarDB Reader, o PolarDB Writer suporta a maioria dos tipos de dados do PolarDB, mas não todos. Verifique se os seus tipos de dados são compatíveis.
A tabela abaixo detalha os mapeamentos de tipos de dados para o PolarDB Writer.
|
Categoria |
Tipo de dados PolarDB |
|
Inteiro |
INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT e YEAR |
|
Ponto flutuante |
FLOAT, DOUBLE e DECIMAL |
|
String |
VARCHAR, CHAR, TINYTEXT, TEXT, MEDIUMTEXT e LONGTEXT |
|
Data e hora |
DATE, DATETIME, TIMESTAMP e TIME |
|
Booleano |
BOOL |
|
Binário |
TINYBLOB, MEDIUMBLOB, BLOB, LONGBLOB e VARBINARY |
Pré-requisitos
configure uma lista de permissões de endereços IP
Adicione o bloco CIDR da VPC que contém seu Serverless resource group ou Grupo de Recursos Exclusivos para Data Integration à lista de permissões de endereços IP do seu cluster PolarDB. Para mais informações, consulte Set a cluster whitelist.
crie uma conta e conceder permissões
crie uma conta e conceda as permissões necessárias.
crie uma conta de banco de dados para sincronização de dados. A conta deve ter as permissões SELECT, REPLICATION SLAVE, REPLICATION CLIENT no banco de dados.
-
crie uma conta.
Para mais informações, consulte Create and manage a database account.
-
Conceda permissões.
execute o comando a seguir para conceder as permissões necessárias à conta. Alternativamente, você pode conceder a permissão
SUPER.-- CREATE USER 'sync_account'@'%' IDENTIFIED BY 'your_password'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'sync_account'@'%';
Ativar binary logging
Para mais informações, consulte Enable binary logging.
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. Você pode visualize as descrições dos parâmetros no console do DataWorks para entender o significado de cada parâmetro ao adicionar uma fonte de dados.
configure uma tarefa de sincronização
Para obter 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.
configure uma tarefa em lote de tabela única
Para mais informações, consulte Configure a task in the codeless UI e Configure a task in script mode.
Para uma lista completa de parâmetros e um exemplo de script, consulte Appendix: Script demo and parameters.
configure sincronização em tempo real para uma tabela ou banco de dados
Para mais informações, consulte Configure a real-time synchronization task (legacy).
configure leitura em lote de banco de dados completo e sincronização incremental em tempo real
Para mais informações, consulte Configure a real-time full-database synchronization task.
Perguntas frequentes
Apêndice: Exemplo de script e parâmetros
configure uma tarefa de sincronização em lote usando o editor de código
Para configure uma tarefa de sincronização em lote através do editor de código, defina os parâmetros relevantes no script conforme os requisitos unificados de formato de script. Para mais detalhes, consulte Script mode configuration. As informações a seguir descrevem os parâmetros obrigatórios para fontes de dados ao configure uma tarefa de sincronização em lote via editor de código.
Exemplo de script do Reader
O código abaixo fornece um exemplo de script para leitura de dados de uma única tabela em um banco de dados. Para detalhes sobre os parâmetros, consulte a seção de descrição de parâmetros.
{
"type": "job",
"steps": [
{
"parameter": {
"datasource": "test_005", // The name of the data source.
"column": [ // The source column names.
"id",
"name",
"age",
"sex",
"salary",
"interest"
],
"where": "id=1001", // The filter condition.
"splitPk": "id", // The sharding key.
"table": "PolarDB_person", // The source table name.
"useReadonly": "false" // Specifies whether to read data from a secondary database.
},
"name": "Reader",
"category": "reader"
},
{
"parameter": {}
],
"version": "2.0", // The version number.
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": { // The error tolerance.
"record": ""
},
"speed": {
"concurrent": 6, // The concurrency level.
"throttle": true, // If throttle is set to false, the mbps parameter does not take effect and throttling is disabled. If throttle is set to true, throttling is enabled.
"mbps":"12" // The throttling rate, in MB/s.
}
}
}
Parâmetros do script do Reader
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
datasource |
Nome da fonte de dados. No modo de script, o valor deste parâmetro deve ser idêntico ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
table |
Nome da tabela de origem de onde os dados serão sincronizados. |
Sim |
Nenhum |
|
useReadonly |
Define se os dados devem ser lidos de um banco de dados secundário. Se definido como |
Não |
false |
|
column |
Colunas da tabela de origem a serem sincronizadas. O valor deve ser um array JSON. Este parâmetro é obrigatório e não pode estar vazio. Exemplo:
|
Sim |
Nenhum |
|
splitPk |
Chave de fragmentação. Permite especifique uma coluna no parâmetro splitPk para fragmentar os dados, habilitando processamento concorrente e aumentando a eficiência da sincronização.
|
Não |
Nenhum |
|
splitFactor |
Fator de fragmentação. Define a quantidade de shards. Ao configure um nível de concorrência, os dados são divididos em concurrency × splitFactor shards. Por exemplo, se a concorrência for 5 e Nota
Recomenda-se defina este parâmetro entre 1 e 100. Valores excessivamente altos podem causar erros de falta de memória (OOM). |
Não |
5 |
|
where |
Condição de filtro. Por exemplo, para sincronizar apenas os dados do dia atual, defina o parâmetro
|
Não |
Nenhum |
|
querySql (Modo avançado, indisponível na interface visual) |
Em certos cenários, o parâmetro where não basta para descrever as condições de filtragem. Use este parâmetro para definir uma consulta SQL personalizada. Quando configurado, o sistema ignora os parâmetros column, table e where, utilizando diretamente o conteúdo deste parâmetro para filtrar os dados. Por exemplo, para sincronizar dados após um join de múltiplas tabelas, use |
Não |
Nenhum |
Exemplo de script do Writer
O código a seguir apresenta um exemplo de configuração de script. Para mais detalhes sobre os parâmetros, consulte a seção de descrição de parâmetros.
{
"type": "job",
"steps": [
{
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"parameter": {
"postSql": [], // The SQL statement to be executed after the synchronization task is complete.
"datasource": "test_005", // The name of the data source.
"column": [ // The destination column names.
"id",
"name",
"age",
"sex",
"salary",
"interest"
],
"writeMode": "insert", // The write mode.
"batchSize": 256, // The number of records to submit in each batch.
"table": "PolarDB_person_copy", // The destination table name.
"preSql": [] // The SQL statement to be executed before the synchronization task starts.
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0", // The version number.
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": { // The error tolerance.
"record": ""
},
"speed": {
"throttle":true, // If throttle is set to false, the mbps parameter does not take effect and throttling is disabled. If throttle is set to true, throttling is enabled.
"concurrent":6, // The concurrency level.
"mbps":"12" // The throttling rate, in MB/s.
}
}
}
Parâmetros do script do Writer
-
Todos os parâmetros
Parâmetro
Descrição
Obrigatório
Padrão
datasource
Nome da fonte de dados. No modo de script, o valor deve corresponder exatamente ao nome da fonte de dados adicionada.
Sim
Nenhum
table
Nome da tabela de destino onde os dados serão gravados.
Sim
Nenhum
writeMode
Modo de gravação. Valores válidos:
-
insert: corresponde aINSERT INTOna interface visual. -
update: corresponde aON DUPLICATE KEY UPDATEna interface visual. -
replace: corresponde aREPLACE INTOna interface visual.
Para mais informações sobre os modos e exemplos, consulte a seção Detalhes do parâmetro writeMode abaixo.
NotaPara o PolarDB for PostgreSQL, apenas o modo
inserté suportado. Para atualize dados e evitar conflitos de chave primária, remova os dados duplicados antes de execute a tarefa de sincronização em lote. Os métodos recomendados são:-
Método 1: No parâmetro preSql (que corresponde a Pre-Import Statement na interface visual), configure uma instrução
TRUNCATEpara limpar a tabela de destino. -
Método 2: Processe a tabela de destino em um nó upstream para prevenir conflitos de chave primária durante a sincronização.
Não
insert
column
Colunas de destino nas quais os dados serão gravados. Separe as colunas por vírgulas (,). Exemplo:
"column": ["id", "name", "age"]. Para gravar em todas as colunas sequencialmente, utilize um asterisco (). Exemplo:"column": [""].Sim
Nenhum
preSql
Especifica instruções SQL a serem executadas antes do início da tarefa. A interface visual aceita apenas uma instrução, enquanto o modo de script suporta múltiplas, como comandos para limpar dados existentes.
Não
Nenhum
postSql
Define instruções SQL para execução após a conclusão da tarefa. A interface visual permite apenas uma instrução; já o modo de script aceita várias, como a inserção de timestamps.
Não
Nenhum
batchSize
Quantidade de registros enviados por lote. Valores maiores aumentam o throughput ao reduzir interações de rede com o PolarDB, mas valores excessivos podem provocar erros de falta de memória (OOM).
Não
1024
updateColumn
Colunas a serem atualizadas quando houver conflito de chave primária ou índice único. Este parâmetro só é válido quando
writeModeestá definido comoupdate. Múltiplas colunas podem ser especificadas, separadas por vírgulas. Exemplo:"updateColumn": ["name", "age"].NotaEste parâmetro é suportado apenas no PolarDB for MySQL.
Não
Nenhum
-
-
Detalhes do parâmetro writeMode
Comparação
insert(corresponde aINSERT INTOna interface visual)update(corresponde aON DUPLICATE KEY UPDATEna interface visual)replace(corresponde aREPLACE INTOna interface visual)Estratégia de tratamento de conflitos
Se ocorrer conflito de chave primária ou índice único, a linha conflitante não é gravada na tabela de destino e é tratada como dado sujo.
Sem conflitos de chave primária ou índice único, funciona igual ao modo INSERT INTO. Em caso de conflito, a nova linha atualiza apenas os campos especificados da linha existente.
Na ausência de conflitos de chave primária ou índice único, comporta-se como o modo INSERT INTO. Havendo conflito, a linha existente é excluída e a nova é inserida, substituindo efetivamente todos os seus campos.
Exemplo de dados
-
Tabela de origem
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+ -
Tabela de destino original
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 2 | wangwu | | +----+---------+-----+ -
Após a execução da tarefa, uma linha é gravada na tabela de destino e outra é registrada como dado sujo.
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | wangwu | | +----+---------+-----+
-
Cenário 1: A tarefa está configurada para sincronizar apenas algumas colunas:
"column": ["id","name"]-
Tabela de origem
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+ -
Tabela de destino original
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 2 | wangwu | 3 | +----+---------+-----+ -
Após a execução da tarefa, duas linhas são gravadas na tabela de destino e nenhum dado sujo é registrado.
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | 3 | +----+---------+-----+
-
-
Cenário 2: A tarefa está configurada para sincronizar todas as colunas:
"column": ["id","name","age"]-
Tabela de origem
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+ -
Tabela de destino original
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 2 | wangwu | 3 | +----+---------+-----+ -
Após a execução da tarefa, duas linhas são gravadas na tabela de destino e nenhum dado sujo é registrado.
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+
-
-
Tabela de origem
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+ -
Tabela de destino original
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 2 | wangwu | 3 | +----+---------+-----+ -
Após a execução da tarefa, duas linhas são gravadas na tabela de destino e nenhum dado sujo é registrado.
+----+---------+-----+ | id | name | age | +----+---------+-----+ | 1 | zhangsan| 1 | | 2 | lisi | | +----+---------+-----+
-