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 クエリはインデックスが投影するもの(ALLKEYS_ONLY、または INCLUDE で列挙された属性)を返し、残りをベーステーブルから取得することはできません
  • GSI ではキーは一意ではない — 多くのアイテムが同じインデックスキーを共有でき、インデックスキー属性を持たないアイテムは単に現れません(これがスパースインデックスのパターンです)。
  • ページネーションは自動 — CLI は舞台裏でサービスのページネーショントークンを追跡し、結合された結果を出力します。出力を制限するには --max-items を使い(NextToken が現れます。--starting-token で再開します)、単一のサービス呼び出しには --no-paginate を使います。

Do it visually

DynamoDB Expression Builder はインデックスクエリのためにキー条件 + 名前/値のマップを構築し、すぐ実行できる CLI コマンドを渡します。

テーブルのインデックスを参照し、フォームから GSI クエリを実行するには(ページネーションされたグリッド、CLI としてコピー)、DynoTable をダウンロードしてください。

References

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

このリクエストをビジュアルに組み立てる

この操作を無料の DynamoDB クエリビルダーで組み立て — キー条件、フィルタ、インデックス、Limit、ソート順、ページネーションループ — 実行可能な SDK v3・CLI・boto3 のプログラムとしてコピーして戻れます。

DynamoDB クエリビルダーを開く

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。