La chiave di avvio fornita non è valida

TL;DR — Il tuo ExclusiveStartKey non corrisponde allo schema chiave di ciò che stai impaginando. Deve contenere esattamente gli attributi chiave DynamoDB restituiti in LastEvaluatedKey — la chiave primaria completa, più la chiave dell'indice quando stai interrogando un GSI/LSI — con gli stessi nomi e tipi. Ripassa LastEvaluatedKey alla lettera; assemblandolo a mano è così che si rompe.

Cosa significa

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

ExclusiveStartKey indica a una Query/Scan dove riprendere. DynamoDB lo convalida rispetto allo schema di chiave della tabella o, per una query sull'indice, alla chiave combinata indice-più-tabella trasportata da LastEvaluatedKey. Attributi mancanti, attributi aggiuntivi, nomi errati o tipi errati falliscono tutti prima che i dati vengano letti.

Perché succede

  • Creazione manuale della chiave utilizzando solo la chiave di partizione: una tabella a chiave composita necessita di una chiave di partizione e di ordinamento nella chiave iniziale.
  • Impaginazione di un indice solo con la chiave della tabellaLastEvaluatedKey su una query GSI/LSI contiene sia gli attributi della chiave dell'indice che la chiave primaria della tabella; devono tornare tutti.
  • Deriva del tipo o del nome: la chiave è stata serializzata (JSON, parametro URL, cache) ed è tornata con "42" dove LastEvaluatedKey aveva un numero o con un campo rinominato.
  • Riutilizzo di una chiave tra query: una LastEvaluatedKey da una tabella/indice passata a una query rispetto a un'altra o alla stessa query dopo la modifica del presupposto dello schema della chiave.
  • Un wrapper che inserisce valori predefiniti: un ODM che inserisce gli attributi che ritiene appartengano alla chiave può inserire la chiave iniziale oltre la dimensione dello schema.

Come risolverlo

  1. "LastEvaluatedKey" di andata e ritorno non è stato toccato:

    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. Serializzalo senza perdita di dati se attraversa un limite di richiesta — quando il cursore di impaginazione va su un browser e torna indietro, codifica l'intero oggetto LastEvaluatedKey (ad esempio base64 del suo JSON) invece di ricostruirlo dai campi dell'elemento e mantieni i tipi di numero numeri.

  3. Includi tutti gli attributi chiave per l'impaginazione dell'indice: partizione dell'indice/chiave di ordinamento e chiave di partizione/ordinamento della tabella, esattamente come restituito.

  4. Non creare un punto di partenza — DynamoDB l'impaginazione non ha offset; se hai bisogno di "iniziare vicino a X", esprimilo in KeyConditionExpression (sk > :x) anziché in ExclusiveStartKey fatto a mano.

  5. Registra il LastEvaluatedKey grezzo in caso di errore. Confrontalo byte per byte con ciò che invia la tua richiesta successiva: i livelli di serializzazione spesso rinominano o stringono i tipi di numero.

Interroga in DynoTable

Sfoglia una query in DynoTable e ispeziona il cursore LastEvaluatedKey non elaborato tra le pagine: apri la tabella con ⌘K, esegui una query e copia il token di impaginazione parola per parola nel ciclo dell'SDK. Il pannello delle query mostra esattamente quali attributi chiave DynamoDB si aspetta.

Utilizza il Builder di query per generare un programma di query impaginato con la corretta gestione di ExclusiveStartKey. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.