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 だけ)。
  • アクセスパターンが進化する中で、クエリのニーズから ドリフトした投影

修正方法

  1. 投影された属性のみを要求しますProjectionExpression を GSI のキー + その投影セットに制限するか、Select: ALL_ATTRIBUTES を外します。
  2. 属性を GSI の投影に追加します — 新しい属性には、ProjectionType: INCLUDE(それをリスト)または ALL で GSI を作成/置換します。既存の GSI の投影はインプレースで編集できません。新しい GSI を追加するか、再作成します。
  3. ベーステーブルから取得します — GSI が 返す キーを使い、完全なアイテムのためにベーステーブルで GetItem/BatchGetItem を行います。
  4. インデックスからすべての属性が日常的に必要なら ProjectionType: ALL を使います(追加のストレージ/書き込みコストを受け入れて)。

照会する前に GSI が実際にどの属性を運ぶか見たいですか?DynoTable デスクトップアプリ は各インデックスの投影を表示するため、そこにあるものだけを要求できます — does not project の意外はありません。

関連するエラー

参考資料

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

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。