DynamoDB GSI does not project the requested attribute
TL;DR — グローバルセカンダリインデックス を照会し、インデックスが 投影しない 属性を(ProjectionExpression または Select=ALL_ATTRIBUTES で)要求しました。GSI は自身のキー属性、ベーステーブルのキー属性、およびその投影にリストしたものだけを返します。それ以外は返しません。リクエストを投影された属性に絞る、その属性を GSI の投影に追加する、またはベーステーブルをプライマリキーで照会するかしてください。
意味
ValidationException: One or more parameter values were invalid: Global secondary
index <index_name> does not project <attribute_name>
# or, with Select=ALL_ATTRIBUTES on a KEYS_ONLY / INCLUDE index:
ValidationException: Select type ALL_ATTRIBUTES is not supported for global
secondary index <index_name> because its projection type is not ALL
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: One or more parameter values were invalid: Global secondary index gsi1 does not project [unprojected]ローカルセカンダリインデックス(追加コストでベースアイテムから未投影の属性を取得できる)とは異なり、GSI は自己完結したコピー です。物理的に投影内の属性のみを格納します。AWS 自身のドキュメントは率直です: 「グローバルセカンダリインデックスのクエリはベーステーブルから属性を取得できません」。そのセット外のものを GSI クエリに要求するのは満たせないため、DynamoDB は部分的なデータを黙って返すのではなくリクエストを拒否します(ValidationException、HTTP 400 — リトライ不可)。
発生する理由
ProjectionType: KEYS_ONLYインデックスを非キー属性で照会。ProjectionType: INCLUDEインデックスを、NonKeyAttributesリストにない属性で照会。ProjectionType: ALLでない GSI でのSelect: ALL_ATTRIBUTES。- LSI の挙動を仮定 — GSI がベーステーブルから未投影の属性を取得することを期待(それをするのは LSI だけ)。
- アクセスパターンが進化する中で、クエリのニーズから ドリフトした投影。
修正方法
- 投影された属性のみを要求します —
ProjectionExpressionを GSI のキー + その投影セットに制限するか、Select: ALL_ATTRIBUTESを外します。 - 属性を GSI の投影に追加します — 新しい属性には、
ProjectionType: INCLUDE(それをリスト)またはALLで GSI を作成/置換します。既存の GSI の投影はインプレースで編集できません。新しい GSI を追加するか、再作成します。 - ベーステーブルから取得します — GSI が 返す キーを使い、完全なアイテムのためにベーステーブルで
GetItem/BatchGetItemを行います。 - インデックスからすべての属性が日常的に必要なら
ProjectionType: ALLを使います(追加のストレージ/書き込みコストを受け入れて)。
照会する前に GSI が実際にどの属性を運ぶか見たいですか?DynoTable デスクトップアプリ は各インデックスの投影を表示するため、そこにあるものだけを要求できます — does not project の意外はありません。
関連するエラー
- Index not found — インデックス名自体が誤っているか、まだ構築中。
- Query condition missed key schema element — GSI のキー条件が不完全。
- Code example: Query a GSI in Node.js — 比較対象となる動作する GSI クエリ。
- Learn: Index projections · GSI vs LSI · インデックス (Indexes)
参考資料
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Managing Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。