DynamoDB — cannot specify projection when Select is COUNT

TL;DR — Query/ScanSelect: COUNTProjectionExpression(またはレガシーの AttributesToGet)を設定しました。COUNT は一致するアイテムの数のみを返し、アイテム自体は決して返さないため、返す属性を指定するのは矛盾しています。DynamoDB は拒否します。どちらか1つを選んでください: プロジェクションなしの Select: COUNT、または Select: SPECIFIC_ATTRIBUTES を伴うプロジェクション(ProjectionExpression を渡すときのデフォルト)です。

意味

ValidationException: 1 validation error detected: Cannot specify the AttributesToGet when choosing to get only the Count

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Cannot specify the ProjectionExpression when choosing to get only the Count

(これはレガシーの AttributesToGet パラメータでのメッセージです。ProjectionExpression では表現が異なりますが、ルールは同じです。)Select は読み取りが何を返すかを制御します。COUNT は DynamoDB に集計(Count/ScannedCount)を求め、アイテムデータは求めません。ProjectionExpression/AttributesToGet は返されるアイテムの特定の属性を求めます。この2つは相互排他的です。Query API リファレンスが明記しています: 「ProjectionExpression パラメータを使う場合、Select の値は SPECIFIC_ATTRIBUTES のみです。Select の他の値はエラーを返します。」コストに関する注意: COUNT は実際にアイテムを取得するのと同じ読み取りキャパシティを消費します。帯域を節約するのであって、RCU ではありません。

発生する理由

  • 両方のパラメータを同時に設定ProjectionExpression が追加された間に Select: COUNT が残った(またはその逆)。
  • レガシーの AttributesToGetSelect: COUNT と組み合わせた。
  • 呼び出し元がカウントだけを望んだときでも、常にプロジェクションを付ける クエリビルダー
  • Select の誤解COUNT がカウントしたアイテムも返すと期待している。

修正方法

  1. カウントだけですか?プロジェクションを外します。 Select: COUNT を設定し、ProjectionExpression/AttributesToGet を削除します。
  2. 特定の属性が必要ですか?Select: COUNT を外します。 ProjectionExpression を渡します。DynamoDB は Select をデフォルトで SPECIFIC_ATTRIBUTES にするため、通常 Select はまったく設定しません。
  3. カウントとアイテムの両方が必要ですか? アイテム用に1回の呼び出しを行い(プロジェクション付き)その Count を読むか、別の Select: COUNT 呼び出しを行います。
  4. AttributesToGet より ProjectionExpression を優先します — AWS は AttributesToGet をレガシーパラメータとしてマークし、代わりに ProjectionExpression を推奨しています。

探索中にすばやいカウントや投影されたビューが欲しいだけですか?DynoTable デスクトップアプリ はクエリを実行し、矛盾する Select パラメータを手作業で組み立てることなく、一致したカウントを表示します。

DynoTable で開く

DynoTable のクエリパネルは、カウントモードと射影を分けています — 選んだ属性でアイテムを取得するか、一致した件数を読むかのどちらかで、矛盾する 1 つのリクエストに両方が入ることはありません。⌘K でテーブルを開いて Query を実行すれば、ProjectionExpression を付けずにステータスバーで結果の件数を確認できます。

クエリビルダーを使えば、SDK のコード向けに射影だけ、あるいはカウントだけのリクエストを生成できます。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行い、Test Connection を実行します。AWS に接続するインストールを参照してください。

出典

関連するエラー

参考資料

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

Console なしで DynamoDB を扱う

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

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