DynamoDB - Sorgulama
Sorgular, birincil anahtarlar aracılığıyla öğeleri veya ikincil dizinleri bulur. Bir sorgu gerçekleştirmek için bir bölüm anahtarı ve belirli bir değer veya bir sıralama anahtarı ve değer gerekir; karşılaştırmalarla filtreleme seçeneği ile. Bir sorgunun varsayılan davranışı, sağlanan birincil anahtarla ilişkili öğeler için her özniteliğin döndürülmesinden oluşur. Bununla birlikte, istediğiniz nitelikleri ile belirtebilirsiniz.ProjectionExpression parametre.
Sorgu, KeyConditionExpressionbölüm anahtarı adı ve değerinin bir eşitlik koşulu biçiminde sağlanmasını gerektiren öğeleri seçmek için parametreler. Ayrıca, mevcut herhangi bir sıralama anahtarı için ek bir koşul sağlama seçeneğiniz de vardır.
Sıralama anahtarı koşullarının birkaç örneği:
Sr.No | Durum açıklaması |
---|---|
1 | x = y X özniteliği y'ye eşitse doğru olarak değerlendirilir. |
2 | x < y X, y'den küçükse doğru olarak değerlendirilir. |
3 | x <= y X, y'den küçük veya y'ye eşitse doğru olarak değerlendirilir. |
4 | x > y X, y'den büyükse doğru olarak değerlendirilir. |
5 | x >= y X, y'den büyük veya y'ye eşitse doğru olarak değerlendirilir. |
6 | x BETWEEN y AND z X'in hem> = y hem de <= z olması doğru olarak değerlendirilir. |
DynamoDB ayrıca aşağıdaki işlevleri de destekler: begins_with (x, substr)
X özelliği belirtilen dizeyle başlıyorsa doğru olarak değerlendirilir.
Aşağıdaki koşullar belirli gereksinimlere uymalıdır -
Öznitelik adları, az veya AZ kümesi içindeki bir karakterle başlamalıdır.
Bir öznitelik adının ikinci karakteri az, AZ veya 0-9 kümesinde yer almalıdır.
Öznitelik adları ayrılmış sözcükler kullanamaz.
Yukarıdaki kısıtlamalara uymayan nitelik adları bir yer tutucu tanımlayabilir.
Sorgu, sıralama anahtarı sırasına göre alımlar gerçekleştirerek ve mevcut herhangi bir koşul ve filtre ifadesini kullanarak işler. Sorgular her zaman bir sonuç kümesi döndürür ve eşleşme olmadığında boş bir tane döndürür.
Sonuçlar her zaman sıralama anahtarı sırasına göre ve veri türüne dayalı sıraya göre, değiştirilebilir öntanımlı olarak artan sıra olarak geri döner.
Java ile sorgulama
Java'daki sorgular, tabloları ve ikincil dizinleri sorgulamanıza izin verir. Sıralama anahtarlarını ve koşulları belirleme seçeneğiyle birlikte bölüm anahtarlarının ve eşitlik koşullarının belirtilmesini gerektirirler.
Java'da bir sorgu için gerekli genel adımlar, bir DynamoDB sınıfı örneği, hedef tablo için Tablo sınıfı örneği ve sorgu nesnesini almak için Tablo örneğinin sorgu yöntemini çağırmayı içerir.
Sorguya verilen yanıt bir ItemCollection tüm iade edilen ürünleri sağlayan nesne.
Aşağıdaki örnek ayrıntılı sorgulamayı gösterir -
DynamoDB dynamoDB = new DynamoDB (
new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
Table table = dynamoDB.getTable("Response");
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("ID = :nn")
.withValueMap(new ValueMap()
.withString(":nn", "Product Line 1#P1 Thread 1"));
ItemCollection<QueryOutcome> items = table.query(spec);
Iterator<Item> iterator = items.iterator();
Item item = null;
while (iterator.hasNext()) {
item = iterator.next();
System.out.println(item.toJSONPretty());
}
Sorgu yöntemi, çok çeşitli isteğe bağlı parametreleri destekler. Aşağıdaki örnek, bu parametrelerin nasıl kullanılacağını gösterir -
Table table = dynamoDB.getTable("Response");
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("ID = :nn and ResponseTM > :nn_responseTM")
.withFilterExpression("Author = :nn_author")
.withValueMap(new ValueMap()
.withString(":nn", "Product Line 1#P1 Thread 1")
.withString(":nn_responseTM", twoWeeksAgoStr)
.withString(":nn_author", "Member 123"))
.withConsistentRead(true);
ItemCollection<QueryOutcome> items = table.query(spec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}
Aşağıdaki daha büyük örneği de inceleyebilirsiniz.
Note- Aşağıdaki program önceden oluşturulmuş bir veri kaynağını varsayabilir. Yürütme girişiminde bulunmadan önce, destekleyici kitaplıklar edinin ve gerekli veri kaynaklarını oluşturun (gerekli özelliklere sahip tablolar veya diğer başvurulan kaynaklar).
Bu örnekte ayrıca Eclipse IDE, bir AWS kimlik bilgileri dosyası ve bir Eclipse AWS Java Projesi içindeki AWS Toolkit kullanılmaktadır.
package com.amazonaws.codesamples.document;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.Page;
import com.amazonaws.services.dynamodbv2.document.QueryOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
public class QueryOpSample {
static DynamoDB dynamoDB = new DynamoDB(
new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
static String tableName = "Reply";
public static void main(String[] args) throws Exception {
String forumName = "PolyBlaster";
String threadSubject = "PolyBlaster Thread 1";
getThreadReplies(forumName, threadSubject);
}
private static void getThreadReplies(String forumName, String threadSubject) {
Table table = dynamoDB.getTable(tableName);
String replyId = forumName + "#" + threadSubject;
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("Id = :v_id")
.withValueMap(new ValueMap()
.withString(":v_id", replyId));
ItemCollection<QueryOutcome> items = table.query(spec);
System.out.println("\ngetThreadReplies results:");
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}
}
}