Tous les produits
Search
Centre de documentation

Data Transmission Service:Add additional columns

Dernière mise à jour :Aug 31, 2026

Lorsque vous créez une tâche de synchronisation ou de migration des données dans Data Transmission Service (DTS), vous pouvez ajouter des colonnes supplémentaires à la table de destination et leur attribuer des valeurs. Une fois les données chargées dans la destination, filtrez selon les valeurs de ces colonnes pour effectuer la gestion des métadonnées, la déduplication et le tri.

Scénarios pris en charge

Les colonnes supplémentaires sont prises en charge dans les combinaisons source-destination suivantes :

Type de base de données source

Type de base de données de destination

Tout type

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

Notes d'utilisation

  • Pour les instances de synchronisation, définissez Synchronization Types sur Schema Synchronization. Pour les instances de migration, définissez Migration Types sur Schema Migration.

  • Avant de modifier les règles des colonnes supplémentaires sur une tâche de synchronisation en cours d'exécution, vérifiez si les noms de colonnes entrent en conflit avec les colonnes existantes dans la table de destination.

  • Si la base de données source est MongoDB, les collections de destination ne doivent pas contenir de champs nommés _id ou _value. Dans le cas contraire, la synchronisation échoue.

  • Un clic droit sur une base de données dans Selected Objects applique les colonnes supplémentaires configurées à toutes les tables de cette base de données de destination.

  • Si l'extraction, la transformation et le chargement (ETL) sont configurés sur la tâche de synchronisation, les règles des colonnes supplémentaires s'exécutent en premier pour générer une valeur, puis le script ETL calcule la valeur finale qui est synchronisée vers la destination.

Ajouter des colonnes supplémentaires à une tâche de synchronisation

Les étapes suivantes utilisent une instance de synchronisation comme exemple. La même approche s'applique aux instances de migration.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Configurer les colonnes supplémentaires

  1. Accédez à la page Data Synchronization Tasks.Page Data Synchronization Tasks de la nouvelle console DTS

    1. Connectez-vous à la console Data Management (DMS).

    2. Dans la barre de navigation supérieure, cliquez sur Data + AI.

    3. Dans le volet de navigation de gauche, choisissez DTS (DTS) > Data Synchronization.

    Le chemin de navigation peut varier selon le mode de la console DMS. Pour plus de détails, consultez Console en mode simple et Personnaliser la disposition et le style de la console DMS . Vous pouvez également accéder directement à la page Data Synchronization Tasks de la nouvelle console DTS .
  2. Cliquez sur Create Task et configurez les bases de données source et de destination.

    Pour ajouter des colonnes supplémentaires à une instance de synchronisation Running , cliquez plutôt sur Reselect Objects .
  3. Suivez les instructions jusqu'à l'étape Configure Objects.

  4. Définissez Synchronization Types sur Schema Synchronization.

  5. Dans Source Objects, sélectionnez les bases de données ou les tables à synchroniser, puis cliquez sur image.png pour les déplacer vers Selected Objects.

  6. Dans Selected Objects, faites un clic droit sur la base de données ou la table.

  7. Dans la boîte de dialogue, accédez à la section Additional Columns et cliquez sur Add Column.

  8. Saisissez le Column Name (Nom de la colonne), le Type et la valeur à Assign Value (Attribuer une valeur) pour la nouvelle colonne.

    • Column Name et Type définissent la colonne ajoutée à la table de destination.

    • Assign Value est une expression qui fait référence aux colonnes de la table source ou aux variables intégrées. Cliquez sur l'icône ... pour ouvrir l'éditeur d'expressions. Pour plus de détails sur la syntaxe, consultez la section Référence des expressions.

  9. Cliquez sur OK.

  10. Suivez les instructions pour terminer le reste de la configuration de la tâche.

Référence des expressions

La valeur d'une colonne supplémentaire est construite à partir de constantes, de variables, d'opérateurs et de fonctions d'expression. La syntaxe est compatible avec le DSL (Domain-Specific Language) de traitement des données utilisé pour l'ETL.

