DynamoDB null değer tutabilir mi?

Evet. DynamoDB'nin, bilinmeyen ya da tanımsız durumda olan bir özniteliği temsil eden özel bir NULL türü vardır. Ayrıca anahtar olmayan öznitelikler için boş dizelere ve boş ikili değerlere, artı boş listelere ve eşlemelere izin verir. Boş kümelere (dize, sayı ya da ikili) ise izin vermez; onlar bir ValidationException ile reddedilir.

NULL türü

NULL, {"NULL": true} olarak yazılan gerçek bir öznitelik türüdür. Bir alanın var olduğunu ama değeri olmadığını kaydetmek istediğinizde kullanın — özniteliği tümüyle atlamaktan farklıdır.

Hangi boşluklara izin verilir

  • Boş dize / boş ikili — anahtar olmayan özniteliklerde ve listelerin ile eşlemelerin içinde izinlidir.
  • Boş liste / boş eşleme — izinlidir.

Neye izin verilmez

  • Boş kümeler (SS, NS, BS) — bir ValidationException ile reddedilir.
  • Bir anahtar özniteliğinde boş dize ya da ikili — anahtar değerlerinin uzunluğu sıfırdan büyük olmalıdır.

Reddetmeler neye benziyor

Tek bir PutItem, aynı öğede {"NULL": true}, {"S": ""}, {"L": []}, {"M": {}} ve sıfır baytlık bir {"B": ""} kabul etti ve GetItem beşini de değişmeden döndürdü. Şu üç yazma sağ çıkmadı. Mesajlar motorun kendi mesajlarıdır; yalnızca satıra sığsın diye kaydırıldı, yazım hatası dahil başka hiçbir yere dokunulmadı:

tags: {"SS": []}
  ValidationException: One or more parameter values were invalid:
  An string set  may not be empty

pk: {"S": ""}
  ValidationException: One or more parameter values are not valid.
  The AttributeValue for a key attribute cannot contain an empty
  string value. Key: pk

gsiKey: {"NULL": true}
  ValidationException: Invalid attribute value type

Üçüncüsü tuzaktır. Bir öğeyi bir seyrek indeksin dışında tutmak için bir indeks anahtarını null yapamazsınız: yazmanın tamamı reddedilir, dolayısıyla bir öğeyi indekslenmemiş bırakmanın tek yolu özniteliği atlamaktır.

NULL, var sayılır

Her filtre NULL bir özniteliği orada sayar. Yukarıdaki öğeyi attribute_exists(explicitNull) ile taramak onu döndürdü; :n {"NULL": true} olarak ayarlanmış explicitNull = :n ile attribute_type(explicitNull, "NULL") de öyle. "Açıkça null" ile "saklanmamış"ı yalnızca attribute_not_exists ayırır.

Modelleme ipucu

Bir özniteliği tümüyle atlamak, çoğu zaman NULL saklamaktan daha temizdir ve seyrek indeksleri mümkün kılar. Seçiminizi, modelinizde "yok" ile "açıkça null"un farklı şeyler ifade edip etmediğine göre yapın.

NULL çevresinde filtre kurmak

Filtre ifadeleri NULL'ı var kabul eder. Açık bir null taşıyan öğeleri bulmak için attribute_type(attr, 'NULL') kullanın ya da {"NULL": true} değerli bir :n ile karşılaştırın. Onları dışlamak için modelinize göre attribute_not_exists kullanın ya da attribute_type(attr, 'S') gibi somut bir tür sınayın.

İfade oluşturucu, attribute_exists ve attribute_not_exists filtreleri için ad/değer haritalarını üretir; böylece bir Scan'in parasını ödemeden önce onu gözden geçirebilirsiniz.

DynoTable'da: öğe düzenleyici NULL attribute'ları üç JSON modunun hepsinde yazar. Bir satır açın, bir alanı null yapın ve commit edilmeden önce değişikliği incelenmek üzere hazırlayın. Bkz. Öğeleri düzenleme.

Daha derine inin

DynamoDB veri türlerini ve seyrek indeksleri okuyun. NULL dahil öznitelikleri doğrudan düzenlemek için DynoTable'ı indirin.

Kaynaklar

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

2026-07-28 tarihinde @aws-sdk/client-dynamodb 3.1095.0 üzerinden DynamoDB Local 3.3.0'a karşı yeniden üretildi — yukarıdaki hata dizeleri ve filtre sonuçları birebir motor çıktısıdır. Canlı hizmet bir ValidationException'ı yerel motordan farklı ifade edebilir.

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.