

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 d'expressions de règle de transformation pour définir le contenu d’une colonne
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions"></a>

Pour définir le contenu de colonnes nouvelles et existantes, vous pouvez utiliser une expression dans une règle de transformation. Par exemple, des expressions peuvent vous permettre d’ajouter une colonne ou de répliquer des en-têtes de table source à une cible. Vous pouvez également utiliser des expressions pour signaler des enregistrements des tables cibles comme insérés, mis à jour ou supprimés à la source. 

**Topics**
+ [

## Ajouter une colonne à l'aide d'une expression
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-adding)
+ [

## Signalement d'enregistrements cibles à l'aide d'une expression
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Flagging)
+ [

## Réplication des en-têtes d’une table source à l'aide d'expressions
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Headers)
+ [

## Utilisation de SQLite fonctions pour créer des expressions
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite)
+ [

## Ajout de métadonnées à une table cible à l’aide d’expressions
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Metadata)

## Ajouter une colonne à l'aide d'une expression
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-adding"></a>

Pour ajouter des colonnes à des tables à l'aide d'une expression dans une règle de transformation, utilisez une action de règle `add-column` et une cible de règle `column`.

L'exemple suivant ajoute une nouvelle colonne à la table `ITEM`. Il définit le nouveau nom de colonne sur `FULL_NAME`, avec un type de données `string` de 50 caractères. L'expression concatène les valeurs de deux colonnes existantes, `FIRST_NAME` et `LAST_NAME`, pour les évaluer selon `FULL_NAME`. `schema-name`, `table-name` et les paramètres d’expression font référence aux objets de la table de base de données source. `Value` et le bloc `data-type` font référence aux objets de la table de base de données 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-column",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "ITEM"
            },
            "value": "FULL_NAME",
            "expression": "$FIRST_NAME||'_'||$LAST_NAME",
            "data-type": {
                 "type": "string",
                 "length": 50
            }
        }
    ]
}
```

## Signalement d'enregistrements cibles à l'aide d'une expression
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Flagging"></a>

Pour signaler des enregistrements dans des tables cibles comme insérés, mis à jour ou supprimés dans la table source, utilisez une expression dans une règle de transformation. L'expression utilise une fonction `operation_indicator` pour signaler les enregistrements. Les enregistrements supprimés de la source ne sont pas supprimés de la cible. Au lieu de cela, l'enregistrement cible est signalé avec une valeur fournie par l'utilisateur pour indiquer qu'il a été supprimé de la source.

**Note**  
La fonction `operation_indicator` fonctionne uniquement sur les tables qui ont une clé primaire à la fois sur les bases de données sources et cibles. 

Par exemple, la règle de transformation suivante ajoute d'abord une nouvelle colonne `Operation` à une table cible. Elle met ensuite à jour la colonne avec la valeur `D` chaque fois qu'un enregistrement est supprimé d'une table source.

```
{
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value": "Operation",
      "expression": "operation_indicator('D', 'U', 'I')",
      "data-type": {
        "type": "string",
        "length": 50
      }
}
```

## Réplication des en-têtes d’une table source à l'aide d'expressions
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Headers"></a>

Par défaut, les en-têtes des tables sources ne sont pas répliqués sur la cible. Pour indiquer les en-têtes à répliquer, utilisez une règle de transformation avec une expression qui inclut l'en-tête de colonne du tableau. 

Vous pouvez utiliser les en-têtes de colonne suivants dans les expressions. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions.html)

Dans l'exemple suivant, une nouvelle colonne est ajoutée à la cible en utilisant la valeur de position du flux à partir de la source. Pour SQL Server, la valeur de position de flux est le LSN du point de terminaison source. Pour Oracle, la valeur de position de flux est le SCN du point de terminaison source.

```
{
      "rule-type": "transformation",
     "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value": "transact_id",
      "expression": "$AR_H_STREAM_POSITION",
      "data-type": {
        "type": "string",
        "length": 50
      }
    }