Dans les expressions, entourez les noms de colonnes avec des accents graves ( col ), et non avec des guillemets simples ( 'col' ).

Cas d'utilisation courants

Avant d'aborder la référence complète, voici les modèles les plus fréquents :

Objectif

Modèle d'expression

Taguer chaque ligne avec le nom de sa table source

__TB__

Taguer chaque ligne avec le nom de sa base de données source

__DB__

Enregistrer le type d'opération (insertion/mise à jour/suppression)

__OPERATION__

Enregistrer l'heure de validation de la transaction

__COMMIT_TIMESTAMP__

Construire une clé composite à partir des colonnes source

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

Distinguer les insertions des autres opérations

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

Masquer les données sensibles dans une colonne

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

Constantes

Type

Exemple

int

123

float

123.4

string

"hello1_world"

boolean

true ou false

datetime

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

Variables

Utilisez ces variables intégrées pour capturer les métadonnées de chaque ligne répliquée.

Variable

Description

Type de données

Valeur d'exemple

__TB__

Nom de la table source

string

table

__DB__

Nom de la base de données source

string

mydb

__OPERATION__

Type d'opération DML

string

__OP_INSERT__, __OP_UPDATE__, __OP_DELETE__

__COMMIT_TIMESTAMP__

Heure de validation de la transaction

datetime

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

column

Valeur d'une colonne source pour la ligne actuelle

string

id , name

__SCN__

System Change Number (SCN) — identifie de manière unique la version et l'heure de validation d'une transaction

string

22509****

__ROW_ID__

ID d'adresse d'un enregistrement de données — localise la ligne de manière unique. Non pris en charge pour les sources MySQL.

string

AAAgWHAAKAAJgX****

Fonctions d'expression

Opérations numériques

Fonction

Syntaxe

Paramètres

Valeur de retour

Exemple

Addition

op_sum(value1, value2) ou value1+value2

value1, value2 : entier ou nombre à virgule flottante

Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire

op_sum( col1 , 1.0)

Soustraction

op_sub(value1, value2) ou value1-value2

value1, value2 : entier ou nombre à virgule flottante

Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire

op_sub( col1 , 1.0)

Multiplication

op_mul(value1, value2) ou value1*value2

value1, value2 : entier ou nombre à virgule flottante

Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire

op_mul( col1 , 1.0)

Division

op_div_true(value1, value2) ou value1/value2

value1, value2 : entier ou nombre à virgule flottante

Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire

op_div_true( col1 , 2.0) — si col1=15, renvoie 7.5

Modulo

op_mod(value1, value2)

value1, value2 : entier ou nombre à virgule flottante

Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire

op_mod( col1 , 10) — si col1=23, renvoie 3

Opérations logiques

Fonction

Syntaxe

Paramètres

Valeur de retour

Exemple

Égal à

op_eq(value1, value2)

entier, nombre à virgule flottante ou chaîne de caractères

booléen

op_eq( col1 , 23)

Supérieur à

op_gt(value1, value2)

entier, nombre à virgule flottante ou chaîne de caractères

booléen

op_gt( col1 , 1.0)

Inférieur à

op_lt(value1, value2)

entier, nombre à virgule flottante ou chaîne de caractères

booléen

op_lt( col1 , 1.0)

Supérieur ou égal à

op_ge(value1, value2)

entier, nombre à virgule flottante ou chaîne de caractères

booléen

op_ge( col1 , 1.0)

Inférieur ou égal à

op_le(value1, value2)

entier, nombre à virgule flottante ou chaîne de caractères

booléen

op_le( col1 , 1.0)

ET (AND)

op_and(value1, value2)

booléen

booléen

op_and( is_male , is_student )

OU (OR)

op_or(value1, value2)

booléen

booléen

op_or( is_male , is_student )

Dans (IN)

op_in(value, json_array)

value : tout type ; json_array : chaîne au format JSON

booléen

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

Est nul

op_is_null(value)

tout type

booléen

op_is_null( name )

N'est pas nul

