The provided starting key is invalid
In breve — Il tuo ExclusiveStartKey non corrisponde al key schema di ciò che stai paginando. Deve contenere esattamente gli attributi chiave che DynamoDB ha restituito in LastEvaluatedKey — la chiave primaria completa, più la chiave dell'indice quando interroghi un GSI/LSI — con gli stessi nomi e tipi. Ripassa LastEvaluatedKey alla lettera; assemblarlo a mano è come questo si rompe.
Cosa significa
ValidationException: The provided starting key is invalidValidationException: Exclusive Start Key must have same size as table's key schemaExclusiveStartKey dice a una Query/Scan dove riprendere. DynamoDB lo valida rispetto al key schema della tabella — o, per una query su indice, la chiave combinata indice-più-tabella che LastEvaluatedKey porta. Attributi mancanti, attributi in più, nomi errati o tipi errati falliscono tutti prima che qualsiasi dato venga letto.
Perché accade
- Costruire a mano la chiave con solo la partition key — una tabella a chiave composita necessita di partition e sort key nella chiave iniziale.
- Paginare un indice con solo la chiave della tabella —
LastEvaluatedKeysu una query GSI/LSI contiene sia gli attributi chiave dell'indice sia la chiave primaria della tabella; devono tornare tutti. - Deriva di tipo o 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 — un
LastEvaluatedKeyda una tabella/indice passato a una query su un'altra, o alla stessa query dopo che l'assunzione sul key schema è cambiata. - Un wrapper che inietta default — un ODM che riempie attributi che pensa appartengano alla chiave può gonfiare la chiave iniziale oltre la dimensione dello schema.
Come correggerlo
Ripassa
LastEvaluatedKeyintatto: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 perdite se attraversa un confine di richiesta — quando il cursore di paginazione va a un browser e torna, codifica l'intero oggetto
LastEvaluatedKey(es. base64 del suo JSON) invece di ricostruirlo dai campi dell'Item, e mantieni i tipi numerici come numeri.Includi ogni attributo chiave per la paginazione su indice — partition/sort key dell'indice e partition/sort key della tabella, esattamente come restituiti.
Non fabbricare un punto di partenza — la paginazione di DynamoDB non ha offset; se ti serve "inizia vicino a X", esprimilo nel
KeyConditionExpression(sk > :x) invece che in unExclusiveStartKeyfatto a mano.
Ispezionare cosa contiene effettivamente LastEvaluatedKey per la tua tabella o indice elimina le supposizioni — l'app desktop DynoTable pagina attraverso le query e mostra il cursore grezzo, e il DynamoDB Expression Builder compone la richiesta di query attorno ad esso.
Errori correlati
- The provided key element does not match the schema — la stessa mancata corrispondenza dello schema su una chiave di
GetItem/scrittura. - Query key condition not supported
- Esempio di codice: Get all items in Node.js · in Python (boto3) — il loop di paginazione con LastEvaluatedKey fatto bene.
- Impara: Pagination in DynamoDB
References
- Paginating table query results in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.