Règles et actions de transformation - 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.

Règles et actions de transformation

Les actions de transformation permettent de spécifier les transformations que vous souhaitez appliquer au schéma, à la table ou à la vue sélectionné(e). Les règles de transformation sont facultatives.

Limites

  • Vous ne pouvez pas appliquer plusieurs actions de règle de transformation au même objet (schéma, table, colonne, table-tablespace ou index-tablespace). Vous pouvez appliquer plusieurs actions de règle de transformation à n’importe quel niveau, à condition que chaque action de transformation soit appliquée à un objet différent.

  • Les noms de table et de colonne sont sensibles à la casse dans les règles de transformation. Par exemple, vous devez fournir les noms de table et de colonne d’une base de données Oracle ou Db2 en majuscules.

  • Les transformations ne sont pas prises en charge pour les noms de colonne rédigés de droite à gauche.

  • Les transformations ne peuvent pas être effectuées sur des colonnes dont le nom contient des caractères spéciaux (par exemple, #, \, /, -).

  • La seule transformation prise en charge pour les colonnes mappées aux types de données BLOB/CLOB consiste à supprimer la colonne sur la cible.

  • AWS DMS ne prend pas en charge la réplication de deux tables sources vers une seule table cible. AWS DMS réplique les enregistrements de table en table et de colonne en colonne, conformément aux règles de transformation de la tâche de réplication. Les noms des objets doivent être uniques pour éviter tout chevauchement.

    Par exemple, une table source possède une colonne nommée ID et la table cible correspondante possède une colonne préexistante appelée id. Si une règle utilise une instruction ADD-COLUMN pour ajouter une nouvelle colonne appelée id, et une instruction SQLite pour remplir la colonne avec des valeurs personnalisées, un objet ambigu en double nommé id est créé et il n’est pas pris en charge.

  • Lorsque vous créez une règle de transformation, nous vous recommandons d'utiliser le data-type paramètre uniquement lorsque les règles de sélection spécifient plusieurs colonnes, par exemple lorsque vous définissez column-name sur%. Nous vous déconseillons de l'utiliser data-type pour sélectionner une seule colonne.

Valeurs

Pour les règles de mappage de tables qui utilisent le type de règle de transformation, vous pouvez appliquer les valeurs suivantes :

Paramètre Valeurs possibles Description
rule-type transformation Valeur qui applique la règle à chaque objet spécifié par la règle de sélection. Utilisez, transformation sauf indication contraire.
rule-id Valeur numérique. Valeur numérique unique pour identifier la règle. Si vous spécifiez plusieurs règles de transformation pour le même objet (schéma, table, colonne, espace inter-tables ou espace table d'index), AWS DMS applique la règle de transformation avec le rule-id inférieur.
rule-name Valeur alphanumérique. Nom unique pour identifier la règle.
object-locator Objet avec les paramètres suivants :
  • schema-name : nom du schéma. Pour les points de terminaison MongoDB et Amazon DocumentDB, il s’agit du nom de la base de données contenant un ensemble de collections.

  • table-name : nom de la table, de la vue ou de la collection.

  • table-tablespace-name : nom d’un espace de table de table existant.

  • index-tablespace-name : nom d’un espace de table d’index existant.

  • column-name : nom d’une colonne existante.

  • data-type : nom d’un type de données de colonne existant.

Nom de chaque schéma, table ou vue, espace de table, espace de table d'index et colonne auxquels la règle s'applique. Vous pouvez utiliser le signe « % » comme caractère générique pour tout ou partie de la valeur de chaque paramètre object-locator, sauf data-type. Ainsi, vous pouvez faire correspondre ces éléments :

  • Une table ou une vue unique dans un seul schéma

  • Une table ou une vue unique dans tout ou partie des schémas

  • Certaines tables ou vues, ou toutes les tables et vues, dans un seul schéma

  • Certaines tables ou vues, ou toutes les tables et vues, dans tout ou partie des schémas

  • Une ou plusieurs colonnes dans la ou les table(s), la ou les vue(s) spécifiée(s) et le(s) schéma(s) spécifiés.

  • Nous vous recommandons d'utiliser le data-type paramètre uniquement lorsque les règles de sélection spécifient plusieurs colonnes, par exemple lorsque vous définissez column-name sur%. Nous ne recommandons pas d'utiliser ce paramètre pour une seule colonne.

En outre, les paramètres index-tablespace-name ou table-tablespace-name sont disponibles uniquement pour correspondre à un point de terminaison source Oracle. Vous pouvez spécifier table-tablespace-name ou index-tablespace-name dans une règle, mais pas les deux. Vous pouvez donc établir une correspondance avec un des éléments suivants :

  • Un, plusieurs ou tous les espaces de table de table

  • Un, plusieurs ou tous les espaces de table d'index

rule-action

add-column, include-column, remove-column

rename

convert-lowercase, convert-uppercase

add-prefix, remove-prefix, replace-prefix

add-suffix, remove-suffix, replace-suffix

define-primary-key

change-data-type

add-before-image-columns

Transformation à appliquer à l'objet. Toutes les actions de règle de transformation sont sensibles à la casse.

La valeur add-column du paramètre rule-action ajoute une colonne à une table. Vous ne pouvez toutefois pas ajouter une nouvelle colonne qui porte le même nom qu’une colonne existante de la même table.

Lorsqu'elle est utilisée avec les paramètres data-type et expression, add-column spécifie la valeur des données de la nouvelle colonne.

La valeur change-data-type pour rule-action est uniquement disponible pour les cibles de règle column.

La valeur include-column du paramètre rule-action modifie le mode de la table pour supprimer toutes les colonnes par défaut et inclure les colonnes spécifiées. Plusieurs colonnes sont incluses dans la cible en invoquant la règle include-column plusieurs fois.

Vous ne pouvez pas utiliser une règle define-primary-key lorsque le nom d’un schéma ou d’une table contient un caractère générique (%).

Pour une tâche existante, les actions de la règle de transformation qui modifient le schéma de la table cible telles que remove-column, rename ou add-prefix ne prendront effet qu’après le redémarrage de la tâche. Si vous reprenez la tâche après avoir ajouté la règle de transformation, vous pourriez constater un comportement inattendu de la colonne modifiée, notamment des données de colonne manquantes. Un redémarrage de la tâche est nécessaire pour garantir le bon fonctionnement de la règle de transformation.

rule-target schema, table, column, table-tablespace, index-tablespace Type d'objet que vous transformez.

Les valeurs table-tablespace et index-tablespace ne sont disponibles que pour un point de terminaison cible Oracle.

Assurez-vous de spécifier une valeur pour le paramètre que vous spécifiez dans le nom object-locator : table-tablespace-name ou index-tablespace-name.

value Valeur alphanumérique qui suit les règles de dénomination pour le type de cible. Nouvelle valeur pour les actions qui nécessitent une entrée, par exemple rename.
old-value Valeur alphanumérique qui suit les règles de dénomination pour le type de cible. Ancienne valeur pour les actions qui ont besoin d'être remplacées, par exemple replace-prefix.
data-type

type : type de données à utiliser si rule-action est add-column ou type de données de remplacement si rule-action est change-data-type.

Ou, le nom du type de données de remplacement quand l’rule-action est change-data-type, la valeur de column-name est "%" et un paramètre data-type supplémentaire permettant d'identifier le type de données existant est inclus dans le object-locator.

AWS DMS prend en charge les transformations de type de données de colonne pour les types de données DMS suivants : "bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstring", "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"

precision : si la colonne ajoutée ou le type de données de remplacement a une précision, une valeur entière pour spécifier la précision.

scale : si la colonne ajoutée ou le type de données de remplacement a une échelle, une valeur entière ou de date/heure pour spécifier l’échelle.

length : longueur de la nouvelle colonne de données (si utilisée avec add-column)

Exemple de paramètre data-type pour spécifier le type de données existant à remplacer.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "table_t", "column-name": "col10" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": "4092", "scale": "" } } ] }

Ici, la colonne col10 de la table table_t est remplacée par le type de données string.

expression Valeur alphanumérique qui suit la syntaxe SQLite.

Lorsqu'il est utilisé avec l’rule-action définie sur rename-schema, le paramètre expression spécifie un nouveau schéma. Lorsqu'elle est utilisée avec l’rule-action définit sur rename-table, expression spécifie une nouvelle table. Lorsqu'elle est utilisée avec l’rule-action définie sur rename-column, expression spécifie une nouvelle valeur de nom de colonne.

Lorsqu'elle est utilisée avec l’rule-action définie sur add-column, expression spécifie les données qui constituent une nouvelle colonne.

Notez que seules les expressions sont prises en charge pour ce paramètre. Les opérateurs et les commandes ne sont pas pris en charge.

Pour plus d’informations sur l’utilisation des expressions pour les règles de transformation, consultez Utilisation d'expressions de règle de transformation pour définir le contenu d’une colonne.

Pour plus d’informations sur les expressions SQLite, consultez Utilisation des fonctions SQLite pour créer des expressions.

primary-key-def

Objet avec les paramètres suivants :

  • name : nom d’une nouvelle clé primaire ou d’un nouvel index unique pour la table ou la vue.

  • (Facultatif) origin : type de clé unique à définir : primary-key (valeur par défaut) ou unique-index.

  • columns : tableau de chaînes répertoriant les noms des colonnes selon l’ordre dans lequel ils apparaissent dans la clé primaire ou dans l’index unique.

Ce paramètre peut définir le nom, le type et le contenu d'une clé unique dans la table ou la vue transformée. Il le fait lorsque l’rule-action est définie sur define-primary-key et la rule-target est définie sur table. Par défaut, la clé unique est définie en tant que clé primaire.
before-image-def

Objet avec les paramètres suivants :

  • column-prefix : valeur ajoutée au début d’un nom de colonne. La valeur par défaut est BI_.

  • column-suffix : valeur ajoutée à la fin du nom de colonne. La valeur par défaut est vide.

  • column-filter : nécessite l’une des valeurs suivantes : pk-only (par défaut), non-lob (facultative) et all (facultative).

Ce paramètre définit une convention de dénomination pour identifier les colonnes d’image antérieure et spécifie un filtre pour identifier les colonnes source qui peuvent avoir des colonnes d’image antérieure créées pour elles sur la cible. Vous pouvez spécifier ce paramètre lorsque l’rule-action est définie sur add-before-image-columns et la rule-target est définie sur column.

Ne définissez pas les deux column-prefix et column-suffix sur des chaînes vides.

Pour column-filter, sélectionnez:

  • pk-only : pour ajouter uniquement les colonnes qui font partie des clés primaires de la table.

  • non-lob : pour ajouter uniquement les colonnes qui ne sont pas de type LOB.

  • all : pour ajouter une colonne ayant une valeur d’image antérieure.

Pour plus d’informations sur la prise en charge de l’image antérieure pour les points de terminaison cibles AWS DMS , consultez :

Exemples

Exemple Renommer un schéma

L'exemple suivant renomme un schéma Test de votre source en Test1 dans votre cible.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "Test" }, "value": "Test1" } ] }
Exemple Renommer une table

L'exemple suivant renomme une table Actor de votre source en Actor1 dans votre cible.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table", "object-locator": { "schema-name": "Test", "table-name": "Actor" }, "value": "Actor1" } ] }
Exemple Renommer une colonne

L'exemple suivant renomme une colonne de la table Actor en remplaçant first_name dans votre source par fname dans votre cible.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "4", "rule-name": "4", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name" : "first_name" }, "value": "fname" } ] }
Exemple Renommer un espace de table de table Oracle

L'exemple suivant renomme l'espace de table de table nommé SetSpace d'une table nommée Actor dans votre source Oracle en SceneTblSpace dans votre point de terminaison cible Oracle.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetSpace" }, "value": "SceneTblSpace" } ] }
Exemple Renommer un espace de table d'index Oracle

L'exemple suivant renomme l'espace de table d'index nommé SetISpace d'une table nommée Actor dans votre source Oracle en SceneIdxSpace dans votre point de terminaison cible Oracle.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetISpace" }, "value": "SceneIdxSpace" } ] }
Exemple Ajouter une colonne

Dans l'exemple suivant une colonne datetime est ajoutée à la table Actor du schéma test.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "actor" }, "value": "last_updated", "data-type": { "type": "datetime", "precision": 6 } } ] }
Exemple Supprimer une colonne

L'exemple suivant transforme la table nommée Actor dans votre source pour en supprimer toutes les colonnes commençant par les caractères col dans votre cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name": "col%" } }] }
Exemple Convertir en minuscules

L'exemple suivant convertit un nom de table ACTOR dans votre source en actor dans votre cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-lowercase", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "ACTOR" } }] }
Exemple Convertir en majuscules

L'exemple suivant convertit toutes les colonnes de toutes les tables et tous les schémas en les faisant passer de lettres minuscules dans votre source à des lettres majuscules dans votre cible.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-uppercase", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" } } ] }
Exemple Ajouter un préfixe

L'exemple suivant transforme toutes les tables de votre source en leur ajoutant le préfixe DMS_ dans votre cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-prefix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "DMS_" }] }
Exemple Remplacer un préfixe

L'exemple suivant transforme toutes les colonnes contenant le préfixe Pre_ dans votre source en remplaçant le préfixe par NewPre_ dans votre cible.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "replace-prefix", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" }, "value": "NewPre_", "old-value": "Pre_" } ] }
Exemple Supprimer un suffixe

L'exemple suivant transforme toutes les tables de votre source en leur supprimant le suffixe _DMS dans votre cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-suffix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "_DMS" }] }
Exemple Définir une clé primaire

L'exemple suivant définit une clé primaire nommée ITEM-primary-key sur trois colonnes de la table ITEM migrée vers votre point de terminaison cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-primary-key", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
Exemple Définir un index unique

L'exemple suivant définit un index unique nommé ITEM-unique-idx sur trois colonnes de la table ITEM migrée vers votre point de terminaison cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-unique-idx", "origin": "unique-index", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
Exemple Modification du type de données de la colonne cible

L'exemple suivant remplace le type de données d'une colonne cible nommée SALE_AMOUNT à partir d'un type de données existant par int8.

{ "rule-type": "transformation", "rule-id": "1", "rule-name": "RuleName 1", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "dms", "column-name": "SALE_AMOUNT" }, "data-type": { "type": "int8" } }
Exemple Ajouter une colonne d'image antérieure

Pour une colonne source appelée emp_no, la règle de transformation de l'exemple suivant ajoute une nouvelle colonne appelée BI_emp_no dans la cible.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }

Ici, l’instruction suivante remplit une colonne BI_emp_no dans la ligne correspondante avec 1.

UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;

Lorsque vous écrivez des mises à jour CDC pour AWS DMS les cibles prises en charge, la BI_emp_no colonne permet de savoir quelles lignes contiennent des valeurs mises à jour dans la emp_no colonne.