DynamoDB İfade Oluşturucu
Bir işlem seçin, isteği görsel olarak oluşturun ve doğru, ayrılmış sözcüklere karşı güvenli bir ifadeyi — ExpressionAttributeNames ve Values ile birlikte — AWS SDK v3, CLI, boto3 veya PartiQL olarak kopyalayın.
DynamoDB ifadelerini elle yazmak neden hataya açıktır
Bir DynamoDB isteği nadiren bariz kısımda başarısız olur. status ayrılmış bir sözcük olduğu ve bir #-takma ada ihtiyaç duyduğu için, sayısal bir id string olarak gönderildiği ve hiçbir şeyle eşleşmediği için ya da bir FilterExpression ile bir ConditionExpression aynı :v0 yer tutucusunu tekrar kullandığı için başarısız olur. Her biri, çalışan ama yanlış satırları döndüren bir istek üreten küçük bir hatadır — hata ayıklanması en zor tür.
Bu oluşturucu, isteğin tamamını türlü bir modelden kurar. Her attribute adı takma adlandırılır, her değer açık bir DynamoDB türü taşır ve anahtar, filtre, koşul ve güncelleme yer tutucuları ayrı ad alanlarında bulunur, böylece çakışmalar yapısı gereği imkânsızdır. Çıktı tür etiketlerinden oluşturulur, metninizden tahmin edilmez — bir sayı sayı olarak, base64 bir string ise binary olarak kalır.
Güncelleme ifadeleri ve koşullu yazma işlemleri de aynı şekilde ele alınır: atomik sayaçlar, if_not_exists, list_append, bir list dizini üzerinde REMOVE, set'ler üzerinde ADD/DELETE ve iyimser kilitleme koşullarının tümü tek bir doğru UpdateExpression ve ConditionExpression içinde birleşir. PartiQL sekmesi dürüsttür — bir ilkelin PartiQL biçimi olmadığında, sessizce yanlış davranan bir ifade üretmek yerine hangisi olduğunu söyler.
Önce bir Query ile bir Scan arasında mı seçim yapıyorsunuz? Query ve Scan farkı açıklar ve PartiQL örnekleri SQL benzeri sözdizimini derinlemesine ele alır.
Sıkça sorulan sorular
ExpressionAttributeName nedir ve neden # ve : önekleri var?
DynamoDB ifadeleri, ayrılmış bir sözcük olan (name, status veya size gibi) bir attribute adına doğrudan başvuramaz ve bir değer yer tutucusu, gerçek veriyi ifade dizesinin dışında tutar. Bu yüzden her attribute adı ExpressionAttributeNames içinde bir #-yer tutucusuyla, her değer de ExpressionAttributeValues içinde bir :-yer tutucusuyla takma adlandırılır. Bu oluşturucu bu haritaları sizin için üretir, böylece ayrılmış bir sözcük isteğinizi asla bozmaz.
Neden her değer için bir tür (S, N, B…) seçmek zorundayım?
DynamoDB, attribute düzeyinde türlüdür: 5 sayısı { "N": "5" }, "5" string'i ise { "S": "5" }'tir — farklı item'larla eşleşen farklı değerler. Bir metin girişi bunları ayırt edemez, bu yüzden oluşturucu her değeri etiketlemenizi ister. Üretilen SDK, CLI, boto3 ve PartiQL çıktısı bu etiketten oluşturulur, asla metinden tahmin edilmez, böylece sayısal bir id sayı olarak, base64 bir blob ise binary olarak kalır.
Güncelleme ifadeleri ve koşullu yazma işlemleri oluşturabilir mi?
Evet. Güncelleme; SET (if_not_exists, atomik +/- sayaçları ve list_append dahil), REMOVE (#a[2] gibi bir list dizini dahil), ADD (number veya set) ve DELETE (set üyeleri) işlemlerini kapsar — hepsi tek bir UpdateExpression içinde birleştirilir. Koşullu yazma işlemleri, iyimser kilitleme için Update, Put veya Delete'e bir ConditionExpression ekler (attribute_not_exists, bir sürüm kontrolü vb.). Anahtar koşulları ve değer koşulları ayrı yer tutucu ad alanları kullanır, böylece asla çakışmazlar.
PartiQL neden bazen “ifade edilemez”?
PartiQL çoğu okuma ve yazma işlemini kapsar, ancak birkaç DynamoDB ilkelinin PartiQL biçimi yoktur: koşullu bir INSERT, set türündeki ADD/DELETE güncelleme eylemleri ve size(), list_append ve if_not_exists gibi işlevler. İsteğiniz bunlardan birini kullandığında, PartiQL sekmesi sessizce yanlış işi yapacak bir ifade üretmek yerine hangi özelliğin ifade edilemediğini tam olarak söyler — bunlar için SDK, CLI veya boto3 çıktısını kullanın.
Verilerim tarayıcıdan ayrılıyor mu?
Hayır. Oluşturucu tamamen istemci tarafında çalışır — ifadeleri ve kod parçacıklarını tarayıcınızda üretir ve yazdığınız hiçbir şey bir sunucuya gönderilmez. URL'nin “Bağlantıyı kopyala” özelliği isteğinizi bağlantının kendisine serileştirir, böylece paylaşabilir veya yer imine ekleyebilirsiniz, ancak bu sizin elinizde kalır.