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 :
Une instance de synchronisation ou de migration DTS dans un scénario pris en charge
Un accès à la console Data Management (DMS) ou à la console DTS
Configurer les colonnes supplémentaires
-
Accédez à la page Data Synchronization Tasks.Page Data Synchronization Tasks de la nouvelle console DTS
Connectez-vous à la console Data Management (DMS).
Dans la barre de navigation supérieure, cliquez sur Data + AI.
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 .
-
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 .
Suivez les instructions jusqu'à l'étape Configure Objects.
Définissez Synchronization Types sur Schema Synchronization.
Dans Source Objects, sélectionnez les bases de données ou les tables à synchroniser, puis cliquez sur
pour les déplacer vers Selected Objects.Dans Selected Objects, faites un clic droit sur la base de données ou la table.
Dans la boîte de dialogue, accédez à la section Additional Columns et cliquez sur Add Column.
-
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.
Cliquez sur OK.
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 |
|
|
Taguer chaque ligne avec le nom de sa base de données source |
|
|
Enregistrer le type d'opération (insertion/mise à jour/suppression) |
|
|
Enregistrer l'heure de validation de la transaction |
|
|
Construire une clé composite à partir des colonnes source |
|
|
Distinguer les insertions des autres opérations |
|
|
Masquer les données sensibles dans une colonne |
|
Constantes
|
Type |
Exemple |
|
int |
|
|
float |
|
|
string |
|
|
boolean |
|
|
datetime |
|
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 |
|
|
Nom de la table source |
string |
|
|
|
Nom de la base de données source |
string |
|
|
|
Type d'opération DML |
string |
|
|
|
Heure de validation de la transaction |
datetime |
|
|
|
Valeur d'une colonne source pour la ligne actuelle |
string |
|
|
|
System Change Number (SCN) — identifie de manière unique la version et l'heure de validation d'une transaction |
string |
|
|
|
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 |
|
Fonctions d'expression
Opérations numériques
|
Fonction |
Syntaxe |
Paramètres |
Valeur de retour |
Exemple |
|
Addition |
|
|
Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire |
|
|
Soustraction |
|
|
Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire |
|
|
Multiplication |
|
|
Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire |
|
|
Division |
|
|
Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire |
|
|
Modulo |
|
|
Entier si les deux entrées sont des entiers ; nombre à virgule flottante dans le cas contraire |
|
Opérations logiques
|
Fonction |
Syntaxe |
Paramètres |
Valeur de retour |
Exemple |
|
Égal à |
|
entier, nombre à virgule flottante ou chaîne de caractères |
booléen |
|
|
Supérieur à |
|
entier, nombre à virgule flottante ou chaîne de caractères |
booléen |
|
|
Inférieur à |
|
entier, nombre à virgule flottante ou chaîne de caractères |
booléen |
|
|
Supérieur ou égal à |
|
entier, nombre à virgule flottante ou chaîne de caractères |
booléen |
|
|
Inférieur ou égal à |
|
entier, nombre à virgule flottante ou chaîne de caractères |
booléen |
|
|
ET (AND) |
|
booléen |
booléen |
|
|
OU (OR) |
|
booléen |
booléen |
|
|
Dans (IN) |
|
|
booléen |
|
|
Est nul |
|
tout type |
booléen |
|
|
N'est pas nul |
|
tout type |
booléen |
|
Fonctions de chaîne
|
Fonction |
Syntaxe |
Paramètres |
Valeur de retour |
Exemple |
|
Concaténer des chaînes |
|
chaînes |
Chaîne concaténée |
|
|
Formater et concaténer |
|
|
Chaîne formatée |
|
|
Remplacer une sous-chaîne |
|
|
Chaîne après remplacement |
|
|
Remplacer dans tous les champs de type chaîne |
|
|
Chaîne après remplacement |
|
|
Supprimer des caractères |
|
|
Chaîne dont les caractères de début et de fin ont été supprimés |
|
|
Convertir en minuscules |
|
colonne de type chaîne ou constante |
Chaîne en minuscules |
|
|
Convertir en majuscules |
|
colonne de type chaîne ou constante |
Chaîne en majuscules |
|
|
Convertir une chaîne en entier |
|
chaîne |
Entier |
|
|
Convertir un entier en chaîne |
|
entier |
Chaîne |
|
|
Compter les occurrences |
|
|
Nombre d'occurrences |
|
|
Rechercher une sous-chaîne |
|
|
Position de la première correspondance ; |
|
|
Vérifier si la chaîne ne contient que des lettres |
|
colonne de type chaîne ou constante |
booléen |
|
|
Vérifier si la chaîne ne contient que des chiffres |
|
colonne de type chaîne ou constante |
booléen |
|
|
Correspondance avec une expression régulière |
|
|
booléen |
|
|
Masquer une partie d'une chaîne |
|
|
Chaîne masquée |
|
|
Obtenir la sous-chaîne située après une chaîne donnée |
|
|
Sous-chaîne située après |
|
|
Obtenir la sous-chaîne située avant une chaîne donnée |
|
|
Sous-chaîne située avant |
|
|
Obtenir la sous-chaîne située entre deux chaînes |
|
|
Sous-chaîne située entre |
|
|
Vérifier si la valeur est une chaîne |
|
chaîne ou nom de colonne |
booléen |
|
|
Obtenir un champ d'un document MongoDB |
|
Chemin du champ imbriqué |
Valeur du champ |
|
Expressions conditionnelles
|
Syntaxe |
Paramètres |
Valeur de retour |
Exemple |
|
|
|
|
|
Fonctions temporelles
|
Fonction |
Syntaxe |
Paramètres |
Valeur de retour |
Exemple |
|
Heure actuelle (précision à la seconde) |
|
Aucun |
DATETIME, précise à la seconde près |
|
|
Heure actuelle (précision à la milliseconde) |
|
Aucun |
DATETIME, précise à la milliseconde près |
|
|
Horodatage UTC (secondes) vers DATETIME |
|
|
DATETIME, précise à la seconde près |
|
|
Horodatage UTC (millisecondes) vers DATETIME |
|
|
DATETIME, précise à la milliseconde près |
|
|
DATETIME vers horodatage UTC (secondes) |
|
|
Entier |
|
|
DATETIME vers horodatage UTC (millisecondes) |
|
|
Entier |
|
|
DATETIME vers chaîne |
|
|
Chaîne |
|
|
Chaîne vers DATETIME |
|
|
DATETIME |
|
|
Ajuster DATETIME |
|
|
DATETIME |
|
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)
ImportantSi 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.
RemarqueLe mappage des noms de champs est facultatif.
e_expand_bson_value("*", "_id,name"); écrit tous les champs sauf _id et name dans la destination.
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)
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.
Ajoutez les colonnes
__DTS_TP_TO_REDIS_KEY__et__DTS_TP_TO_REDIS_VALUE__.-
Définissez les expressions Assign Value à l'aide de la syntaxe DSL. Par exemple, considérons la table MySQL
aessuivante :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 sourceValeur :
{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))
-
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
getsur les clés de typestat_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 fonctiondt_fromtimestampa correctement converti l'horodatage Unix en valeur datetime.
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 :
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 :