Ao criar uma tarefa de sincronização ou migração de dados no Data Transmission Service (DTS), você pode adicionar colunas extras à tabela de destino e atribuir valores a elas. Após a gravação dos dados no destino, use esses valores para filtrar registros, gerenciar metadados, deduplicar e ordenar dados.
Cenários suportados
O recurso de colunas adicionais está disponível nas seguintes combinações de origem e destino:
|
Tipo de banco de dados de origem |
Tipo de banco de dados de destino |
|
Qualquer |
DataHub, Lindorm, Kafka ou ClickHouse |
|
DB2 for LUW ou DB2 for iSeries (AS/400) |
MySQL ou PolarDB for MySQL |
|
MySQL, MariaDB ou PolarDB for MySQL |
MySQL, MariaDB ou PolarDB for MySQL |
|
MySQL |
Tair/Redis, AnalyticDB for PostgreSQL ou AnalyticDB for MySQL 3.0 |
|
PolarDB for PostgreSQL |
AnalyticDB for PostgreSQL |
|
SQL Server |
MySQL |
Observações de uso
Em instâncias de sincronização, defina Synchronization Types como Schema Synchronization. Em instâncias de migração, configure Migration Types como Schema Migration.
Antes de modificar regras de colunas adicionais em uma tarefa de sincronização em execução, verifique se os nomes das colunas não entram em conflito com colunas existentes na tabela de destino.
Se o banco de dados de origem for MongoDB, as coleções de destino não podem conter campos chamados _id ou _value. Caso contrário, a sincronização falhará.
Clique com o botão direito do mouse em um banco de dados em Selected Objects para aplicar as colunas adicionais configuradas a todas as tabelas desse banco de dados de destino.
Se a tarefa de sincronização tiver ETL (extração, transformação e carga) configurado, as regras de colunas adicionais executam primeiro para gerar um valor. Depois, o script ETL calcula o valor final sincronizado com o destino.
Adicionar colunas adicionais a uma tarefa de sincronização
Os passos abaixo usam uma instância de sincronização como exemplo. O mesmo procedimento se aplica a instâncias de migração.
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma instância de sincronização ou migração do DTS em um cenário suportado
Acesso ao console do Data Management (DMS) ou ao console do DTS
Configurar colunas adicionais
-
Acesse a página Data Synchronization Tasks.Página Data Synchronization Tasks do novo console do DTS
Faça login no console do Data Management (DMS).
Na barra de navegação superior, clique em Data + AI.
No painel de navegação à esquerda, escolha DTS (DTS) > Data Synchronization.
O caminho de navegação pode variar conforme o modo do console do DMS. Para mais detalhes, consulte Simple mode console e Customize the layout and style of the DMS console . Você também pode acessar diretamente a página Data Synchronization Tasks do novo console do DTS .
-
Clique em Create Task e configure os bancos de dados de origem e de destino.
Para adicionar colunas adicionais a uma instância de sincronização com status Running , clique em Reselect Objects .
Siga as instruções até a etapa Configure Objects.
Defina Synchronization Types como Schema Synchronization.
Em Source Objects, selecione os bancos de dados ou tabelas a sincronizar e clique em
para movê-los para Selected Objects.Em Selected Objects, clique com o botão direito do mouse no banco de dados ou na tabela.
Na caixa de diálogo, vá até a seção Additional Columns e clique em Add Column.
-
Insira o Column Name, o Type e o Assign Value da nova coluna.
Column Name e Type definem a coluna adicionada à tabela de destino.
Assign Value é uma expressão que referencia colunas da tabela de origem ou variáveis internas. Clique no ícone
para abrir o editor de expressões. Para detalhes sobre a sintaxe, consulte Referência de expressões.
Clique em OK.
Siga as instruções para concluir o restante da configuração da tarefa.
Referência de expressões
O valor de uma coluna adicional é composto por constantes, variáveis, operadores e funções de expressão. A sintaxe é compatível com a DSL (Domain-Specific Language) de processamento de dados usada para ETL.
Nas expressões, coloque os nomes das colunas entre crases (col), e não entre aspas simples ('col').
Casos de uso comuns
Antes de consultar a referência completa, veja os padrões mais utilizados:
|
Objetivo |
Padrão de expressão |
|
Identificar cada linha com o nome da tabela de origem |
|
|
Identificar cada linha com o nome do banco de dados de origem |
|
|
Registrar o tipo de operação (insert/update/delete) |
|
|
Registrar o momento do commit da transação |
|
|
Criar uma chave composta a partir de colunas de origem |
|
|
Diferenciar inserções de outras operações |
|
|
Mascarar dados sensíveis em uma coluna |
|
Constantes
|
Tipo |
Exemplo |
|
int |
|
|
float |
|
|
string |
|
|
boolean |
|
|
datetime |
|
Variáveis
Use estas variáveis internas para capturar metadados de cada linha replicada.
|
Variável |
Descrição |
Tipo de dado |
Valor de exemplo |
|
|
Nome da tabela de origem |
string |
|
|
|
Nome do banco de dados de origem |
string |
|
|
|
Tipo de operação DML |
string |
|
|
|
Horário do commit da transação |
datetime |
|
|
|
Valor de uma coluna de origem para a linha atual |
string |
|
|
|
System Change Number (SCN) — identifica exclusivamente a versão e o horário do commit da transação |
string |
|
|
|
ID de endereço de um registro de dados — localiza a linha de forma exclusiva. Não suportado para origens MySQL. |
string |
|
Funções de expressão
Operações numéricas
|
Função |
Sintaxe |
Parâmetros |
Valor de retorno |
Exemplo |
|
Adição |
|
|
Integer se ambas as entradas forem integers; caso contrário, float |
|
|
Subtração |
|
|
Integer se ambas as entradas forem integers; caso contrário, float |
|
|
Multiplicação |
|
|
Integer se ambas as entradas forem integers; caso contrário, float |
|
|
Divisão |
|
|
Integer se ambas as entradas forem integers; caso contrário, float |
|
|
Módulo |
|
|
Integer se ambas as entradas forem integers; caso contrário, float |
|
Operações lógicas
|
Função |
Sintaxe |
Parâmetros |
Valor de retorno |
Exemplo |
|
Igualdade |
|
integer, float ou string |
boolean |
|
|
Maior que |
|
integer, float ou string |
boolean |
|
|
Menor que |
|
integer, float ou string |
boolean |
|
|
Maior ou igual a |
|
integer, float ou string |
boolean |
|
|
Menor ou igual a |
|
integer, float ou string |
boolean |
|
|
AND |
|
boolean |
boolean |
|
|
OR |
|
boolean |
boolean |
|
|
IN |
|
|
boolean |
|
|
É nulo |
|
qualquer tipo |
boolean |
|
|
Não é nulo |
|
qualquer tipo |
boolean |
|
Funções de string
|
Função |
Sintaxe |
Parâmetros |
Valor de retorno |
Exemplo |
|
Concatenar strings |
|
strings |
String concatenada |
|
|
Formatar e concatenar |
|
|
String formatada |
|
|
Substituir substring |
|
|
String após a substituição |
|
|
Substituir em todos os campos de string |
|
|
String após a substituição |
|
|
Remover caracteres |
|
|
String sem os caracteres iniciais e finais |
|
|
Converter para minúsculas |
|
coluna de string ou constante |
String em minúsculas |
|
|
Converter para maiúsculas |
|
coluna de string ou constante |
String em maiúsculas |
|
|
String para integer |
|
string |
Integer |
|
|
Integer para string |
|
integer |
String |
|
|
Contar ocorrências |
|
|
Número de ocorrências |
|
|
Encontrar substring |
|
|
Posição da primeira correspondência; |
|
|
Verificar se contém apenas letras |
|
coluna de string ou constante |
boolean |
|
|
Verificar se contém apenas dígitos |
|
coluna de string ou constante |
boolean |
|
|
Correspondência de expressão regular |
|
|
boolean |
|
|
Mascarar parte de uma string |
|
|
String mascarada |
|
|
Obter substring após uma string |
|
|
Substring após |
|
|
Obter substring antes de uma string |
|
|
Substring antes de |
|
|
Obter substring entre duas strings |
|
|
Substring entre |
|
|
Verificar se o valor é uma string |
|
string ou nome de coluna |
boolean |
|
|
Obter um campo de um documento MongoDB |
|
Caminho do campo aninhado |
Valor do campo |
|
Expressões condicionais
|
Sintaxe |
Parâmetros |
Valor de retorno |
Exemplo |
|
|
|
|
|
Funções de tempo
|
Função |
Sintaxe |
Parâmetros |
Valor de retorno |
Exemplo |
|
Hora atual (precisão de segundos) |
|
Nenhum |
DATETIME, com precisão de segundos |
|
|
Hora atual (precisão de milissegundos) |
|
Nenhum |
DATETIME, com precisão de milissegundos |
|
|
Timestamp UTC (segundos) para DATETIME |
|
|
DATETIME, com precisão de segundos |
|
|
Timestamp UTC (milissegundos) para DATETIME |
|
|
DATETIME, com precisão de milissegundos |
|
|
DATETIME para timestamp UTC (segundos) |
|
|
Integer |
|
|
DATETIME para timestamp UTC (milissegundos) |
|
|
Integer |
|
|
DATETIME para string |
|
|
String |
|
|
String para DATETIME |
|
|
DATETIME |
|
|
Ajustar DATETIME |
|
|
DATETIME |
|
Funções globais
-
Funções de controle de fluxo
Função
Sintaxe
Parâmetros
Exemplo
Instrução if
e_if(bool_expr, func_invoke)
bool_expr: constante booleana ou chamada de função. Constantes: true ou false. Exemplo de chamada de função: op_gt(
id, 10).func_invoke: chamada de função. Suportadas: e_drop, e_keep, e_set, e_if, e_compose
e_if(op_gt(
id, 10), e_drop()); descarta o registro se ID > 10.Instrução if-else
e_if_else(bool_expr, func_invoke1, func_invoke2)
bool_expr: constante booleana ou chamada de função. Constantes: true ou false. Exemplo de chamada de função: op_gt(
id, 10).func_invoke1: chamada de função executada se a condição for verdadeira.
func_invoke2: chamada de função executada se a condição for falsa.
e_if_else(op_gt(
id, 10), e_set(tag, 'large'), e_set(tag, 'small')); define tag como "large" se ID > 10, caso contrário como "small".Instrução semelhante a switch que avalia múltiplas condições e executa a primeira operação correspondente. Executa uma operação padrão se nenhuma condição for atendida.
s_switch(condition1, func1, condition2, func2, ..., default=default_func)
condition1: constante booleana ou chamada de função. Constantes: true ou false. Exemplo de chamada de função: op_gt(
id, 10).func_invoke: chamada de função. Verifica condition1; se verdadeira, executa esta função e sai do switch. Se falsa, verifica a próxima condição.
default_func: chamada de função executada se todas as condições forem falsas.
e_switch(op_gt(
id, 100), e_set(str_col, '>100'), op_gt(id, 90), e_set(str_col, '>90'), default=e_set(str_col, '<=90')).Combinar múltiplas operações
e_compose(func1, func2, func3, ...)
func1: chamada de função. Pode ser e_set, e_drop, e_if.
func2: chamada de função. Pode ser e_set, e_drop, e_if.
e_compose(e_set(
str_col, 'test'), e_set(dt_col, dt_now())); define str_col como "test" e dt_col como a hora atual. -
Funções de manipulação de dados
Função
Sintaxe
Parâmetros
Exemplo
Descartar este registro (não sincronizar)
e_drop()
Nenhum
e_if(op_gt(
id, 10), e_drop()); descarta registros onde ID > 10.Manter este registro (sincronizar com o destino)
e_keep(condition)
condition: expressão booleana
e_keep(op_gt(id, 1)); sincroniza apenas registros onde ID > 1.
Definir valor da coluna
e_set(
col, val, NEW)col: nome da coluna
val: constante ou chamada de função. Deve corresponder ao tipo de dado de col.
NEW: converte col para o tipo de dado de val (opcional)
ImportanteSe você omitir NEW, não inclua a vírgula anterior. Garanta a compatibilidade dos tipos de dados para evitar erros na tarefa.
e_set(
dt_col, dt_now()); define dt_col como a hora atual.e_set(
col1,col2+ 1); define col1 como col2 + 1.e_set(
col1, 1, NEW); converte col1 para tipo numérico e define como 1.
Retenção de campos, descarte de campos e mapeamento de nomes de campos no MongoDB
e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})
: nomes de campos a manter; significa todos os campos.
fieldA: nomes de campos a descartar.
{"fieldB":"fieldC"}: mapeamento de nomes de campos; fieldB é o nome do campo de origem, fieldC é o nome do campo de destino.
NotaO mapeamento de nomes de campos é opcional.
e_expand_bson_value("*", "_id,name"); grava todos os campos exceto _id e name no destino.
Perguntas frequentes
Como configurar chaves e valores personalizados para uma tarefa do DTS de MySQL para Redis?
Por padrão, o DTS mapeia toda a linha de origem usando uma das três opções de Cache Mapping Mode. Para extrair colunas específicas e criar pares chave-valor personalizados, adicione duas colunas adicionais especiais: __DTS_TP_TO_REDIS_KEY__ e __DTS_TP_TO_REDIS_VALUE__.
Os três modos de mapeamento de dados de cache são:
KV Model (Database-Table-Primary Key)
HASH Model (Database-Table-Primary Key)
HASH Model (Database-Table)
Configure também o Value Data Splitting Method (opções: JSON format, Key-Value comma-separated ou Value comma-separated) e selecione os tipos de operação DML a sincronizar (INSERT, UPDATE, DELETE).
Passos de configuração:
Ao configurar objetos, mova os bancos de dados e tabelas para o painel direito e clique no botão de edição do Redis DB de destino.
Adicione as colunas
__DTS_TP_TO_REDIS_KEY__e__DTS_TP_TO_REDIS_VALUE__.-
Defina as expressões de Assign Value usando a sintaxe DSL. Por exemplo, considere a seguinte tabela MySQL
aes:CREATE TABLE `aes` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Auto-increment primary key', `login_time` INT(10) NOT NULL DEFAULT '0' COMMENT 'Logon identifier time', `pay_time` INT(10) NOT NULL DEFAULT '0' COMMENT 'Payment identifier time', `gid` INT(10) NOT NULL DEFAULT '0' COMMENT 'Game ID', `cid` INT(10) NOT NULL DEFAULT '0' COMMENT 'Channel ID', `gcp_code` VARCHAR(40) NOT NULL DEFAULT '' COMMENT 'Channel package number. An empty value indicates a new entry for the gid.', `uname` VARCHAR(120) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Account', PRIMARY KEY (`id`), UNIQUE KEY `idx_uq` (`gid`, `gcp_code`, `uname`), KEY `idx_uname` (`uname`) )ENGINE=InnoDB AUTO_INCREMENT=48022 DEFAULT CHARSET=utf8 COMMENT='Game account activation time information table';Requisitos de negócio:
Chave:
stat_create_day:{gcp_code}:{uname}— construída a partir de duas colunas de origemValor:
{login_time}— um timestamp Unix convertido para formato datetime
Expressões Assign Value:
__DTS_TP_TO_REDIS_KEY__:'stat_create_day'+':'+gcp_code+':'+uname__DTS_TP_TO_REDIS_VALUE__:dt_fromtimestamp(cast_string_to_long(login_time))
-
Após a conclusão da sincronização ou migração, o par chave-valor no Redis terá a seguinte aparência:
Depois que a sincronização de dados for concluída, conecte-se à instância Redis de destino pelo DMS. No DB0, execute o comando
getem chaves do tipostat_create_day:{gcp_code}:{uname}. O valor retornado estará no formato datetime (por exemplo,2025-11-18 23:49:29), o que confirma que a funçãodt_fromtimestampconverteu corretamente o timestamp Unix para um valor datetime.