Nesting Levels have exceeded supported limits

TL;DR — DynamoDB, belge türlerini (map M ve list L) birbirinin içine 32 seviye derinliğe kadar yuvalamanıza olanak tanır. Daha derine giden bir yapı, bir ValidationException ile reddedilir. Veri modelini düzleştirin, derin dalı ayrı bir öğeye bölün ya da aşırı derin alt ağacı tek bir serileştirilmiş dize olarak saklayın.

Ne anlama gelir

ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits: Attributes in the item have nested levels beyond supported limit

(AWS'nin bu doğrulama hatası için belgelediği ifade budur; tam ifade işleme göre biraz değişebilir.) Bir öznitelik değeri bir skaler ya da kendisi daha fazla değer içeren bir map/list olabilir — ve DynamoDB bu yuvalanmayı 32 seviyeyle sınırlar. Aynı tavan ifadeler için de geçerlidir: bir belge yolunun maksimum derinliği 32'dir, dolayısıyla ondan daha derine de başvuramazsınız. Sınır, öznitelik sayısını değil, map'lerin ve listelerin derinliğini sayar. Onu aşmak, doğrulama zamanında yakalanan ve belge yeniden yapılandırılana kadar yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.

Neden olur

  • Derin özyinelemeli veri — 32 seviyenin ötesinde map içinde map olarak serileştirilmiş ağaç/grafik yapıları (kuruluş şemaları, yorum dizileri, yuvalanmış kategoriler).
  • Genel bir serileştirici — keyfi yuvalanmış JSON'u bir derinlik koruması olmadan doğrudan DynamoDB belge türlerine marshal eden kod.
  • Kazara kendini yuvalama — bir öğeyi tekrar tekrar kendi içine saran bir hata.
  • Yuvalanması hiç sınırlanmamış bir belge veritabanından taşınmış belgeler.

Nasıl düzeltilir

  1. Modeli düzleştirin — derin alt yapıları giderek daha derin map'ler yerine üst seviye özniteliklere ya da bir bileşik anahtar düzenine kaldırın.
  2. Birden çok öğeye bölün — derin dalı aynı bölüm anahtarı altında ayrı öğeler olarak modelleyin (tek tablo bitişiklik deseni).
  3. Derin alt ağacı serileştirin — içine sorgu yapmanız gerekmiyorsa, aşırı derin kısmı tek bir JSON dize özniteliği olarak saklayın (DynamoDB'ye opak, dolayısıyla iç derinliği artık sayılmaz).
  4. Marshal katmanınıza bir derinlik koruması ekleyin, böylece belgeler sessizce sınırı geçemez.

DynoTable’da ölç

DynoTable'deki iç içe geçmiş nitelikleri yazmadan önce inceleyin; ⌘K ile bir öğe açın ve yapının ne kadar derin çalıştığını görmek için JSON görüntüleyicideki harita/liste alanlarını genişletin. Aşamalandırma (⌘S), işleme koymadan önce bir yerleştirme/güncellemenin önizlemesini görmenizi ve derinlik hatalarını yakalamanızı sağlar.

Derinlik kontrollerinin yanında item sana calculator tuşunu kullanın; derin yuvalama genellikle öğeleri 400 KB sınırına doğru iter. Yerel ve AWS karşılaştırması yaparken profilleri ⌘P ile değiştirin. Kurulum: Connect to AWS, Install.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.