DynamoDB — cannot specify projection when Select is COUNT
TL;DR — Query/Scan が Select: COUNT と ProjectionExpression(またはレガシーの 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が残った(またはその逆)。 - レガシーの
AttributesToGetをSelect: COUNTと組み合わせた。 - 呼び出し元がカウントだけを望んだときでも、常にプロジェクションを付ける クエリビルダー。
Selectの誤解 —COUNTがカウントしたアイテムも返すと期待している。
修正方法
- カウントだけですか?プロジェクションを外します。
Select: COUNTを設定し、ProjectionExpression/AttributesToGetを削除します。 - 特定の属性が必要ですか?
Select: COUNTを外します。ProjectionExpressionを渡します。DynamoDB はSelectをデフォルトでSPECIFIC_ATTRIBUTESにするため、通常Selectはまったく設定しません。 - カウントとアイテムの両方が必要ですか? アイテム用に1回の呼び出しを行い(プロジェクション付き)その
Countを読むか、別のSelect: COUNT呼び出しを行います。 AttributesToGetよりProjectionExpressionを優先します — AWS はAttributesToGetをレガシーパラメータとしてマークし、代わりにProjectionExpressionを推奨しています。
探索中にすばやいカウントや投影されたビューが欲しいだけですか?DynoTable デスクトップアプリ はクエリを実行し、矛盾する Select パラメータを手作業で組み立てることなく、一致したカウントを表示します。
DynoTable で開く
DynoTable のクエリパネルは、カウントモードと射影を分けています — 選んだ属性でアイテムを取得するか、一致した件数を読むかのどちらかで、矛盾する 1 つのリクエストに両方が入ることはありません。⌘K でテーブルを開いて Query を実行すれば、ProjectionExpression を付けずにステータスバーで結果の件数を確認できます。
クエリビルダーを使えば、SDK のコード向けに射影だけ、あるいはカウントだけのリクエストを生成できます。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行い、Test Connection を実行します。AWS に接続するとインストールを参照してください。
出典
- Query — Amazon DynamoDB API Reference (2026-07-13 時点で検証)
- AttributesToGet (legacy) (2026-07-13 時点で検証)
関連するエラー
- Cannot use both expression and non-expression parameters — レガシーと式パラメータの混在。
- Query key condition not supported — 同じリクエストでの不正な形式のキー条件。
- 学習: カウント・合計・集計 · 射影式
参考資料
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- AttributesToGet (legacy) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。