Ukuran ekspresi telah melampaui ukuran maksimum yang diperbolehkan

TL;DR — DynamoDB membatasi string ekspresi tunggal apa pun hingga 4 KB (parameter ekspresi: UpdateExpression, ConditionExpression, FilterExpression, ProjectionExpression). Anda sudah melewatinya — biasanya pembaruan yang dibuat secara otomatis pada item besar, atau filter IN (…) / OR raksasa. Kecilkan ekspresinya, bukan itemnya.

Apa artinya

ValidationException: 1 validation error detected: Invalid ConditionExpression: Expression size has exceeded the maximum allowed size; expression size: 27785

Batas 4 KB terletak pada panjang string ekspresi itu sendiri, tidak bergantung pada ukuran item 400 KB. Item yang berukuran di bawah 400 KB masih dapat melebihi anggaran ekspresi jika SDK membuat satu klausa per atribut (nama placeholder yang panjang bertambah dengan cepat). Ini adalah HTTP 400 ValidationExceptiontidak dapat dicoba ulang tanpa mengubah ekspresi.

Anggaran ekspresi memiliki saudara kandung yang dapat Anda tekan terlebih dahulu: setiap placeholder #name/:value dibatasi pada 255 byte, gabungan ExpressionAttributeNames + ExpressionAttributeValues pada 2 MB, satu ekspresi pada 300 operator/functions, dan pembanding IN pada 100 operan.

Mengapa itu terjadi

  • UpdateExpression yang dibuat secara otomatis pada item yang luas — ORM/mapper memancarkan SET #a0 = :v0, #a1 = :v1, … untuk setiap atribut, dan nama placeholder + pemisah melintasi 4 KB.
  • FilterExpression besarattr IN (:0, :1, …) panjang atau rangkaian kondisi OR.
  • Penulisan bersyarat massal dengan banyak attribute_not_exists/comparisons dalam satu ConditionExpression.
  • Pengeditan konsol item besar — menyimpan item besar akan memancarkan kembali ekspresi update/condition yang besar.

Bagaimana cara memperbaikinya

  1. Hanya perbarui apa yang berubah. Bangun UpdateExpression dari perbedaan, bukan keseluruhan item — sebagian besar pembaruan menyentuh beberapa atribut.
  2. Mempersingkat nama placeholder. #a/:v mengalahkan nama deskriptif yang panjang; panjang yang diperhitungkan adalah string ekspresi, jadi nama terser membeli ruang kepala yang sebenarnya.
  3. Pisahkan filter raksasa menjadi kueri yang lebih sempit, atau atur ulang sehingga filter tidak diperlukan (key/index yang lebih baik berarti kondisi OR yang lebih sedikit).
  4. Pisahkan satu penulisan berukuran besar menjadi beberapa pembaruan yang lebih kecil, atau buat model item sehingga satu perubahan logis tidak menulis ulang semuanya.
  5. Kurangi penumpukan — jalur peta yang sangat bersarang meningkatkan panjang ekspresi; ratakan sedapat mungkin.
  6. Batas daftar IN pada 100 operan. Itu adalah batas terdokumentasi terpisah yang bisa gagal sebelum batas string 4 KB.

Dari DynoTable

DynoTable membuat ekspresi pembaruan dari bidang yang sebenarnya Anda ubah — tidak semua atribut pada item — menjaga ekspresi tetap di bawah 4 KB. Buka item dengan ⌘K, edit bidang tertentu, dan salin panjang string ekspresi yang dihasilkan.

Gunakan Pembuat Ekspresi untuk melihat ukuran ekspresi saat Anda menambahkan klausa. Kalkulator ukuran item membantu saat item berukuran besar mendorong pembaruan yang dibuat secara otomatis. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 13-07-2026 terhadap 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.