The provided starting key is invalid
TL;DR — ExclusiveStartKey Anda tidak cocok dengan key schema dari apa yang Anda paginasi. Ia harus berisi persis atribut kunci yang dikembalikan DynamoDB di LastEvaluatedKey — primary key penuh, ditambah kunci index saat Anda mengkueri GSI/LSI — dengan nama dan tipe yang sama. Teruskan LastEvaluatedKey kembali verbatim; merakitnya secara manual adalah cara ini rusak.
Apa artinya
ValidationException: The provided starting key is invalidValidationException: Exclusive Start Key must have same size as table's key schemaExclusiveStartKey memberi tahu Query/Scan di mana harus melanjutkan. DynamoDB memvalidasinya terhadap key schema tabel — atau, untuk kueri index, kunci gabungan index-plus-tabel yang dibawa LastEvaluatedKey. Atribut yang hilang, atribut ekstra, nama salah, atau tipe salah semua gagal sebelum data apa pun dibaca.
Mengapa terjadi
- Membangun kunci secara manual hanya dengan partition key — tabel kunci komposit butuh partition dan sort key dalam starting key.
- Memaginasi index hanya dengan kunci tabel —
LastEvaluatedKeypada kueri GSI/LSI berisi atribut kunci index dan primary key tabel; semuanya harus kembali. - Penyimpangan tipe atau nama — kunci diserialisasi (JSON, parameter URL, cache) dan kembali dengan
"42"di manaLastEvaluatedKeypunya number, atau dengan field yang diganti nama. - Menggunakan ulang kunci lintas kueri —
LastEvaluatedKeydari satu tabel/index diteruskan ke kueri terhadap yang lain, atau ke kueri yang sama setelah asumsi key schema berubah. - Pembungkus menyuntikkan default — ODM yang mengisi atribut yang dikiranya termasuk dalam kunci dapat mengisi starting key melewati ukuran schema.
Cara memperbaikinya
Round-trip
LastEvaluatedKeytanpa disentuh: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);Serialisasikan secara lossless jika melintasi batas permintaan — ketika cursor paginasi pergi ke browser dan kembali, kodekan seluruh objek
LastEvaluatedKey(mis. base64 dari JSON-nya) alih-alih merekonstruksinya dari field item, dan jaga tipe number tetap number.Sertakan setiap atribut kunci untuk paginasi index — partition/sort key index dan partition/sort key tabel, persis seperti yang dikembalikan.
Jangan mengarang titik awal — paginasi DynamoDB tidak punya offset; jika Anda butuh "mulai dekat X", ekspresikan dalam
KeyConditionExpression(sk > :x) alih-alihExclusiveStartKeybuatan tangan.
Memeriksa apa yang sebenarnya berisi LastEvaluatedKey untuk tabel atau index Anda menghilangkan tebakan — aplikasi desktop DynoTable memaginasi kueri dan menunjukkan cursor mentah, dan DynamoDB Expression Builder menyusun permintaan kueri di sekitarnya.
Kesalahan terkait
- The provided key element does not match the schema — ketidakcocokan schema yang sama pada kunci
GetItem/tulisan. - Query key condition not supported
- Contoh kode: Get all items in Node.js · in Python (boto3) — loop paginasi LastEvaluatedKey yang dilakukan dengan benar.
- Pelajari: Pagination in DynamoDB
References
- Paginating table query results in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.