

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.

# Noms d’attributs d’expression (alias) dans DynamoDB
<a name="Expressions.ExpressionAttributeNames"></a>

Un *nom d’attribut d’expression* est un alias (ou espace réservé) utilisé dans une expression Amazon DynamoDB à la place d’un nom d’attribut réel. Un nom d’attribut d’expression doit commencer par un signe dièse (`#`) et être suivi d’un ou de plusieurs caractères alphanumériques. Le trait de soulignement (`_`) est également autorisé.

Cette section présente plusieurs cas dans lesquels vous devez utiliser des noms d’attributs d’expression.

**Note**  
Les exemples de cette section utilisent le AWS Command Line Interface (AWS CLI). 

**Topics**
+ [Mots réservés](#Expressions.ExpressionAttributeNames.ReservedWords)
+ [Noms d’attributs comportant des caractères spéciaux](#Expressions.ExpressionAttributeNames.AttributeNamesContainingSpecialCharacters)
+ [Attributs imbriqués](#Expressions.ExpressionAttributeNames.NestedAttributes)
+ [Référencement répété de noms d’attributs](#Expressions.ExpressionAttributeNames.RepeatingAttributeNames)

## Mots réservés
<a name="Expressions.ExpressionAttributeNames.ReservedWords"></a>

Dans certains cas, vous pouvez avoir besoin d’écrire une expression comportant un nom d’attribut qui entre en conflit avec un mot réservé DynamoDB. (Pour obtenir la liste complète des mots réservés, consultez [Mots réservés dans DynamoDB](ReservedWords.md).)

Par exemple, l' AWS CLI exemple suivant échouerait car il `COMMENT` s'agit d'un mot réservé.

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "Comment"
```

Pour contourner cela, vous pouvez remplacer `Comment` par un nom d’attribut d’expression tel que `#c`. Le `#` (signe dièse) est obligatoire et indique qu’il s’agit d’un espace réservé pour un nom d’attribut. L' AWS CLI exemple devrait maintenant ressembler à ce qui suit.

```
aws dynamodb get-item \
     --table-name ProductCatalog \
     --key '{"Id":{"N":"123"}}' \
     --projection-expression "#c" \
     --expression-attribute-names '{"#c":"Comment"}'
```

**Note**  
Si un nom d’attribut commence par un nombre ou comporte un espace ou un mot réservé, vous *devez* remplacer ce nom d’attribut dans l’expression à l’aide d’un nom d’attribut d’expression.

## Noms d’attributs comportant des caractères spéciaux
<a name="Expressions.ExpressionAttributeNames.AttributeNamesContainingSpecialCharacters"></a>

Dans une expression, un point (« . ») est interprété comme un caractère de séparation dans un chemin d’accès à un document. Cependant, DynamoDB vous permet également d’utiliser un caractère point et d’autres caractères spéciaux tels qu’un trait d’union (« - ») dans le cadre d’un nom d’attribut. Cela peut être ambigu dans certains cas. À titre d’illustration, supposons que vous souhaitiez récupérer l’attribut `Safety.Warning` d’un élément `ProductCatalog`. (Consultez [Référencement d’attributs d’élément lors de l’utilisation d’expressions dans DynamoDB](Expressions.Attributes.md).)

Supposons que vous souhaitiez accéder à `Safety.Warning` à l’aide d’une expression de projection.

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "Safety.Warning"
```

DynamoDB renvoie un résultat vide au lieu de la chaîne attendue (« `Always wear a helmet` »). En effet, DynamoDB interprète un point dans une expression comme un caractère de séparation dans un chemin d’accès à un document. Dans ce cas, vous devez définir un nom d’attribut d’expression (tel que `#sw`) en remplacement de `Safety.Warning`. Vous pouvez ensuite utiliser l’expression de projection suivante.

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "#sw" \
    --expression-attribute-names '{"#sw":"Safety.Warning"}'
```

DynamoDB renvoie alors le résultat correct.

**Note**  
Si un nom d’attribut comporte un point (« . ») ou un trait d’union (« - »), vous*devez* remplacer le nom de cet attribut dans l’expression à l’aide d’un nom d’attribut d’expression.

## Attributs imbriqués
<a name="Expressions.ExpressionAttributeNames.NestedAttributes"></a>

Supposons que vous souhaitiez accéder à l’attribut imbriqué `ProductReviews.OneStar`. Dans un nom d’attribut d’expression, DynamoDB traite un point (« . ») comme un caractère dans un nom d’attribut. Pour référencer l’attribut imbriqué, définissez un nom d’attribut d’expression pour chaque élément dans le chemin d’accès au document :
+ `#pr — ProductReviews`
+ `#1star — OneStar`

Vous pouvez ensuite utiliser `#pr.#1star` pour l’expression de projection.

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "#pr.#1star"  \
    --expression-attribute-names '{"#pr":"ProductReviews", "#1star":"OneStar"}'
```

DynamoDB renvoie alors le résultat correct.

## Référencement répété de noms d’attributs
<a name="Expressions.ExpressionAttributeNames.RepeatingAttributeNames"></a>

Les noms d’attributs d’expression sont utiles lorsque vous devez référencer le même nom d’attribut à plusieurs reprises. Par exemple, imaginons l’expression suivante pour récupérer certains des commentaires d’un élément `ProductCatalog`.

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "ProductReviews.FiveStar, ProductReviews.ThreeStar, ProductReviews.OneStar"
```

Pour la rendre plus concise, vous pouvez remplacer `ProductReviews` par un nom d’attribut d’expression tel que `#pr`. L’expression révisée ressemblerait maintenant à ceci.
+  `#pr.FiveStar, #pr.ThreeStar, #pr.OneStar` 

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"123"}}' \
    --projection-expression "#pr.FiveStar, #pr.ThreeStar, #pr.OneStar" \
    --expression-attribute-names '{"#pr":"ProductReviews"}'
```

Si vous définissez un nom d’attribut d’expression, vous devez l’utiliser systématiquement sur l’ensemble de l’expression. En outre, vous ne pouvez pas ignorer le symbole `#`. 