DynamoDB — cannot specify projection when Select is COUNT

TL;DR — Deine Query/dein Scan hat Select: COUNT und eine ProjectionExpression gesetzt (oder das alte AttributesToGet). COUNT liefert nur die Anzahl passender Items zurück, nie die Items selbst; Attribute zu benennen, die zurückkommen sollen, ist also widersprüchlich — DynamoDB lehnt es ab. Entscheide dich: Select: COUNT ohne Projektion, oder eine Projektion mit Select: SPECIFIC_ATTRIBUTES (der Standard, sobald du eine ProjectionExpression mitgibst).

Was es bedeutet

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

(Das ist die Meldung mit dem veralteten AttributesToGet-Parameter; mit ProjectionExpression unterscheidet sich die Formulierung, aber die Regel ist dieselbe.) Select steuert, was ein Read zurückgibt. COUNT bittet DynamoDB um eine Zählung (Count/ScannedCount) und keine Item-Daten. Eine ProjectionExpression/AttributesToGet bittet um bestimmte Attribute der zurückgegebenen Items. Diese beiden schließen sich gegenseitig aus — die Query-API-Referenz stellt es klar: "If you use the ProjectionExpression parameter, then the value for Select can only be SPECIFIC_ATTRIBUTES. Any other value for Select will return an error." Ein Kostenhinweis: COUNT verbraucht trotzdem dieselbe Read-Kapazität wie das tatsächliche Abrufen der Items — es spart Bandbreite, nicht RCUs.

Warum es passiert

  • Beide Parameter gleichzeitig gesetztSelect: COUNT belassen, während eine ProjectionExpression hinzugefügt wurde (oder umgekehrt).
  • Veraltetes AttributesToGet kombiniert mit Select: COUNT.
  • Ein Query-Builder, der immer eine Projektion anhängt, selbst wenn der Aufrufer nur eine Zählung wollte.
  • Missverständnis von Select — die Erwartung, dass COUNT auch die gezählten Items zurückgibt.

So behebst du es

  1. Nur zählen? Lass die Projektion weg. Setze Select: COUNT und entferne ProjectionExpression/AttributesToGet.
  2. Bestimmte Attribute nötig? Lass Select: COUNT weg. Übergib eine ProjectionExpression; DynamoDB setzt Select standardmäßig auf SPECIFIC_ATTRIBUTES, sodass du Select normalerweise gar nicht setzt.
  3. Sowohl die Zählung als auch die Items nötig? Mache einen Aufruf für die Items (mit deiner Projektion) und lies dessen Count, oder mache einen separaten Select: COUNT-Aufruf.
  4. Bevorzuge ProjectionExpression gegenüber AttributesToGet — AWS markiert AttributesToGet als veralteten Parameter und empfiehlt stattdessen ProjectionExpression.

Willst du beim Erkunden nur schnell eine Zählung oder eine projizierte Ansicht? Die DynoTable-Desktop-App führt Abfragen aus und zeigt die Übereinstimmungsanzahl, ohne dass du widersprüchliche Select-Parameter von Hand zusammenbaust.

In DynoTable öffnen

DynoTable's query panel separates count mode from projection — you either fetch items with selected attributes or read the matched count, never both in one conflicting request. Öffne eine Tabelle mit ⌘K, run a Query, and check the result count in the status bar without attaching a ProjectionExpression.

Nutze den Query Builder to generate a projection-only or count-only request for your SDK code. Wechsle Profile mit ⌘P; konfiguriere sie unter Einstellungen → Profile mit Verbindung testen. Siehe Mit AWS verbinden und Installation.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.