Todos os produtos
Search
Central de documentação

Data Transmission Service:Adicionar colunas adicionais

Última atualização: Aug 31, 2026

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:

Configurar colunas adicionais

  1. Acesse a página Data Synchronization Tasks.Página Data Synchronization Tasks do novo console do DTS

    1. Faça login no console do Data Management (DMS).

    2. Na barra de navegação superior, clique em Data + AI.

    3. 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 .
  2. 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 .
  3. Siga as instruções até a etapa Configure Objects.

  4. Defina Synchronization Types como Schema Synchronization.

  5. Em Source Objects, selecione os bancos de dados ou tabelas a sincronizar e clique em image.png para movê-los para Selected Objects.

  6. Em Selected Objects, clique com o botão direito do mouse no banco de dados ou na tabela.

  7. Na caixa de diálogo, vá até a seção Additional Columns e clique em Add Column.

  8. 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.

  9. Clique em OK.

  10. 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

__TB__

Identificar cada linha com o nome do banco de dados de origem

__DB__

Registrar o tipo de operação (insert/update/delete)

__OPERATION__

Registrar o momento do commit da transação

__COMMIT_TIMESTAMP__

Criar uma chave composta a partir de colunas de origem

'prefix:'+ col1 +':'+ col2

Diferenciar inserções de outras operações

(op_eq(__OPERATION__,'__OP_INSERT__')? 1 : 0)

Mascarar dados sensíveis em uma coluna

str_mask( phone , 7, 10, '#')

Constantes

Tipo

Exemplo

int

123

float

123.4

string

"hello1_world"

boolean

true ou false

datetime

DATETIME('2021-01-01 10:10:01')

Variáveis

Use estas variáveis internas para capturar metadados de cada linha replicada.

Variável

Descrição

Tipo de dado

Valor de exemplo

__TB__

Nome da tabela de origem

string

table

__DB__

Nome do banco de dados de origem

string

mydb

__OPERATION__

Tipo de operação DML

string

__OP_INSERT__, __OP_UPDATE__, __OP_DELETE__

__COMMIT_TIMESTAMP__

Horário do commit da transação

datetime

'2021-01-01 10:10:01'

column

Valor de uma coluna de origem para a linha atual

string

id , name

__SCN__

System Change Number (SCN) — identifica exclusivamente a versão e o horário do commit da transação

string

22509****

__ROW_ID__

ID de endereço de um registro de dados — localiza a linha de forma exclusiva. Não suportado para origens MySQL.

string

AAAgWHAAKAAJgX****

Funções de expressão

Operações numéricas

Função

Sintaxe

Parâmetros

Valor de retorno

Exemplo

Adição

op_sum(value1, value2) ou value1+value2

value1, value2: integer ou float

Integer se ambas as entradas forem integers; caso contrário, float

op_sum( col1 , 1.0)

Subtração

op_sub(value1, value2) ou value1-value2

value1, value2: integer ou float

Integer se ambas as entradas forem integers; caso contrário, float

op_sub( col1 , 1.0)

Multiplicação

op_mul(value1, value2) ou value1*value2

value1, value2: integer ou float

Integer se ambas as entradas forem integers; caso contrário, float

op_mul( col1 , 1.0)

Divisão

op_div_true(value1, value2) ou value1/value2

value1, value2: integer ou float

Integer se ambas as entradas forem integers; caso contrário, float

op_div_true( col1 , 2.0) — se col1=15, retorna 7.5

Módulo

op_mod(value1, value2)

value1, value2: integer ou float

Integer se ambas as entradas forem integers; caso contrário, float

op_mod( col1 , 10) — se col1=23, retorna 3

Operações lógicas

Função

Sintaxe

Parâmetros

Valor de retorno

Exemplo

Igualdade

op_eq(value1, value2)

integer, float ou string

boolean

op_eq( col1 , 23)

Maior que

op_gt(value1, value2)

integer, float ou string

boolean

op_gt( col1 , 1.0)

Menor que

op_lt(value1, value2)

integer, float ou string

boolean

op_lt( col1 , 1.0)

Maior ou igual a

op_ge(value1, value2)

integer, float ou string

boolean

op_ge( col1 , 1.0)

Menor ou igual a

op_le(value1, value2)

integer, float ou string

boolean

op_le( col1 , 1.0)

AND

op_and(value1, value2)

boolean

boolean

op_and( is_male , is_student )

OR

op_or(value1, value2)

boolean

boolean

op_or( is_male , is_student )

IN

op_in(value, json_array)

value: qualquer tipo; json_array: string no formato JSON

boolean

op_in( id ,json_array('["0","1","2","3","4","5","6","7","8"]'))

É nulo

op_is_null(value)

qualquer tipo

boolean

op_is_null( name )

Não é nulo

op_is_not_null(value)

qualquer tipo

boolean

op_is_not_null( name )

Funções de string

Função

Sintaxe

Parâmetros

Valor de retorno

Exemplo

Concatenar strings

op_add(str_1, str_2, ..., str_n)

strings

String concatenada

op_add( col ,'hangzhou','dts')

Formatar e concatenar

str_format(format, value1, value2, ...)

format: string com placeholders {}

String formatada

str_format("part1: {}, part2: {}", col1 , col2 ) — se col1="ab" e col2="12", retorna "part1: ab, part2: 12"

Substituir substring

str_replace(original, oldStr, newStr, count)

count: número máximo de substituições; -1 substitui todas

String após a substituição

