Spécifiez une condition SQL lors de la configuration des objets d'une tâche pour synchroniser ou migrer uniquement les données qui satisfont cette condition. Cette fonctionnalité s'applique aux scénarios de synchronisation périodique des données, de migration et de partitionnement de tables.
Prérequis
Vous avez lancé la configuration d'une tâche et atteint l'étape Configure Objects and Advanced Settings. Pour lancer la configuration d'une tâche, suivez la procédure décrite dans la rubrique Configurer une tâche de synchronisation des données (nouvelle console).
Limites
-
Les instructions de filtrage complexes ne sont pas prises en charge. Par exemple :
COLUMN1 IN (SELECT id FROM table1).OLUMN1 IN (SELECT id FROM table1).
-
Si la table ou la collection source contient deux colonnes dont les noms ne diffèrent que par la casse, la tâche de filtrage risque de ne pas produire le résultat attendu.
o columns whose names differ only in case, the filter task may fail to achieve the expected result.
-
Lorsque le type de base de données source est Tair/Redis, seul le filtrage des clés basé sur un préfixe est pris en charge.
, only prefix-based key filtering is supported.
-
Lorsque le type de base de données source est MongoDB, seules les tâches de synchronisation ou de migration complètes prennent en charge le filtrage conditionnel. La synchronisation ou la migration incrémentielle n'est pas prise en charge.
synchronization or migration tasks support conditional filtering. Incremental synchronization or migration is not supported.
-
Lorsque le type de base de données source est différent de Tair/Redis et de MongoDB, si la condition de filtrage nécessite des guillemets, utilisez des guillemets simples (').
833fe828ef">, if the filter condition requires quotation marks, use single quotation marks (').
-
N'ajoutez pas de point-virgule (;) à la fin d'une condition de filtrage. Dans le cas contraire, la tâche pourrait échouer.
end of a filter condition. Otherwise, the task may fail.
-
Si une opération UPDATE est effectuée sur la base de données source et satisfait certaines conditions (la valeur de l'image avant modification satisfait la condition de filtrage, mais pas celle de l'image après modification), DTS convertit par défaut l'instruction UPDATE en instruction DELETE et l'exécute dans la base de données de destination.
ImportantDans une instance DTS dont la base de données source est SQL Server, si le champ de filtrage n'est pas une colonne d'index cluster, la logique de filtrage ne s'applique pas.
-
Le mécanisme de filtrage de DTS est un pré-filtrage. Si la valeur du champ de filtrage configuré change, le filtrage est effectué sur la valeur antérieure au changement.
Exemple : supposons que vous ayez configuré la condition de filtrage
enabled = 1. DTS synchronisera uniquement les données satisfaisant cette condition. Si le champ de donnéesenabled = 1est modifié enenabled = 0, le système considère qu'il faut d'abord supprimer les donnéesenabled = 1puis écrire les donnéesenabled = 0. Étant donné que l'opération précédente satisfait la condition de filtrage, les données seront supprimées ; toutefois, les données suivantes ne seront pas synchronisées car elles ne satisfont pas la condition de filtrage. Si vous devez synchroniser à la fois les donnéesenabled = 0etenabled = 1, supprimez la condition de filtrage et relancez la synchronisation.
Procédure
La méthode de configuration des conditions de filtrage dépend du type de base de données source. Elle se divise en trois catégories : Tair/Redis, MongoDB et les autres types de bases de données.
Configurer les conditions de filtrage pour des objets individuels
-
À l'étape Configure Objects, déplacez les objets de la tâche vers la zone Selected Objects.
RemarqueLorsque le type de base de données source est MongoDB, la granularité des objets de la tâche doit être au niveau de la collection. Lorsque le type de base de données source est Tair/Redis, la granularité doit être au niveau de la base de données Redis. Pour les autres types de bases de données source, la granularité doit être au niveau de la table.
Cliquez avec le bouton droit sur l'objet cible.
-
Dans la boîte de dialogue qui s'affiche, saisissez la condition de filtrage.
Lorsque le type de base de données source est Tair/Redis : dans la boîte de dialogue Edit Schema qui s'affiche, saisissez les Prefixes of Keys to Be Synchronized (liste d'autorisation) ou les Prefixes of Keys to Be Filtered Out (liste de blocage).
Lorsque le type de base de données source est MongoDB : dans la boîte de dialogue Edit Table qui s'affiche, saisissez les Filter Conditions.
Pour les autres types de bases de données source : dans la boîte de dialogue Edit Table qui s'affiche, saisissez les Filter Conditions.
RemarquePour plus d'informations sur la syntaxe des conditions de filtrage, consultez la section Exemples d'instructions.
Une fois les paramètres configurés, cliquez sur OK.
Suivez les instructions pour terminer la configuration ultérieure de la tâche.
Configurer les conditions de filtrage par lot
À l'étape Configure Objects, déplacez les objets de la tâche vers la zone Selected Objects.
Dans le coin supérieur droit de la zone Selected Objects, cliquez sur Batch Edit.
-
Dans la zone Select Objects, sélectionnez les objets à modifier (pour définir les conditions de filtrage par préfixe).
RemarqueConservez la valeur par défaut pour Select Type.
-
Dans la zone Select Editing Type, cliquez sur l'onglet Filter Conditions.
RemarqueSi le type de base de données source est Tair/Redis, cliquez sur l'onglet Prefixes of Keys to Be Synchronized/Filtered Out.
-
Sélectionnez le Select Edit Mode.
Add : conserve les conditions de filtrage existantes de la tâche actuelle et ajoute de nouvelles conditions de filtrage.
Overwrite : efface les conditions de filtrage existantes de la tâche actuelle et utilise les nouvelles conditions de filtrage.
-
Configurez les conditions de filtrage.
Lorsque le type de base de données source est Tair/Redis : selon le scénario, sélectionnez Prefixes of Keys to Be Synchronized ou Prefixes of Keys to Be Filtered Out, puis saisissez le préfixe correspondant.
Lorsque le type de base de données source est MongoDB : saisissez la condition de filtrage dans la zone de texte.
Pour les autres types de bases de données source : saisissez la condition de filtrage dans la zone de texte.
RemarquePour plus d'informations sur la syntaxe des conditions de filtrage, consultez la section Exemples d'instructions.
Une fois les paramètres configurés, cliquez sur OK.
Suivez les instructions pour terminer la configuration ultérieure de la tâche.
Exemples d'instructions
Le type de base de données source est Tair/Redis
|
Type de filtre |
Exemple d'instruction |
Description |
|
Synchroniser un seul préfixe |
Saisissez les Prefixes of Keys to Be Synchronized : |
Synchronisez uniquement les données dont les clés commencent par |
|
Exclure un seul préfixe |
Saisissez les Prefixes of Keys to Be Filtered Out : |
Excluez les données dont les clés commencent par |
|
Synchroniser plusieurs préfixes |
Saisissez les Prefixes of Keys to Be Synchronized : |
Synchronisez uniquement les données dont les clés commencent par |
|
Combiner synchronisation et filtrage |
Saisissez les Prefixes of Keys to Be Synchronized : Saisissez les Prefixes of Keys to Be Filtered Out : |
Synchronisez uniquement les données dont les clés commencent par |
Le type de base de données source est MongoDB
|
Type de filtre |
Exemple d'instruction |
Description |
|
Autre |
|
Filtrage par ID utilisateur, où |
La base de données source est d'un autre type
Les Filter Conditions prennent en charge les opérateurs suivants :
=,!=,<,>etin.Si vous avez des questions lors de la saisie des conditions de filtrage, consultez d'abord la section FAQ.
Exemples d'instructions
Type de filtre | Exemple d'instruction | Description |
Numérique |
| Synchronisez ou migrez uniquement les données dont le champ |
Chaîne |
| Synchronisez ou migrez uniquement les données dont le champ |
Heure |
| Synchronisez ou migrez uniquement les données créées après 2020. Important
|
Types pris en charge
|
Base de données |
Types de données pris en charge |
|
PostgreSQL |
CHAR,BIGINT,SMALLINT,INTEGER,FLOAT4,FLOAT8,VARCHAR,DATE,TIMESTAMP,NUMERIC |
|
Oracle |
VARCHAR2,NVARCHAR2,NUMBER,DATE,ROWID,CHAR,BINARY_FLOAT,BINARY_DOUBLE,CLOB,NCLOB,TIMESTAMP,TIMESTAMP WITH TIME ZONE,UROWID |
|
MySQL |
DECIMAL,INTEGER,BIGINT,FLOAT4,DOUBLE,DATE,TIME,DATETIME,YEAR,VARCHAR |
|
SQL Server |
NCHAR,DATE,TIME,DATETIME2,TINYINT,SMALLINT,INT,SMALLDATETIME,REAL,DECIMAL,DATETIME,FLOAT,BIT,NUMERIC,BIGINT,VARCHAR,CHAR,TIMESTAMP,NVARCHAR,MONEY,SMALLMONEY,UNIQUEIDENTIFIER |
|
DB2 LUW |
SMALLINT,INTEGER,BIGINT,DECIMAL,NUMERIC,REAL,FLOAT,DOUBLE,DECFLOAT,CHAR,CHARACTER,VARCHAR,GRAPHIC,NCHAR,VARGRAPHIC,NVARCHAR,DATE,TIME,TIMESTAMP,BLOB,CLOB,DBCLOB,LONG VARG,LONG VARCHAR,LONG VARGRAPHIC,BINARY,VARBINARY,XML |
|
DB2 AS400 |
BIGINT,INTEGER,SMALLINT,DECIMAL,NUMERIC,FLOAT,DECFLOAT,CHAR,VARCHAR,NCHAR,BINARY,DATE,TIME,TIMESTAMP,XML |
Étapes suivantes
-
Afficher les instructions de filtrage
La tâche actuelle n'est pas configurée : revenez à l'étape Configure Objects and Advanced Settings. Dans la zone Selected Objects, développez les objets à synchroniser ou à migrer, puis cliquez avec le bouton droit sur l'objet cible pour afficher les Filter Conditions.
La tâche actuelle est configurée et en cours d'exécution : vous pouvez utiliser la fonctionnalité Créer une tâche similaire ou Modifier les objets de synchronisation pour accéder à l'étape Configure Objects and Advanced Settings. Dans la zone Selected Objects, développez les objets à synchroniser ou à migrer, puis cliquez avec le bouton droit sur l'objet cible pour afficher les Filter Conditions (après consultation, annulez la tâche ; inutile de poursuivre). Pour plus d'informations, consultez les rubriques Créer une tâche similaire et Modifier les objets de synchronisation.
-
Modifier les instructions de filtrage
La tâche actuelle n'est pas configurée : revenez à l'étape Configure Objects and Advanced Settings. Dans la zone Selected Objects, développez les objets à synchroniser ou à migrer, puis cliquez avec le bouton droit sur l'objet cible pour modifier les Filter Conditions.
-
La tâche actuelle est configurée et en cours d'exécution :
Tâche de migration : les tâches de migration ne permettent pas de modifier les conditions de filtrage. Vous devez reconfigurer la tâche.
Tâche de synchronisation : utilisez la fonctionnalité Modifier les objets de synchronisation pour accéder à l'étape Configure Objects and Advanced Settings. Dans la zone Selected Objects, développez les objets à synchroniser, puis cliquez avec le bouton droit sur l'objet cible pour modifier les Filter Conditions, et suivez les instructions pour terminer la configuration ultérieure de la tâche. Pour plus d'informations, consultez la rubrique Modifier les objets de synchronisation.
Erreurs courantes
Si la condition de filtrage que vous avez saisie est incorrecte, la tâche peut renvoyer les erreurs suivantes. Corrigez les erreurs en fonction du message d'erreur spécifique et des Étapes suivantes.
L'expression régulière ((.*)?) dans le message d'erreur représente une variable.
|
Code d'erreur |
Message d'erreur |
Description |
|
DTS-RETRY-ERR-0070 |
In process of processing data (.)? failed (.)? Syntax error in SQL statement |
Le format du champ de filtrage configuré pour l'objet de synchronisation est incorrect. |
|
DTS-RETRY-ERR-0145 |
Unknown column (.*)? in |
Le champ configuré dans la condition de filtrage de la tâche actuelle n'existe pas dans la base de données source. |
|
DTS-RETRY-ERR-0147 |
You have an error in your SQL syntax |
Le champ configuré dans la condition de filtrage de la tâche actuelle n'existe pas dans la base de données source. |
|
DTS-RETRY-ERR-0188 |
null value in column (.*)? violates not-null constraint |
Une colonne avec une contrainte NOT NULL sur la destination est filtrée, ou la source ne possède pas de valeur de colonne correspondante. |
|
DTS-RETRY-ERR-0276 |
if (.*)? is specified it must not be empty |
La valeur mappée à la colonne |
FAQ
-
Pourquoi la condition de filtrage que j'ai saisie ne prend-elle pas effet ?
L'instruction de condition de filtrage est incorrecte, ou la tâche actuelle est une tâche incrémentielle avec une base de données source MongoDB (qui ne prend pas en charge les conditions de filtrage).
-
Quelle est la portée effective après modification d'une condition de filtrage ?
La tâche actuelle n'est pas configurée : lorsque la base de données source est MongoDB, les conditions de filtrage ne prennent effet que pendant la phase de tâche complète. Lorsque la base de données source est d'un autre type, les conditions de filtrage prennent effet dans les phases de tâche complète et incrémentielle.
La tâche actuelle est configurée et en cours d'exécution : lorsque la base de données source est MongoDB, les conditions de filtrage ne prennent pas effet (non prises en charge). Lorsque la base de données source est d'un autre type, les conditions de filtrage ne prennent effet que pour les données incrémentielles.
-
DTS prend-il en charge le filtrage des données satisfaisant certaines conditions et la synchronisation ou la migration des données restantes vers la destination ?
Lorsque le type de base de données source est Tair/Redis : oui. Vous pouvez saisir les Prefixes of Keys to Be Filtered Out pour exclure les clés satisfaisant les conditions.
Lorsque la base de données source est d'un autre type : non. Vous pouvez définir la condition de filtrage opposée pour répondre à vos besoins. Par exemple, si vous devez exclure les données dont le champ
ageest 25, vous pouvez saisirage > 25 or age < 25dans les Filter Conditions.
-
Comment saisir une condition de filtrage s'il y a plusieurs clés à filtrer ?
Utilisez des virgules (,) comme séparateurs.
-
Puis-je saisir à la fois les Prefixes of Keys to Be Synchronized et les Prefixes of Keys to Be Filtered Out ?
Oui. Les règles de synchronisation et de filtrage des clés s'appliquent toutes les deux.
-
Les conditions de filtrage prennent-elles en charge les appels API ?
Non.
API associées
|
API |
Description |
|
Configurez une tâche de migration ou de synchronisation DTS et définissez le paramètre |