

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Nama atribut ekspresi (alias) di DynamoDB
<a name="Expressions.ExpressionAttributeNames"></a>

*Nama atribut ekspresi* adalah alias (atau placeholder) yang Anda gunakan dalam ekspresi Amazon DynamoDB sebagai alternatif dari nama atribut yang sebenarnya. Nama atribut ekspresi harus dimulai dengan tanda pound (`#`) dan diikuti oleh satu atau lebih karakter alfanumerik. Karakter underscore (`_`) juga diperbolehkan.

Bagian ini menjelaskan beberapa situasi ketika Anda harus menggunakan nama atribut ekspresi.

**catatan**  
Contoh di bagian ini menggunakan AWS Command Line Interface (AWS CLI). 

**Topics**
+ [Kata yang dicadangkan](#Expressions.ExpressionAttributeNames.ReservedWords)
+ [Nama atribut yang berisi karakter khusus](#Expressions.ExpressionAttributeNames.AttributeNamesContainingSpecialCharacters)
+ [Atribut bersarang](#Expressions.ExpressionAttributeNames.NestedAttributes)
+ [Berulang kali mereferensikan nama atribut](#Expressions.ExpressionAttributeNames.RepeatingAttributeNames)

## Kata yang dicadangkan
<a name="Expressions.ExpressionAttributeNames.ReservedWords"></a>

Terkadang Anda mungkin perlu menulis ekspresi yang berisi nama atribut yang bertentangan dengan kata terpesan DynamoDB. (Untuk daftar lengkap kata-kata yang dicadangkan, lihat [Kata-kata penggunaan khusus di DynamoDB](ReservedWords.md).)

Misalnya, AWS CLI contoh berikut akan gagal karena `COMMENT` merupakan kata yang dicadangkan.

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

Untuk mengatasi hal ini, Anda dapat mengganti `Comment` dengan nama atribut ekspresi seperti `#c`. `#` (tanda pagar) diperlukan dan menunjukkan bahwa ini adalah placeholder untuk nama atribut. AWS CLI Contohnya sekarang akan terlihat seperti berikut.

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

**catatan**  
Jika nama atribut dimulai dengan nomor, berisi spasi, atau berisi kata terpesan, Anda *harus* menggunakan nama atribut ekspresi untuk menggantikan nama atribut dalam ekspresi tersebut.

## Nama atribut yang berisi karakter khusus
<a name="Expressions.ExpressionAttributeNames.AttributeNamesContainingSpecialCharacters"></a>

Dalam suatu ekspresi, titik (".") ditafsirkan sebagai karakter pemisah pada jalur dokumen. Namun, DynamoDB juga memungkinkan Anda menggunakan karakter titik dan karakter khusus lainnya, seperti tanda hubung (“-”) sebagai bagian dari nama atribut. Dalam beberapa kasus, ini bisa menjadi ambigu. Untuk menggambarkan, misalkan bahwa Anda ingin mengambil atribut `Safety.Warning` dari item `ProductCatalog` (lihat [Mengacu pada atribut item saat menggunakan ekspresi di DynamoDB](Expressions.Attributes.md)).

Misalkan Anda ingin mengakses `Safety.Warning` menggunakan ekspresi proyeksi.

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

DynamoDB akan mengembalikan hasil kosong, bukan string yang diharapkan ("`Always wear a helmet`"). Hal ini karena DynamoDB menafsirkan titik dalam ekspresi sebagai pemisah jalur dokumen. Dalam hal ini, Anda harus menentukan nama atribut ekspresi (seperti `#sw`) sebagai pengganti untuk `Safety.Warning`. Anda kemudian dapat menggunakan ekspresi proyeksi berikut.

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

DynamoDB kemudian akan mengembalikan hasil yang benar.

**catatan**  
Jika nama atribut berisi titik (".") atau tanda hubung ("-"), Anda *harus* menggunakan nama atribut ekspresi untuk menggantikan nama atribut dalam ekspresi tersebut.

## Atribut bersarang
<a name="Expressions.ExpressionAttributeNames.NestedAttributes"></a>

Misalkan Anda ingin mengakses atribut `ProductReviews.OneStar` bersarang. Dalam nama atribut ekspresi, DynamoDB memperlakukan titik (“.”) sebagai karakter dalam nama atribut. Untuk mereferensikan atribut bersarang, tentukan nama atribut ekspresi untuk setiap elemen di jalur dokumen:
+ `#pr — ProductReviews`
+ `#1star — OneStar`

Anda kemudian dapat menggunakan `#pr.#1star` untuk ekspresi proyeksi.

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

DynamoDB kemudian akan mengembalikan hasil yang benar.

## Berulang kali mereferensikan nama atribut
<a name="Expressions.ExpressionAttributeNames.RepeatingAttributeNames"></a>

Nama atribut ekspresi sangat membantu ketika Anda perlu merujuk ke nama atribut yang sama berulang-ulang. Misalnya, pertimbangkan ekspresi berikut untuk mengambil beberapa ulasan dari item `ProductCatalog`.

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

Untuk membuat hal ini lebih jelas, Anda dapat mengganti `ProductReviews` dengan nama atribut ekspresi seperti `#pr`. Ekspresi yang direvisi kini akan terlihat seperti berikut ini.
+  `#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"}'
```

Jika Anda menentukan nama atribut ekspresi, Anda harus menggunakannya secara konsisten di seluruh ekspresi. Selain itu, Anda tidak dapat menghilangkan simbol `#`. 