str_replace( name , "a", 'b', -1) — se name="aba", retorna "bbb"

Substituir em todos os campos de string

tail_replace_string_field(search, replace, all)

all: apenas true é suportado

String após a substituição

tail_replace_string_field('\u000f','',true) — substitui \u000f por uma string vazia em todos os campos varchar, text e char

Remover caracteres

str_strip(string_val, charSet)

charSet: caracteres a remover

String sem os caracteres iniciais e finais

str_strip( name , 'ab') — se name="axbzb", retorna "xbz"

Converter para minúsculas

str_lower(value)

coluna de string ou constante

String em minúsculas

str_lower( str_col )

Converter para maiúsculas

str_upper(value)

coluna de string ou constante

String em maiúsculas

str_upper( str_col )

String para integer

cast_string_to_long(value)

string

Integer

cast_string_to_long( col )

Integer para string

cast_long_to_string(value)

integer

String

cast_long_to_string( col )

Contar ocorrências

str_count(str, pattern)

str: string; pattern: substring a buscar

Número de ocorrências

str_count( str_col , 'abc') — se str_col="zabcyabcz", retorna 2

Encontrar substring

str_find(str, pattern)

str: string; pattern: substring a buscar

Posição da primeira correspondência; -1 se não encontrada

str_find( str_col , 'abc') — se str_col="xabcy", retorna 1

Verificar se contém apenas letras

str_isalpha(str)

coluna de string ou constante

boolean

str_isalpha( str_col )

Verificar se contém apenas dígitos

str_isdigit(str)

coluna de string ou constante

boolean

str_isdigit( str_col )

Correspondência de expressão regular

regex_match(str, regex)

str: string; regex: padrão regex

boolean

regex_match(__TB__,'user_\\\d+')

Mascarar parte de uma string

str_mask(str, start, end, maskStr)

start: posição inicial (mín: 0); end: posição final (máx: length−1); maskStr: caractere único

String mascarada

str_mask( phone , 7, 10, '#')

Obter substring após uma string

substring_after(str, cond)

str: string original; cond: delimitador

Substring após cond (delimitador não incluído)

substring_after( col , 'abc')

Obter substring antes de uma string

substring_before(str, cond)

str: string original; cond: delimitador

Substring antes de cond (delimitador não incluído)

substring_before( col , 'efg')

Obter substring entre duas strings

substring_between(str, cond1, cond2)

str: string original; cond1, cond2: delimitadores

Substring entre cond1 e cond2 (delimitadores não incluídos)

substring_between( col , 'abc','efg')

Verificar se o valor é uma string

is_string_value(value)

string ou nome de coluna

boolean

is_string_value( col1 )

Obter um campo de um documento MongoDB

bson_value("field1", "field2", ...)

Caminho do campo aninhado

Valor do campo

e_set( user_name , bson_value("person","name"))

Expressões condicionais

Sintaxe

Parâmetros

Valor de retorno

Exemplo

(cond ? val_1 : val_2)

cond: boolean; val_1 e val_2: mesmo tipo

val_1 se cond for verdadeiro; val_2 caso contrário

(id>1000? 1 : 0)

Funções de tempo

Função

Sintaxe

Parâmetros

Valor de retorno

Exemplo

Hora atual (precisão de segundos)

dt_now()

Nenhum

DATETIME, com precisão de segundos

dt_now()

Hora atual (precisão de milissegundos)

dt_now_millis()

Nenhum

DATETIME, com precisão de milissegundos

dt_now_millis()

Timestamp UTC (segundos) para DATETIME

dt_fromtimestamp(value, [timezone])

value: integer; timezone: opcional

DATETIME, com precisão de segundos

dt_fromtimestamp(1626837629,'GMT+08')

Timestamp UTC (milissegundos) para DATETIME

dt_fromtimestamp_millis(value, [timezone])

value: integer; timezone: opcional

DATETIME, com precisão de milissegundos

dt_fromtimestamp_millis(1626837629123,'GMT+08')

DATETIME para timestamp UTC (segundos)

dt_parsetimestamp(value, [timezone])

value: DATETIME; timezone: opcional

Integer

dt_parsetimestamp( datetime_col ,'GMT+08')

DATETIME para timestamp UTC (milissegundos)

dt_parsetimestamp_millis(value, [timezone])

value: DATETIME; timezone: opcional

Integer

dt_parsetimestamp_millis( datetime_col ,'GMT+08')

DATETIME para string

dt_str(value, format)

value: DATETIME; format: yyyy-MM-dd HH:mm:ss

String

dt_str( col1 , 'yyyy-MM-dd HH:mm:ss')

String para DATETIME

dt_strptime(value, format)

value: string; format: yyyy-MM-dd HH:mm:ss

DATETIME

dt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd hh:mm:ss')

Ajustar DATETIME

dt_add(value, [years=intVal], [months=intVal], [days=intVal], [hours=intVal], [minutes=intVal])

value: DATETIME; intVal: integer (valores negativos subtraem)

DATETIME

dt_add(datetime_col,years=-1)

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)

      Importante

      Se 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.

      Nota

      O 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:

  1. 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.

  2. Adicione as colunas __DTS_TP_TO_REDIS_KEY__ e __DTS_TP_TO_REDIS_VALUE__.

  3. 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 origem

    • Valor: {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 ))

  4. 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 get em chaves do tipo stat_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ção dt_fromtimestamp converteu corretamente o timestamp Unix para um valor datetime.