Örneklerle DynamoDB için PartiQL
, DynamoDB için SQL uyumlu bir sorgu dilidir. Anlık işler için ham API'den daha dostçadır — ama aynı motor üzerinde çalışır, dolayısıyla tanıdık sözdiziminin altında aynı anahtar kuralları (ve aynı maliyetler) geçerlidir.
DynamoDB için PartiQL sorgularını nasıl yazarsınız?
PartiQL, DynamoDB'ye dört SQL biçimli ifade verir — SELECT, INSERT, UPDATE
ve DELETE — ExecuteStatement aracılığıyla çalıştırılır. Her biri altta yerel
bir işleme derlenir, bu yüzden üzerinde filtrelemek bir
Query olarak kalırken onu atlamak tam tablo Scan'ine dönüşür. Yazma işlemleri
yine tek bir öğeyi göre hedefler; ilişkisel bir JOIN,
GROUP BY veya toplama (aggregate) yoktur.
SELECT
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#') üzerinde filtreleyin ve bu bir Query'dir. Bölüm anahtarını
atlayın, PartiQL sessizce tam tablo bir Scan çalıştırır —
aynı ayak-silahı, sadece SELECT *'ın arkasına gizlenmiş.
INSERT
INSERT INTO "AppData" VALUE {'PK': 'CUSTOMER#42', 'SK': 'PROFILE', 'plan': 'pro'}UPDATE
UPDATE "AppData" SET "plan" = 'enterprise'
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'PROFILE'DELETE
DELETE FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'ORDER#2026-001'Bir dizini sorgulama
FROM yan tümcesinde dizin adını kullanın:
SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'WHERE ayrıca IN, contains() ve begins_with() destekler:
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']Parametreli ifadeler
Değerleri satır içine gömmek yerine ? yer tutucuları kullanın — bu, tırnak/enjeksiyon
sorunlarını atlatır ve SDK'nın türleri sizin için marshal etmesini sağlar:
SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)ExecuteStatement'a Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] geçirin.
Toplu işlem ve işlemler (transactions)
BatchExecuteStatement— tek bir gidiş-dönüşte 25'e kadar ifade. Daha hızlı, ama öğeler arası atomiklik yok (her biri kendi başına başarılı olur veya başarısız olur).ExecuteTransaction— 100'e kadar ifade, ya hep ya hiç. Birkaç yazmanın birlikte commit edilmesi gerektiğinde kullanın.
PartiQL ayak-silahı
PartiQL SQL'e benzer ama DynamoDB motoru üzerinde çalışır, bu yüzden SQL alışkanlıkları ters teper:
- Tek bir
UPDATE/DELETE, tam göre tek bir öğeyi hedeflemelidir —UPDATE … WHERE status = 'x'gibi bir toplu güncelleme yoktur (bunun yerine bir toplu işlemle döngü kurun). JOINyok,GROUP BYyok, toplama fonksiyonları yok (COUNT/SUM/AVG). Bkz. PartiQL ve SQL.- Bölüm anahtarını atlamak herhangi bir
SELECT'i tam tablo bir Scan'e dönüştürür — yalnızca faturanızla sınırlıdır.
Gerçekten bir JOIN'e, bir GROUP BY'a veya bir toplamaya ihtiyacınız olduğunda,
DynoTable'ın SQL Workbench'i bunları çektiğiniz satırlar üzerinde istemci tarafında
çalıştırır — PartiQL'in konuşamadığı SQL, DynamoDB'nin erişim-deseni kuralları içinde.
PartiQL, altta yatan veri türlerini değiştirmez — değerler yine tel üzerinde DynamoDB-JSON olarak gider ve bunu dönüştürücü ile inceleyebilirsiniz.
Şema-farkındalıklı otomatik tamamlama ile PartiQL ifadelerini çalıştırmak ve sonuçlara sıralanabilir bir tablo görünümünde göz atmak için DynoTable'ı deneyin.