Utilisation de filtres de source - AWS Service de Migration de Base de Données

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de filtres de source

Vous pouvez utiliser des filtres de source pour limiter le nombre et le type d'enregistrements transférés de votre source vers votre cible. Par exemple, vous pouvez spécifier que seuls les employés avec un emplacement de siège sont déplacés vers la base de données cible. Les filtres font partie d'une règle de sélection. Vous appliquez des filtres sur une colonne de données.

Les filtres de source doivent respecter les contraintes suivantes :

  • Une règle de sélection peut avoir aucun filtre ou un ou plusieurs filtres.

  • Chaque filtre peut avoir une ou plusieurs conditions de filtre.

  • Si plusieurs filtres sont utilisés, la liste des filtres est combinée comme si elle utilisait l'opérateur AND entre les filtres.

  • Si plusieurs conditions de filtre sont utilisées au sein d'un seul filtre, la liste des conditions de filtre est combinée comme si elle utilisait un opérateur OR entre les conditions de filtre.

  • Les filtres sont appliqués uniquement quand rule-action = 'include'.

  • Filtres nécessitent un nom de colonne et une liste de conditions de filtre. Les conditions de filtre doivent comporter un opérateur de filtre associé à une valeur, deux valeurs ou aucune valeur, selon l’opérateur.

  • Les noms de colonnes, de tables, de vues et de schémas sont sensibles à la casse. Oracle et Db2 doivent toujours utiliser des MAJUSCULES.

  • Les filtres ne prennent en charge que les tables portant des noms exacts. Les filtres ne prennent pas en charge les caractères génériques.

Les limitations suivantes s'appliquent à l'utilisation des filtres de source :

  • Les filtres ne calculent pas les colonnes de right-to-left langues.

  • N'appliquez pas de filtre aux colonnes LOB.

  • Appliquez des filtres uniquement aux colonnes immuables qui ne sont pas mises à jour après leur création. Si des filtres de source sont appliqués à des colonnes mutables qui peuvent être mises à jour après leur création, un comportement négatif peut en résulter.

    Par exemple, un filtre permettant d'exclure ou d'inclure des lignes spécifiques dans une colonne exclut ou inclut toujours les lignes spécifiées, même si les lignes sont modifiées ultérieurement. Supposons que vous excluez ou incluez les lignes 1 à 10 dans la colonne A et qu’elles deviennent plus tard les lignes 11 à 20. Dans ce cas, elles continuent à être exclues ou inclues même lorsque les données ne sont plus les mêmes.

    De même, supposons qu'une ligne en dehors de la portée du filtre soit ultérieurement mise à jour (ou mise à jour et supprimée) et qu'elle soit ensuite exclue ou incluse tel que défini par le filtre. Dans ce cas, il est répliqué sur la cible.

Les problèmes supplémentaires suivants s'appliquent lors de l'utilisation de filtres de source :

  • Nous vous recommandons de créer un index à l'aide des colonnes incluses dans la définition du filtrage et de la clé primaire.

Création de règles de filtre de source en JSON

Vous pouvez créer des filtres sources à l'aide du paramètre JSON filters d'une règle de sélection. Le paramètre filters spécifie un tableau d'un ou plusieurs objets JSON. Chaque objet a des paramètres qui spécifient le type de filtre source, le nom de colonne et les conditions de filtre. Ces conditions de filtre comprennent un ou plusieurs opérateurs de filtre et des valeurs de filtre.

Le tableau suivant illustre les paramètres utilisés pour spécifier le filtrage de la source dans un objet filters.

Paramètre

Valeur

filter-type

source

column-name

Paramètre indiquant le nom de la colonne source à laquelle vous voulez appliquer le filtre. Le nom est sensible à la casse.

filter-conditions

Tableau d’un ou plusieurs objets contenant un paramètre filter-operator et aucun ou plusieurs paramètres de valeur associés, en fonction de la valeur de filter-operator.

filter-operator