op_is_not_null(value)

tout type

booléen

op_is_not_null( name )

Fonctions de chaîne

Fonction

Syntaxe

Paramètres

Valeur de retour

Exemple

Concaténer des chaînes

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

chaînes

Chaîne concaténée

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

Formater et concaténer

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

format : chaîne contenant des espaces réservés {}

Chaîne formatée

str_format("part1: {}, part2: {}", col1 , col2 ) — si col1="ab" et col2="12", renvoie "part1: ab, part2: 12"

Remplacer une sous-chaîne

str_replace(original, oldStr, newStr, count)

count : nombre maximal de remplacements ; -1 remplace toutes les occurrences

Chaîne après remplacement

str_replace( name , "a", 'b', -1) — si name="aba", renvoie "bbb"

Remplacer dans tous les champs de type chaîne

tail_replace_string_field(search, replace, all)

all : seule la valeur true est prise en charge

Chaîne après remplacement

tail_replace_string_field('\u000f','',true) — remplace \u000f par une chaîne vide dans tous les champs varchar, text et char

Supprimer des caractères

str_strip(string_val, charSet)

charSet : caractères à supprimer

Chaîne dont les caractères de début et de fin ont été supprimés

str_strip( name , 'ab') — si name="axbzb", renvoie "xbz"

Convertir en minuscules

str_lower(value)

colonne de type chaîne ou constante

Chaîne en minuscules

str_lower( str_col )

Convertir en majuscules

str_upper(value)

colonne de type chaîne ou constante

Chaîne en majuscules

str_upper( str_col )

Convertir une chaîne en entier

cast_string_to_long(value)

chaîne

Entier

cast_string_to_long( col )

Convertir un entier en chaîne

cast_long_to_string(value)

entier

Chaîne

cast_long_to_string( col )

Compter les occurrences

str_count(str, pattern)

str : chaîne ; pattern : sous-chaîne à rechercher

Nombre d'occurrences

str_count( str_col , 'abc') — si str_col="zabcyabcz", renvoie 2

Rechercher une sous-chaîne

str_find(str, pattern)

str : chaîne ; pattern : sous-chaîne à rechercher

Position de la première correspondance ; -1 si aucune correspondance n'est trouvée

str_find( str_col , 'abc') — si str_col="xabcy", renvoie 1

Vérifier si la chaîne ne contient que des lettres

str_isalpha(str)

colonne de type chaîne ou constante

booléen

str_isalpha( str_col )

Vérifier si la chaîne ne contient que des chiffres

str_isdigit(str)

colonne de type chaîne ou constante

booléen

str_isdigit( str_col )

Correspondance avec une expression régulière

regex_match(str, regex)

str : chaîne ; regex : motif d'expression régulière

booléen

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

Masquer une partie d'une chaîne

str_mask(str, start, end, maskStr)

start : position de départ (min. : 0) ; end : position de fin (max. : longueur−1) ; maskStr : caractère unique

Chaîne masquée

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

Obtenir la sous-chaîne située après une chaîne donnée

substring_after(str, cond)

str : chaîne d'origine ; cond : délimiteur