```

L’exemple suivant ajoute une nouvelle colonne à la cible qui possède un nombre incrémentiel unique issu de la source. Cette valeur représente un nombre unique à 35 chiffres au niveau de la tâche. Les 16 premiers chiffres font partie d’un horodatage et les 19 derniers chiffres sont le numéro record\$1id incrémenté par le SGBD.

```
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-target": "column",
"object-locator": {
"schema-name": "%",
"table-name": "%"
},
"rule-action": "add-column",
"value": "transact_id",
"expression": "$AR_H_CHANGE_SEQ",
"data-type": {
"type": "string",
"length": 50
}
}
```

## Utilisation de SQLite fonctions pour créer des expressions
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite"></a>

Vous utilisez les paramètres de table pour spécifier les paramètres que vous souhaitez appliquer à la table ou à la vue sélectionnée pour une opération spécifiée. Les règles table-settings sont facultatives. 

**Note**  
Plutôt que d’utiliser des tables et des vues, les bases de données MongoDB et DocumentDB stockent les enregistrements de données sous forme de documents regroupés dans des *collections*. Ainsi, lors de la migration depuis une source MongoDB ou DocumentDB, prenez en compte le type de segmentation par plage des paramètres de chargement parallèle pour les *collections* sélectionnées plutôt que les tables et les vues.

**Topics**
+ [

### Utilisation d’une expression CASE
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.CASE)
+ [

### Exemples
](#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.Ex)

Vous trouverez ci-dessous les fonctions de chaîne que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonctions de chaîne | Description | 
| --- | --- | 
|  `lower(x)`  |  La fonction `lower(x)` renvoie une copie de la chaîne *`x`* avec tous les caractères convertis en minuscules. La fonction `lower` intégrée par défaut fonctionne uniquement pour les caractères ASCII.  | 
|  `upper(x)`  |  La fonction `upper(x)` renvoie une copie de la chaîne *`x`* avec tous les caractères convertis en majuscules. La fonction `upper` intégrée par défaut fonctionne uniquement pour les caractères ASCII.  | 
|  `ltrim(x,y)`  |  La fonction `ltrim(x,y)` renvoie une chaîne constituée en supprimant du côté gauche de x tous les caractères qui apparaissent dans y. S’il n’y a aucune valeur pour y, `ltrim(x)` supprime les espaces du côté gauche de x.  | 
|  `replace(x,y,z)`  |  La fonction `replace(x,y,z)` renvoie une chaîne constituée en substituant la chaîne z pour chaque occurrence de la chaîne y dans la chaîne x.  | 
| `rtrim(x,y)` |  La fonction `rtrim(x,y)` renvoie une chaîne constituée en supprimant du côté droit de x tous les caractères qui apparaissent dans y. S’il n’y a aucune valeur pour y, `rtrim(x)` supprime les espaces du côté droit de x.  | 
| `substr(x,y,z)` |  La fonction `substr(x,y,z)` renvoie une sous-chaîne de la chaîne d’entrée `x` qui commence par le `y`ème caractère et qui comporte *`z`* caractères.  Si *`z`* est omis, `substr(x,y)` renvoie tous les caractères jusqu’à la fin de la chaîne `x` en commençant par le `y`ème caractère. Le caractère le plus à gauche de `x` est le 1er caractère. Si *`y`* est négatif, le premier caractère de la sous-chaîne est trouvé en comptant à partir de la droite plutôt que de la gauche. Si *`z`* est négatif, les `abs(z)` caractères précédant le `y`ème caractère sont renvoyés. Si `x` est une chaîne, les index des caractères font référence aux caractères UTF-8 réels. Si `x` est un objet BLOB, les index font référence à des octets.  | 
| trim(x,y) |  La fonction `trim(x,y)` renvoie une chaîne constituée en supprimant des deux côtés de `x` tous les caractères qui apparaissent dans `y`. Si `y` n’a pas de valeur, `trim(x)` supprime les espaces des deux côtés de `x`.  | 

Vous trouverez ci-dessous les fonctions LOB que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonctions LOB | Description | 
| --- | --- | 
|  `hex(x)`  |  La fonction `hex` reçoit un objet BLOB en tant qu’argument et renvoie une version en chaîne hexadécimale en majuscules du contenu BLOB.  | 
|  `randomblob (N)`  |  La fonction `randomblob(N)` renvoie un objet BLOB de `N` octet(s) contenant des octets pseudo-aléatoires. S'il *N* est inférieur à 1, un BLOB aléatoire de 1 octet est renvoyé.   | 
|  `zeroblob(N)`  |  La fonction `zeroblob(N)` renvoie un objet BLOB composé de `N` octet(s) de 0x00.  | 

Vous trouverez ci-dessous les fonctions numériques que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonctions numériques | Description | 
| --- | --- | 
|  `abs(x)`  |  La fonction `abs(x)` renvoie la valeur absolue de l’argument numérique `x`. La `abs(x)` fonction renvoie NULL si cette valeur *x* est NULL. La `abs(x)` fonction renvoie 0,0 s'il s'**x**agit d'une chaîne ou d'un BLOB qui ne peut pas être converti en valeur numérique.  | 
|  `random()`  |  La fonction `random` renvoie un entier pseudo-aléatoire compris entre -9 223 372 036 854 775 808 et \$19 223 372 036 854 775 807.  | 
|  `round (x,y)`  |  La `round (x,y)` fonction renvoie une valeur à virgule flottante *x* arrondie aux *y* chiffres situés à droite de la virgule décimale. S'il n'y a aucune valeur pour*y*, elle est supposée être 0.  | 
|  `max (x,y...)`  |  La fonction `max` à plusieurs arguments renvoie l’argument avec la valeur maximale, ou renvoie NULL si l’un des arguments est NULL.  La fonction `max` recherche dans ses arguments de gauche à droite un argument qui définit une fonction de classement. Si elle en trouve un, elle utilise cette fonction de classement pour toutes les comparaisons de chaînes. Si aucun des arguments de `max` ne définit une fonction de classement, la fonction de classement `BINARY` est utilisée. La fonction `max` est une fonction simple lorsqu’elle possède deux arguments ou plus, mais elle fonctionne comme une fonction d’agrégation si elle n’a qu’un seul argument.  | 
|  `min (x,y...)`  |  La fonction `min` à plusieurs arguments renvoie l’argument avec la valeur minimale.  La fonction `min` recherche dans ses arguments de gauche à droite un argument qui définit une fonction de classement. Si elle en trouve un, elle utilise cette fonction de classement pour toutes les comparaisons de chaînes. Si aucun des arguments de `min` ne définit une fonction de classement, la fonction de classement `BINARY` est utilisée. La fonction `min` est une fonction simple lorsqu’elle possède deux arguments ou plus, mais elle fonctionne comme une fonction d’agrégation si elle n’a qu’un seul argument.   | 

Vous trouverez ci-dessous les fonctions de vérification NULL que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonctions de vérification NULL | Description | 
| --- | --- | 
|  `coalesce (x,y...)`  |  La fonction `coalesce` renvoie une copie de son premier argument non NULL, mais elle renvoie NULL si tous les arguments sont NULL. La fonction coalesce comporte au moins deux arguments.  | 
|  `ifnull(x,y)`  |  La fonction `ifnull` renvoie une copie de son premier argument non NULL, mais elle renvoie NULL si les deux arguments sont NULL. La fonction `ifnull` possède exactement deux arguments. La fonction `ifnull` est identique à `coalesce` avec deux arguments.  | 
|  `nullif(x,y)`  |  La fonction `nullif(x,y)` renvoie une copie de son premier argument si les arguments sont différents, mais elle renvoie NULL si les arguments sont identiques.  La fonction `nullif(x,y)` recherche dans ses arguments de gauche à droite un argument qui définit une fonction de classement. Si elle en trouve un, elle utilise cette fonction de classement pour toutes les comparaisons de chaînes. Si aucun des arguments NULLIF ne définit de fonction de classement, la fonction de classement `BINARY` est utilisée.  | 

Vous trouverez ci-dessous les fonctions de date/heure que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonctions de date et d’heure | Description | 
| --- | --- | 
|  `date(timestring, modifier, modifier...)`  |  La `date` fonction renvoie la date au format YYYY-MM-DD.  | 
|  `time(timestring, modifier, modifier...)`  |  La fonction `time` renvoie l’heure au format HH:MM:SS.  | 
|  `datetime(timestring, modifier, modifier...)`  |  La `datetime` fonction renvoie la date et l'heure au format YYYY-MM-DD HH:MM:SS.  | 
|  `julianday(timestring, modifier, modifier...)`  |  La fonction `julianday` renvoie le nombre de jours écoulés depuis midi, heure de Greenwich, le 24 novembre 4714 av JC.  | 
|  `strftime(format, timestring, modifier, modifier...)`  |  La fonction `strftime` renvoie la date conformément à la chaîne de format spécifiée comme premier argument, en utilisant l’une des variables suivantes : `%d` : jour du mois `%H` : heure entre 00 et 24 `%f` :\$1\$1 fractions de seconde SS.SSS `%j` : jour de l’année entre 001 et 366 `%J` :\$1\$1 numéro du jour julien `%m` : mois entre 01 et 12 `%M` : minute entre 00 et 59 `%s` : secondes depuis le 01/01/1970 `%S` : secondes entre 00 et 59 `%w` : jour de la semaine entre 0 et 6, dimanche = 0 `%W` : semaine de l’année entre 00 et 53 `%Y` : année entre 0000 et 9999 `%%`: %  | 

Vous trouverez ci-dessous une fonction de hachage que vous pouvez utiliser pour créer des expressions de règle de transformation.


| Fonction de hachage | Description | 
| --- | --- | 
|  `hash_sha256(x)`  |  La fonction `hash` génère une valeur de hachage pour une colonne d’entrée (à l’aide de l’algorithme SHA-256) et renvoie la valeur hexadécimale de la valeur de hachage générée.  Pour utiliser la fonction `hash` dans une expression, ajoutez `hash_sha256(x)` à l’expression et remplacez *`x`* par le nom de la colonne source.  | 

### Utilisation d’une expression CASE
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.CASE"></a>

L' SQLite `CASE`expression évalue une liste de conditions et renvoie une expression en fonction du résultat. La syntaxe est la suivante.

```
    CASE case_expression
     WHEN when_expression_1 THEN result_1
     WHEN when_expression_2 THEN result_2
     ...
     [ ELSE result_else ] 
    END

