ValidationException: ExpressionAttributeValues contains invalid value

TL;DR — Sebuah nilai dalam ExpressionAttributeValues kosong, memiliki tipe yang tidak didukung, atau :placeholder yang digunakan dalam expression Anda tidak pernah didefinisikan. Periksa setiap :value hadir dan tidak kosong.

Apa artinya

Pesan umum:

ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :s
ValidationException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:x}
ValidationException: An expression attribute value used in expression is not defined; attribute value: :v

Mengapa itu terjadi

  • String kosong / binary kosong — secara historis DynamoDB menolak "". String kosong sekarang diizinkan untuk atribut non-kunci (dan List/Map kosong baik-baik saja), tetapi nilai kosong pada atribut kunci dan Set kosong masih tidak valid.
  • Placeholder tidak terdefinisi — expression Anda merujuk :v tetapi ExpressionAttributeValues tidak punya :v.
  • Placeholder tidak digunakan — Anda mendefinisikan :x tetapi tidak ada expression yang menggunakannya (DynamoDB menolak seluruh permintaan).
  • Tipe salah — meneruskan objek JS mentah/undefined/NaN, atau (dengan klien low-level) pembungkus {S}/{N} yang salah.
  • Set kosong diteruskan ke operasi ADD/DELETE — klausa itu mengambil operand set (atau, untuk ADD, number), dan set tidak pernah bisa kosong.

Bagaimana cara memperbaikinya

  1. Setiap :value dalam expression harus didefinisikan di ExpressionAttributeValues, dan setiap nilai yang didefinisikan harus digunakan — jaga keduanya selaras persis.
  2. Jaga terhadap kosong/undefined. Jangan teruskan :v ketika sumbernya undefined; hapus klausa sebagai gantinya. Untuk set, pastikan setidaknya satu anggota.
  3. Gunakan Document Client (@aws-sdk/lib-dynamodb) agar nilai JS native di-marshal untuk Anda — ini menghapus sebagian besar kesalahan pembungkus tipe.

Contoh

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';

const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));

const email = getEmail(); // could be undefined
const names = {'#e': 'email'};
const values = {':e': email};

if (email == null) throw new Error('email required'); // don't send :e = undefined

await doc.send(
  new UpdateCommand({
    TableName: 'Users',
    Key: {pk: 'USER#1'},
    UpdateExpression: 'SET #e = :e',
    ExpressionAttributeNames: names,
    ExpressionAttributeValues: values
  })
);

Jalur di DynoTable

Editor update DynoTable mengikat nilai sambil Anda mengetik dan menolak placeholder kosong sebelum permintaan meninggalkan mesin Anda. Buka item dengan ⌘K, sunting sebuah field, dan periksa map ExpressionAttributeValues yang dihasilkan di pratinjau permintaan — ketidakcocokan langsung terlihat, bukan muncul sebagai 400 di CloudWatch.

Untuk kode SDK yang tidak bisa Anda jalankan inline, tempel ekspresinya ke Expression Builder lalu bandingkan map :value-nya dengan milik Anda. Ganti profil dengan ⌘P untuk menguji pada tabel yang sama dengan yang melempar kesalahan; Test Connection di Pengaturan → Profil memastikan kredensial dan region. Penyiapan: Menghubungkan ke AWS, Instal. Set kosong dan nilai JS undefined adalah penyebab paling umum — jaga keduanya sebelum panggilan meninggalkan proses Anda.

Sumber

Kesalahan terkait

Referensi

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