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 invalid
ValidationException: Exclusive Start Key must have same size as table's key schema

ExclusiveStartKey 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 tabelLastEvaluatedKey pada 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 mana LastEvaluatedKey punya number, atau dengan field yang diganti nama.
  • Menggunakan ulang kunci lintas kueriLastEvaluatedKey dari 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

  1. Round-trip LastEvaluatedKey tanpa 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);
  2. 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.

  3. Sertakan setiap atribut kunci untuk paginasi index — partition/sort key index dan partition/sort key tabel, persis seperti yang dikembalikan.

  4. Jangan mengarang titik awal — paginasi DynamoDB tidak punya offset; jika Anda butuh "mulai dekat X", ekspresikan dalam KeyConditionExpression (sk > :x) alih-alih ExclusiveStartKey buatan 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

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.