# Or 

     CASE
     WHEN case_expression THEN result_1
     WHEN case_expression THEN result_2
     ...
     [ ELSE result_else ] 
    END
```

### Exemples
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-SQLite.Ex"></a>

**Example d’ajout d’une nouvelle colonne de chaîne à la table cible en utilisant une condition de casse**  
L’exemple de règle de transformation suivant ajoute une nouvelle colonne de chaîne `emp_seniority` à la table cible `employee`. Il utilise la SQLite `round` fonction de la colonne des salaires, avec une condition de cas pour vérifier si le salaire est égal ou supérieur à 20 000. Si c’est le cas, la colonne obtient la valeur `SENIOR` et tout le reste a la valeur `JUNIOR`.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "emp_seniority",
      "expression": " CASE WHEN round($emp_salary)>=20000 THEN ‘SENIOR’ ELSE ‘JUNIOR’ END",
      "data-type": {
        "type": "string",
        "length": 50
      }

  }
```

**Example d'ajouter une nouvelle colonne de chaîne à la table cible à l'aide d'une fonction SUBSTR**  
L'exemple de règle de transformation suivant ajoute une nouvelle colonne de chaîne à l'aide d' SQLite opérateurs ou de fonctions pour définir les données d'une colonne. Cette approche implique l'utilisation de SQLite fonctions pour transformer les données GUID chargées depuis Oracle au format UUID avant de les insérer dans la table cible de Postgresql.  
La règle suivante utilise les fonctions de SQLite sous-chaîne (SUBSTR), de fonction hexadécimale (HEX) et de minuscule (LOWER) pour diviser les données du GUID en plusieurs groupes séparés par des traits d'union, en particulier un groupe de 8 chiffres suivi de trois groupes de 4 chiffres suivis d'un groupe de 12 chiffres, pour un total de 32 chiffres représentant les 128 bits.  
Voici les exemples de données source et de sortie sur le post-traitement cible via la règle de transformation :  
**Tableau source (format Oracle GUID)**    
T\$1 COL2  