Paramètre doté de l’une des valeurs suivantes :

  • lte : inférieur ou égal à une valeur

  • ste : inférieur ou égal à une valeur (alias lte)

  • gte : supérieur ou égal à une valeur

  • eq : égal à une valeur

  • noteq : pas égal à une valeur

  • between : égal ou compris entre deux valeurs

  • notbetween : pas égal ou compris entre deux valeurs

  • null : valeurs NULL

  • notnull : pas de valeur NULL

value ou

start-value et end-value ou

pas de valeur

Aucun ou plusieurs paramètres de valeur associés à filter-operator :

  • Si filter-operator est défini sur lte, ste, gte, eq ou noteq, utilisez value pour spécifier un paramètre de valeur.

  • Si filter-operator est défini sur between ou notbetween, utilisez start-value et end-value pour spécifier deux paramètres de valeur.

  • Si filter-operator est défini sur null ou notnull, ne spécifiez aucun paramètre de valeur.

Les exemples suivants illustrent des manières courantes d'utiliser des filtres de source.

Exemple Filtre unique

Le filtre suivant réplique tous les employés où empid >= 100 dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "gte", "value": "50" },{ "filter-operator": "noteq", "value": "100" }] }] }] }
Exemple Plusieurs opérateurs de filtre

Le filtre suivant s'applique à plusieurs opérateurs de filtre dans une seule colonne de données. Le filtre réplique tous les employés où (empid <= 10) OU (empid is between 50 and 75) OU (empid >= 100) dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "lte", "value": "10" }, { "filter-operator": "between", "start-value": "50", "end-value": "75" }, { "filter-operator": "gte", "value": "100" }] }] }] }
Exemple Plusieurs filtres

Les filtres suivants appliquent plusieurs filtres dans deux colonnes d’une table. Le filtre réplique tous les employés où (empid <= 100) ET (dept = tech) dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "lte", "value": "100" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "eq", "value": "tech" }] }] }] }
Exemple Filtrage des valeurs NULL

Le filtre suivant montre comment filtrer les valeurs vides. Il réplique tous les employés où dept = NULL dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "null" }] }] }] }
Exemple Filtrage à l’aide d’opérateurs NOT

Certains opérateurs peuvent être utilisés sous forme négative. Le filtre suivant réplique tous les employés où (empid is < 50) OR (empid is > 75) dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "notbetween", "start-value": "50", "end-value": "75" }] }] }] }
Exemple Utilisation d’opérateurs de filtres mixtes

À partir de AWS DMS la version 3.5.0, vous pouvez mélanger des opérateurs inclusifs et des opérateurs négatifs.

Le filtre suivant réplique tous les employés où (empid != 50) AND (dept is not NULL) dans la base de données cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "noteq", "value": "50" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "notnull" }] }] }] }

Notez ce qui suit lorsque vous utilisez null avec d’autres opérateurs de filtre :

  • L’utilisation conjointe de conditions inclusives, négatives et de filtre null au sein d’un même filtre ne permet pas de répliquer les enregistrements contenant des valeurs NULL.

  • L’utilisation conjointe de conditions négatives et de filtre null sans conditions de filtre inclusives au sein d’un même filtre ne permet pas de répliquer les données.

  • L’utilisation de conditions de filtre négatives sans définir une condition de filtre null de manière explicite ne permet pas de répliquer les enregistrements contenant des valeurs NULL.

Filtrage par heure et date

Lorsque vous sélectionnez les données à importer, vous pouvez spécifier une date ou une heure dans le cadre de vos critères de filtrage. AWS DMS utilise le format de date YYYY-MM-DD et le format d'heure YYYY-MM-DD HH:MM:SS pour le filtrage. Les fonctions de AWS DMS comparaison suivent les conventions de SQLite. Pour de plus amples informations sur les types de donnée SQLite et les comparaisons de dates, veuillez consulter Types de données dans SQLite Version 3 dans la documentation SQLite.

Le filtre suivant montre comment filtrer sur une date. Il réplique tous les employés où empstartdate >= January 1, 2002 dans la base de données cible.

Exemple Filtre de date unique
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empstartdate", "filter-conditions": [{ "filter-operator": "gte", "value": "2002-01-01" }] }] }] }