

# DynamoDB でのプロジェクション式の使用
<a name="Expressions.ProjectionExpressions"></a>

テーブルからデータを読み込むには、次のような `GetItem`、`Query`、または `Scan` のオペレーションを使用します。Amazon DynamoDB は、デフォルトですべての項目属性を返します。すべての属性ではなく、一部の属性のみを取得するには、プロジェクション式を使用します。

*プロジェクション式*は、任意の属性を識別する文字列です。1 つの属性を取得するには、名前を指定します。複数の属性の場合、名前をカンマで区切る必要があります。

`ProductCatalog` からの [DynamoDB で式を使用する場合の項目属性の参照](Expressions.Attributes.md) 項目に基づく、プロジェクション式のいくつかの例を次に示します。
+ 1 つの最上位属性。

  `Title `
+ 3 つの最上位属性。DynamoDB は `Color` セット全体を取得します。

  `Title, Price, Color`
+ 4 つの最上位属性。DynamoDB は `RelatedItems` および `ProductReviews` のコンテンツ全体を返します。

  `Title, Description, RelatedItems, ProductReviews`

**注記**  
プロジェクション式は、プロビジョンドスループットの消費には影響しません。DynamoDB は、アプリケーションに返すデータの量ではなく、項目のサイズに基づいて、キャパシティユニットの消費数を決定します。

**予約語と特殊文字**

DynamoDB には予約語と特殊文字があります。DynamoDB では、これらの予約語と特殊文字を名前に使用できますが、お勧めしません。これらの名前を式で使用するたびに、代わりにエイリアスを使用する必要があるためです。詳細な一覧については、「[DynamoDB の予約語](ReservedWords.md)」を参照してください。

次の場合は、実際の名前の代わりに式の属性名を使用する必要があります。
+ 属性名が DynamoDB の予約語リストにある場合。
+ 最初の文字が `a-z` または `A-Z` で、2 番目の文字 (存在する場合) が `a-Z`、`A-Z`、`0-9` のいずれかでなければならないという要件を属性名が満たしていない場合。
+ 属性名に、**\$1** (ハッシュ) または **:** (コロン) が含まれている場合。

以下の AWS CLI の例に示しているのは、`GetItem` オペレーションでプロジェクション式を使用する方法です。この式は最上位スカラー射影内の属性 (`Description`)、リスト内の最初の要素 (`RelatedItems[0]`)、およびマップ内に入れ子にするリスト (`ProductReviews.FiveStar`) を取得します。

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '"Id": { "N": "123" } \
    --projection-expression "Description, RelatedItems[0], ProductReviews.FiveStar"
```

この例では、次の JSON が返されます。

```
{
    "Item": {
        "Description": {
            "S": "123 description"
        },
        "ProductReviews": {
            "M": {
                "FiveStar": {
                    "L": [
                        {
                            "S": "Excellent! Can't recommend it highly enough! Buy it!"
                        },
                        {
                            "S": "Do yourself a favor and buy this."
                        }
                    ]
                }
            }
        },
        "RelatedItems": {
            "L": [
                {
                    "N": "341"
                }
            ]
        }
    }
}
```