```
06F6949D234911EE80670242AC120002
1A2B3C4D5E6F11EE80670242AC120003
F5E4D3C2B1A011EE80670242AC120004
```
**Table cible (format UUID PostgreSQL)**    
T\$1\$1TMP COL2  

```
06f6949d-2349-11ee-8067-0242ac120002
1a2b3c4d-5e6f-11ee-8067-0242ac120003
f5e4d3c2-b1a0-11ee-8067-0242ac120004
```

```
{
  "rule-type": "transformation",
  "rule-id": "2",
  "rule-name": "2",
  "rule-action": "add-column",
  "rule-target": "column",
  "object-locator": {
    "schema-name": "SPORTS",
    "table-name": "TEST_TBL_2"
  },
  "value": "t_col2_tmp",
  "expression": "CASE LOWER(SUBSTR(HEX($T_COL2), 1, 8) || '-' || SUBSTR(HEX($T_COL2), 9, 4) || '-' || SUBSTR(HEX($T_COL2), 13, 4) || '-' || SUBSTR(HEX($T_COL2), 17, 4) || '-' || SUBSTR(HEX($T_COL2), 21, 12)) WHEN '----' THEN NULL ELSE LOWER(SUBSTR(HEX($T_COL2), 1, 8) || '-' || SUBSTR(HEX($T_COL2), 9, 4) || '-' || SUBSTR(HEX($T_COL2), 13, 4) || '-' || SUBSTR(HEX($T_COL2), 17, 4) || '-' || SUBSTR(HEX($T_COL2), 21, 12)) END",
  "data-type": {
    "type": "string",
    "length": 60
  }
}
```