Sous-chaîne située après cond (le délimiteur n'est pas inclus)

substring_after( col , 'abc')

Obtenir la sous-chaîne située avant une chaîne donnée

substring_before(str, cond)

str : chaîne d'origine ; cond : délimiteur

Sous-chaîne située avant cond (le délimiteur n'est pas inclus)

substring_before( col , 'efg')

Obtenir la sous-chaîne située entre deux chaînes

substring_between(str, cond1, cond2)

str : chaîne d'origine ; cond1, cond2 : délimiteurs

Sous-chaîne située entre cond1 et cond2 (les délimiteurs ne sont pas inclus)

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

Vérifier si la valeur est une chaîne

is_string_value(value)

chaîne ou nom de colonne

booléen

is_string_value( col1 )

Obtenir un champ d'un document MongoDB

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

Chemin du champ imbriqué

Valeur du champ

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

Expressions conditionnelles

Syntaxe

Paramètres

Valeur de retour

Exemple

(cond ? val_1 : val_2)

cond : booléen ; val_1 et val_2 : même type

val_1 si cond est vrai ; val_2 sinon

(id>1000? 1 : 0)

Fonctions temporelles

Fonction

Syntaxe

Paramètres

Valeur de retour

Exemple

Heure actuelle (précision à la seconde)

dt_now()

Aucun

DATETIME, précise à la seconde près

dt_now()

Heure actuelle (précision à la milliseconde)

dt_now_millis()

Aucun

DATETIME, précise à la milliseconde près

dt_now_millis()

Horodatage UTC (secondes) vers DATETIME

dt_fromtimestamp(value, [timezone])

value : entier ; timezone : facultatif

DATETIME, précise à la seconde près

dt_fromtimestamp(1626837629,'GMT+08')

Horodatage UTC (millisecondes) vers DATETIME

dt_fromtimestamp_millis(value, [timezone])

value : entier ; timezone : facultatif

DATETIME, précise à la milliseconde près

dt_fromtimestamp_millis(1626837629123,'GMT+08')

DATETIME vers horodatage UTC (secondes)

dt_parsetimestamp(value, [timezone])

value : DATETIME ; timezone : facultatif

Entier

dt_parsetimestamp( datetime_col ,'GMT+08')

DATETIME vers horodatage UTC (millisecondes)

dt_parsetimestamp_millis(value, [timezone])

value : DATETIME ; timezone : facultatif

Entier

dt_parsetimestamp_millis( datetime_col ,'GMT+08')

DATETIME vers chaîne

dt_str(value, format)

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

Chaîne

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

Chaîne vers DATETIME

dt_strptime(value, format)

value : chaîne ; format : yyyy-MM-dd HH:mm:ss

DATETIME

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

Ajuster DATETIME

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

value : DATETIME ; intVal : entier (une valeur négative soustrait)

DATETIME

dt_add(datetime_col,years=-1)

Fonctions globales

  • Fonctions de contrôle de flux

    Fonction

    Syntaxe

    Paramètres

    Exemple

    Instruction if

    e_if(bool_expr, func_invoke)

    • bool_expr : constante booléenne ou appel de fonction. Constantes : true ou false. Exemple d'appel de fonction : op_gt(id, 10).

    • func_invoke : appel de fonction. Pris en charge : e_drop, e_keep, e_set, e_if, e_compose

    e_if(op_gt(id, 10), e_drop()); supprime l'enregistrement si ID > 10.

    Instruction if-else

    e_if_else(bool_expr, func_invoke1, func_invoke2)

    • bool_expr : constante booléenne ou appel de fonction. Constantes : true ou false. Exemple d'appel de fonction : op_gt(id, 10).

    • func_invoke1 : appel de fonction exécuté si la condition est vraie.

    • func_invoke2 : appel de fonction exécuté si la condition est fausse.

    e_if_else(op_gt(id, 10), e_set(tag, 'large'), e_set(tag, 'small')); définit le tag sur « large » si ID > 10, sinon sur « small ».

    Instruction de type switch qui évalue plusieurs conditions et exécute la première opération correspondante. Exécute une opération par défaut si aucune condition ne correspond.

    s_switch(condition1, func1, condition2, func2, ..., default=default_func)

    • condition1 : constante booléenne ou appel de fonction. Constantes : true ou false. Exemple d'appel de fonction : op_gt(id, 10).

    • func_invoke : appel de fonction. Vérifie condition1 ; si elle est vraie, exécute cette fonction et quitte le switch. Si elle est fausse, vérifie la condition suivante.

    • default_func : appel de fonction exécuté si toutes les conditions sont fausses.

    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')).

    Combiner plusieurs opérations

    e_compose(func1, func2, func3, ...)

    • func1 : appel de fonction. Peut être e_set, e_drop, e_if.

    • func2 : appel de fonction. Peut être e_set, e_drop, e_if.

    e_compose(e_set(str_col, 'test'), e_set(dt_col, dt_now())); définit str_col sur « test » et dt_col sur l'heure actuelle.

  • Fonctions de manipulation des données

    Fonction

    Syntaxe

    Paramètres

    Exemple

    Supprimer cet enregistrement (ne pas synchroniser)

    e_drop()

    Aucun

    e_if(op_gt(id, 10), e_drop()); supprime les enregistrements dont l'ID est supérieur à 10.

    Conserver cet enregistrement (synchroniser vers la destination)

    e_keep(condition)

    condition : expression booléenne

    e_keep(op_gt(id, 1)); synchronise uniquement les enregistrements dont l'ID est supérieur à 1.

    Définir la valeur d'une colonne

    e_set(col, val, NEW)

    • col : nom de la colonne

    • val : constante ou appel de fonction. Doit correspondre au type de données de col.

    • NEW : convertit col vers le type de données de val (facultatif)

      Important

      Si vous omettez NEW, n'incluez pas la virgule précédente. Assurez-vous de la compatibilité des types de données pour éviter les erreurs de tâche.

    • e_set(dt_col, dt_now()); définit dt_col sur l'heure actuelle.

    • e_set(col1, col2 + 1); définit col1 sur col2 + 1.

    • e_set(col1, 1, NEW); convertit col1 en type numérique et le définit sur 1.

    Conservation des champs MongoDB, suppression des champs et mappage des noms de champs

    e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})

    • : noms de champs à conserver ; signifie tous les champs.

    • fieldA : noms de champs à supprimer.

    • {"fieldB":"fieldC"} : mappage des noms de champs ; fieldB est le nom du champ source, fieldC est le nom du champ de destination.

      Remarque

      Le mappage des noms de champs est facultatif.

    e_expand_bson_value("*", "_id,name"); écrit tous les champs sauf _id et name dans la destination.

  • FAQ

    Comment configurer des clés et des valeurs personnalisées pour une tâche DTS de MySQL vers Redis ?

    Par défaut, DTS mappe la ligne source entière en utilisant l'une des trois options de Cache Mapping Mode. Pour extraire des colonnes spécifiques et construire des paires clé-valeur personnalisées à la place, ajoutez deux colonnes supplémentaires spéciales : __DTS_TP_TO_REDIS_KEY__ et __DTS_TP_TO_REDIS_VALUE__.

    Les trois modes de mappage des données de cache sont les suivants :

    • Modèle KV (Base de données-Table-Clé primaire)

    • Modèle HASH (Base de données-Table-Clé primaire)

    • Modèle HASH (Base de données-Table)

    Vous devez également configurer la méthode Value Data Splitting Method (options : JSON format, Key-Value comma-separated ou Value comma-separated), et sélectionner les types d'opérations DML à synchroniser (INSERT, UPDATE, DELETE).

    Étapes de configuration :

    1. Lors de la configuration des objets, déplacez les bases de données et les tables vers le volet de droite, puis cliquez sur le bouton de modification pour la base de données Redis de destination.

    2. Ajoutez les colonnes __DTS_TP_TO_REDIS_KEY__ et __DTS_TP_TO_REDIS_VALUE__.

    3. Définissez les expressions Assign Value à l'aide de la syntaxe DSL. Par exemple, considérons la table MySQL aes suivante :

      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';

      Exigences métier :

      • Clé : stat_create_day:{gcp_code}:{uname} — construite à partir de deux colonnes source

      • Valeur : {login_time} — un horodatage Unix converti au format datetime

      Expressions 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. Une fois la synchronisation ou la migration terminée, la paire clé-valeur dans Redis se présente comme suit :

      Une fois la synchronisation des données terminée, connectez-vous à l'instance Redis cible via DMS. Dans DB0, exécutez la commande get sur les clés de type stat_create_day:{gcp_code}:{uname}. La valeur renvoyée est au format datetime (par exemple, 2025-11-18 23:49:29), ce qui confirme que la fonction dt_fromtimestamp a correctement converti l'horodatage Unix en valeur datetime.