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 invalidValidationException: Exclusive Start Key must have same size as table's key schemaExclusiveStartKey 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 tabella —
LastEvaluatedKeysu 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"doveLastEvaluatedKeyaveva un numero o con un campo rinominato. - Riutilizzo di una chiave tra query: una
LastEvaluatedKeyda 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
"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);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.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.
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é inExclusiveStartKeyfatto a mano.Registra il
LastEvaluatedKeygrezzo 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
- Risultati della query della tabella di impaginazione in DynamoDB (verificato il 13-07-2026)
- Query: riferimento Amazon DynamoDB API (verificato il 13-07-2026)
Errori correlati
- L'elemento chiave fornito non corrisponde allo schema — lo stesso schema non corrispondente su una chiave "GetItem"/write.
- Condizione della chiave di query non supportata
- Esempio di codice: Get all items in Node.js · in Python (boto3) — il ciclo di impaginazione LastEvaluatedKey eseguito correttamente.
- Impara: Impaginazione in DynamoDB
Riferimenti
- Risultati delle query sulla tabella di impaginazione in DynamoDB — Guida per sviluppatori di Amazon DynamoDB
- Query: riferimento Amazon DynamoDB API
- Scansione: riferimento Amazon DynamoDB API
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.