The provided starting key is invalid

TL;DR — Dein ExclusiveStartKey passt nicht zum Key-Schema dessen, was du paginierst. Er muss genau die Schlüsselattribute enthalten, die DynamoDB in LastEvaluatedKey zurückgegeben hat — den vollständigen Primärschlüssel, plus den Indexschlüssel, wenn du einen GSI/LSI abfragst — mit denselben Namen und Typen. Gib LastEvaluatedKey unverändert zurück; ihn von Hand zusammenzubauen ist genau der Weg, auf dem das kaputtgeht.

Was es bedeutet

ValidationException: The provided starting key is invalid
ValidationException: Exclusive Start Key must have same size as table's key schema

ExclusiveStartKey sagt einem Query/Scan, wo fortgesetzt werden soll. DynamoDB validiert ihn gegen das Schlüsselschema der Tabelle — oder, bei einer Index-Abfrage, gegen den kombinierten Index-plus-Tabellen-Schlüssel, den LastEvaluatedKey trägt. Fehlende Attribute, zusätzliche Attribute, falsche Namen oder falsche Typen scheitern alle, bevor überhaupt Daten gelesen werden.

Warum es passiert

  • Den Schlüssel nur mit dem Partition Key selbst zusammenbauen — eine Tabelle mit zusammengesetztem Schlüssel braucht Partition- und Sort Key im Startschlüssel.
  • Einen Index nur mit dem Tabellenschlüssel paginierenLastEvaluatedKey bei einer GSI/LSI-Abfrage enthält sowohl die Index-Schlüsselattribute als auch den Primärschlüssel der Tabelle; sie alle müssen zurückgegeben werden.
  • Typ- oder Namensdrift — der Schlüssel wurde serialisiert (JSON, URL-Parameter, Cache) und kam mit "42" zurück, wo LastEvaluatedKey eine Zahl hatte, oder mit einem umbenannten Feld.
  • Einen Schlüssel über Abfragen hinweg wiederverwenden — ein LastEvaluatedKey von einer Tabelle/einem Index, der an eine Abfrage gegen eine andere übergeben wird, oder an dieselbe Abfrage, nachdem sich die Annahme über das Schlüsselschema geändert hat.
  • Ein Wrapper, der Defaults einschleust — ein ODM, das Attribute einfügt, von denen es glaubt, dass sie zum Schlüssel gehören, kann den Startschlüssel über die Schemagröße hinaus auffüllen.

So behebst du es

  1. LastEvaluatedKey unverändert durchreichen:

    let ExclusiveStartKey;
    do {
      const page = await docClient.send(
        new QueryCommand({
          TableName,
          KeyConditionExpression,
          ExpressionAttributeValues,
          ExclusiveStartKey
        })
      );
      items.push(...(page.Items ?? []));
      ExclusiveStartKey = page.LastEvaluatedKey; // verbatim — no rebuild
    } while (ExclusiveStartKey);
  2. Serialisiere ihn verlustfrei, wenn er eine Request-Grenze überschreitet — wenn der Paginierungs-Cursor zu einem Browser und zurück geht, kodiere das gesamte LastEvaluatedKey-Objekt (z. B. base64 seines JSON), statt es aus Item-Feldern zu rekonstruieren, und behalte Zahlen-Typen als Zahlen.

  3. Nimm jedes Schlüsselattribut für die Index-Paginierung mit — Index-Partition/Sort-Key und Tabellen-Partition/Sort-Key, exakt so, wie sie zurückgegeben wurden.

  4. Erfinde keinen Startpunkt — DynamoDB-Paginierung hat keinen Offset; wenn du „beginne nahe X" brauchst, drücke das in der KeyConditionExpression (sk > :x) aus statt in einem selbstgebauten ExclusiveStartKey.

Zu prüfen, was LastEvaluatedKey für deine Tabelle oder deinen Index tatsächlich enthält, nimmt das Rätselraten heraus — die DynoTable-Desktop-App blättert durch Abfragen und zeigt den rohen Cursor, und der DynamoDB Expression Builder stellt den Abfrage-Request darum herum zusammen.

In DynoTable abfragen

Page through a Query in DynoTable and inspect the raw LastEvaluatedKey cursor between pages — öffne die Tabelle mit ⌘K, run a Query, and copy the pagination token verbatim into your SDK loop. The query panel shows exactly which key attributes DynamoDB expects.

Nutze den Query Builder to generate a paginated Query program with correct ExclusiveStartKey handling. Wechsle Profile mit ⌘P; Verbindung testen on Einstellungen → Profile. 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.