The provided starting key is invalid
TL;DR — ExclusiveStartKey'iniz, sayfaladığınız şeyin anahtar şemasıyla eşleşmiyor. DynamoDB'nin LastEvaluatedKey'de döndürdüğü tam anahtar özniteliklerini — tam birincil anahtarı, artı bir GSI/LSI sorguladığınızda indeks anahtarını — aynı adlar ve türlerle içermelidir. LastEvaluatedKey'i birebir geri iletin; onu elle birleştirmek bunun bozulma şeklidir.
Ne anlama gelir
ValidationException: The provided starting key is invalidValidationException: Exclusive Start Key must have same size as table's key schemaExclusiveStartKey, bir Query/Scan'e nereden devam edeceğini söyler. DynamoDB onu tablonun anahtar şemasına — ya da bir indeks sorgusu için, LastEvaluatedKey'in taşıdığı birleşik indeks-artı-tablo anahtarına — karşı doğrular. Eksik öznitelikler, fazladan öznitelikler, yanlış adlar ya da yanlış türler, herhangi bir veri okunmadan önce başarısız olur.
Neden olur
- Anahtarı yalnızca bölüm anahtarıyla elle oluşturmak — bileşik anahtarlı bir tablo, başlangıç anahtarında bölüm ve sıralama anahtarına ihtiyaç duyar.
- Bir indeksi yalnızca tablo anahtarıyla sayfalamak — bir GSI/LSI sorgusundaki
LastEvaluatedKey, hem indeks anahtar özniteliklerini hem de tablonun birincil anahtarını içerir; hepsi geri gelmelidir. - Tür veya ad kayması — anahtar serileştirildi (JSON, URL parametresi, önbellek) ve
LastEvaluatedKey'in bir sayısı olduğu yerde"42"ile ya da yeniden adlandırılmış bir alanla geri geldi. - Bir anahtarı sorgular arasında yeniden kullanmak — bir tablodan/indeksten gelen bir
LastEvaluatedKey'i başka birine karşı bir sorguya ya da anahtar şeması varsayımı değiştikten sonra aynı sorguya iletmek. - Varsayılan enjekte eden bir sarmalayıcı — anahtara ait olduğunu düşündüğü öznitelikleri dolduran bir ODM, başlangıç anahtarını şema boyutunun ötesinde doldurabilir.
Nasıl düzeltilir
LastEvaluatedKey'i dokunmadan gidip-getirin: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);Bir istek sınırını geçiyorsa onu kayıpsız serileştirin — sayfalama imleci bir tarayıcıya gidip döndüğünde, onu öğe alanlarından yeniden oluşturmak yerine tüm
LastEvaluatedKeynesnesini kodlayın (örneğin JSON'unun base64'ü) ve sayı türlerini sayı tutun.İndeks sayfalaması için her anahtar özniteliğini dahil edin — indeks bölüm/sıralama anahtarı ve tablo bölüm/sıralama anahtarı, tam olarak döndürüldüğü gibi.
Bir başlangıç noktası uydurmayın — DynamoDB sayfalamasının ofseti yoktur; "X'e yakın başla" gerekiyorsa, onu elle yapılmış bir
ExclusiveStartKeyyerineKeyConditionExpression'da (sk > :x) ifade edin.
LastEvaluatedKey'in tablonuz ya da indeksiniz için gerçekte ne içerdiğini incelemek tahmin işini ortadan kaldırır — DynoTable masaüstü uygulaması sorgular arasında sayfalar ve çıplak imleci gösterir ve DynamoDB Expression Builder sorgu isteğini onun etrafında oluşturur.
İlgili hatalar
- The provided key element does not match the schema — bir
GetItem/yazma anahtarındaki aynı şema uyuşmazlığı. - Query key condition not supported
- Kod örneği: Get all items in Node.js · Python (boto3) ile — doğru yapılmış LastEvaluatedKey sayfalama döngüsü.
- Öğrenin: Pagination in DynamoDB
References
- Paginating table query results in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.