AWS CLI での DynamoDB GSI のクエリ
グローバルセカンダリインデックスのクエリは、通常の aws dynamodb query にフラグを1つ加えたものです: --index-name。キー条件はテーブルのキーではなくインデックスのキーを対象とします。ここでは AlbumTitle-index によってアルバムで曲を取得できます。これは、ベーステーブル(Artist + SongTitle)ではスキャンなしには対応できないアクセスパターンです。
Code
aws dynamodb query \
--table-name 'Music' \
--index-name 'AlbumTitle-index' \
--key-condition-expression '#hashKey = :hashKeyValue' \
--expression-attribute-names '{"#hashKey":"AlbumTitle"}' \
--expression-attribute-values '{":hashKeyValue":{"S":"Danzon"}}'出力は一致したアイテムを DynamoDB JSON で示します:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 2,
"ScannedCount": 2
}Explanation
--index-name— クエリする GSI を指定します(--table-nameは依然として必須)。--key-condition-expressionはインデックスのパーティション(および任意でソート)キー — ここではAlbumTitle— を、テーブルクエリと同じ演算子で使います。- 結果整合性のみ — GSI はベーステーブルから非同期にレプリケーションされます。GSI クエリに
--consistent-readを追加してもアップグレードされず、ValidationExceptionで失敗します。(ローカルセカンダリインデックスは強い整合性をサポートします。) - 投影された属性のみ取得できる — GSI クエリはインデックスが投影するもの(
ALL、KEYS_ONLY、またはINCLUDEで列挙された属性)を返し、残りをベーステーブルから取得することはできません。 - GSI ではキーは一意ではない — 多くのアイテムが同じインデックスキーを共有でき、インデックスキー属性を持たないアイテムは単に現れません(これがスパースインデックスのパターンです)。
- ページネーションは自動 — CLI は舞台裏でサービスのページネーショントークンを追跡し、結合された結果を出力します。出力を制限するには
--max-itemsを使い(NextTokenが現れます。--starting-tokenで再開します)、単一のサービス呼び出しには--no-paginateを使います。
Do it visually
DynamoDB Expression Builder はインデックスクエリのためにキー条件 + 名前/値のマップを構築し、すぐ実行できる CLI コマンドを渡します。
テーブルのインデックスを参照し、フォームから GSI クエリを実行するには(ページネーションされたグリッド、CLI としてコピー)、DynoTable をダウンロードしてください。
Related examples
- DynamoDB Query a GSI in Node.js — AWS SDK v3 による同じインデックスクエリ。
- DynamoDB Query a GSI in Python — boto3 による同じインデックスクエリ。
- DynamoDB Query with the AWS CLI — ベーステーブルのクエリ。
- GSI vs. LSI — アクセスパターンに合うインデックスの種類。
- Why GSIs are eventually consistent — レプリケーション遅延の解説。
- "The table does not have the specified index" — インデックス名が一致しない(GSI 名は大文字小文字を区別します)。
- "Consistent reads are not supported on global secondary indexes" — なぜ consistent-read フラグが GSI で失敗するのか。
References
- Query — Amazon DynamoDB API Reference
- query — AWS CLI Command Reference
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Using AWS CLI pagination options — AWS CLI User Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。