Kunci awal yang diberikan tidak valid

TL;DR — ExclusiveStartKey Anda tidak cocok dengan skema kunci dari apa yang Anda buat paginasinya. Itu harus berisi atribut kunci DynamoDB yang dikembalikan di LastEvaluatedKey — kunci utama lengkap, ditambah kunci indeks saat Anda menanyakan GSI/LSI — dengan nama dan tipe yang sama. Berikan LastEvaluatedKey kembali kata demi kata; dirakit dengan tangan, itulah yang menyebabkan kerusakan ini.

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 skema kunci tabel — atau, untuk kueri indeks, gabungan kunci indeks-plus-tabel yang dibawa LastEvaluatedKey. Atribut yang hilang, atribut tambahan, nama salah, atau tipe salah semuanya gagal sebelum data apa pun dibaca.

Mengapa itu terjadi

  • Membuat kunci secara manual hanya dengan kunci partisi — tabel kunci komposit memerlukan kunci dan pengurutan partisi di kunci awal.
  • Membuat halaman indeks hanya dengan kunci tabelLastEvaluatedKey pada kueri GSI/LSI berisi atribut kunci indeks dan kunci utama tabel; semuanya harus kembali.
  • Ketik atau beri nama drift — kunci diserialkan (JSON, param URL, cache) dan dikembalikan dengan "42" di mana LastEvaluatedKey memiliki nomor, atau dengan bidang yang diganti namanya.
  • Menggunakan kembali kunci di seluruh kueriLastEvaluatedKey dari satu tabel/index diteruskan ke kueri terhadap kueri lainnya, atau ke kueri yang sama setelah asumsi skema kunci diubah.
  • Pembungkus yang memasukkan default — ODM yang mengisi atribut yang dianggapnya termasuk dalam kunci dapat memasukkan kunci awal melewati ukuran skema.

Bagaimana cara memperbaikinya

  1. LastEvaluatedKey pulang pergi tidak tersentuh:

    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. Buat serialisasi secara lossless jika melintasi batas permintaan — saat kursor penomoran halaman berpindah ke browser dan kembali lagi, enkode seluruh objek LastEvaluatedKey (misalnya base64 dari JSON-nya) alih-alih merekonstruksinya dari kolom item, dan pertahankan nomor jenis nomor.

  3. Sertakan setiap atribut kunci untuk penomoran halaman indeks — partisi indekskunci /sort dan kunci partisi tabel/sort, persis seperti yang dikembalikan.

  4. Jangan membuat titik awal — penomoran halaman DynamoDB tidak memiliki offset; jika Anda memerlukan "mulai di dekat X", ungkapkan dalam KeyConditionExpression (sk > :x) daripada ExclusiveStartKey buatan tangan.

  5. Log LastEvaluatedKey mentah jika terjadi kegagalan. Bandingkan byte demi byte dengan permintaan Anda berikutnya yang dikirim — lapisan serialisasi sering kali mengganti nama atau merangkai tipe angka.

Query di DynoTable

Telusuri Query di DynoTable dan periksa kursor LastEvaluatedKey mentah antar halaman — buka tabel dengan ⌘K, jalankan Query, dan salin token pagination kata demi kata ke dalam loop SDK Anda. Panel kueri menunjukkan dengan tepat atribut utama mana yang diharapkan DynamoDB.

Gunakan Pembangun Kueri untuk menghasilkan program Kueri yang diberi nomor halaman dengan penanganan ExclusiveStartKey yang benar. Ganti profil dengan ⌘P; Uji Koneksi pada Pengaturan → Profil. Lihat Menghubungkan ke AWS dan Instal.

Sumber

Kesalahan terkait

Referensi

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

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.