**Example d’ajout d’une nouvelle colonne de date à la table cible**  
L’exemple suivant ajoute une nouvelle colonne de date `createdate` à la table cible `employee`. Lorsque vous utilisez la fonction de SQLite date`datetime`, la date est ajoutée à la table nouvellement créée pour chaque ligne insérée.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "createdate",
      "expression": "datetime ()",
      "data-type": {
        "type": "datetime",
        "precision": 6
      }
  }
```

**Example d’ajout d’une nouvelle colonne numérique à la table cible**  
L’exemple suivant ajoute une nouvelle colonne numérique `rounded_emp_salary` à la table cible `employee`. Elle utilise la SQLite `round` fonction pour ajouter le salaire arrondi.   

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "rounded_emp_salary",
      "expression": "round($emp_salary)",
      "data-type": {
        "type": "int8"
      }
  }
```

**Example d’ajout d’une nouvelle colonne de chaîne à la table cible en utilisant la fonction de hachage**  
L’exemple suivant ajoute une nouvelle colonne de chaîne `hashed_emp_number` à la table cible `employee`. La SQLite `hash_sha256(x)` fonction crée des valeurs hachées sur la cible pour la colonne source,`emp_number`.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "public",
        "table-name": "employee"
      },
      "value": "hashed_emp_number",
      "expression": "hash_sha256($emp_number)",
      "data-type": {
        "type": "string",
        "length": 64
      }
  }
```

## Ajout de métadonnées à une table cible à l’aide d’expressions
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Expressions-Metadata"></a>

Vous pouvez ajouter les informations de métadonnées à la table cible en utilisant les expressions suivantes :
+ `$AR_M_SOURCE_SCHEMA` : nom du schéma source.
+ `$AR_M_SOURCE_TABLE_NAME` : nom de la table source.
+ `$AR_M_SOURCE_COLUMN_NAME` : nom d’une colonne de la table source.
+ `$AR_M_SOURCE_COLUMN_DATATYPE` : type de données d’une colonne de la table source.

**Example d’ajout d’une colonne pour un nom de schéma en utilisant le nom de schéma issu de la source**  
L’exemple suivant ajoute une nouvelle colonne nommée `schema_name` à la cible en utilisant le nom de schéma issu de la source.  

```
  {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-action": "add-column",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "add-column",
      "value":"schema_name",
      "expression": "$AR_M_SOURCE_SCHEMA", 
      "data-type": { 
         "type": "string",
         "length": 50
      }
  }
```