DynamoDB - Membuat kueri
Kueri menemukan item atau indeks sekunder melalui kunci utama. Melakukan kueri memerlukan kunci partisi dan nilai tertentu, atau kunci dan nilai sortir; dengan opsi untuk memfilter dengan perbandingan. Perilaku default kueri terdiri dari mengembalikan setiap atribut untuk item yang terkait dengan kunci utama yang diberikan. Namun, Anda dapat menentukan atribut yang diinginkan denganProjectionExpression parameter.
Kueri menggunakan KeyConditionExpressionparameter untuk memilih item, yang memerlukan pemberian nama dan nilai kunci partisi dalam bentuk kondisi kesetaraan. Anda juga memiliki opsi untuk memberikan ketentuan tambahan untuk kunci sortir yang ada.
Beberapa contoh kondisi kunci pengurutan adalah -
Sr Tidak | Deskripsi kondisi |
---|---|
1 | x = y Ini dievaluasi menjadi benar jika atribut x sama dengan y. |
2 | x < y Ini dievaluasi ke true jika x kurang dari y. |
3 | x <= y Ini dievaluasi menjadi benar jika x kurang dari atau sama dengan y. |
4 | x > y Ini dievaluasi menjadi benar jika x lebih besar dari y. |
5 | x >= y Ini dievaluasi menjadi benar jika x lebih besar dari atau sama dengan y. |
6 | x BETWEEN y AND z Ini dievaluasi menjadi benar jika x keduanya> = y, dan <= z. |
DynamoDB juga mendukung fungsi berikut: begins_with (x, substr)
Ini dievaluasi menjadi true jika atribut x dimulai dengan string yang ditentukan.
Kondisi berikut harus sesuai dengan persyaratan tertentu -
Nama atribut harus dimulai dengan karakter dalam kumpulan az atau AZ.
Karakter kedua dari nama atribut harus berada dalam kumpulan az, AZ, atau 0-9.
Nama atribut tidak boleh menggunakan kata-kata khusus.
Nama atribut yang tidak sesuai dengan batasan di atas dapat menentukan placeholder.
Kueri memproses dengan melakukan pengambilan dalam urutan kunci sortir, dan menggunakan kondisi dan ekspresi filter apa pun yang ada. Kueri selalu mengembalikan set hasil, dan jika tidak ada yang cocok, ia mengembalikan yang kosong.
Hasilnya selalu dikembalikan dalam urutan kunci sortir, dan urutan berdasarkan tipe data dengan default yang dapat diubah sebagai urutan menaik.
Membuat kueri dengan Java
Kueri di Java memungkinkan Anda membuat kueri tabel dan indeks sekunder. Mereka memerlukan spesifikasi kunci partisi dan kondisi kesetaraan, dengan opsi untuk menentukan kunci dan kondisi sortir.
Langkah-langkah umum yang diperlukan untuk kueri di Java termasuk membuat instance kelas DynamoDB, instance kelas Tabel untuk tabel target, dan memanggil metode kueri dari instance Tabel untuk menerima objek kueri.
Tanggapan atas kueri berisi ItemCollection objek yang menyediakan semua item yang dikembalikan.
Contoh berikut menunjukkan kueri mendetail -
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());
}
Metode kueri mendukung berbagai macam parameter opsional. Contoh berikut menunjukkan cara menggunakan parameter ini -
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());
}
Anda juga dapat meninjau contoh yang lebih besar berikut ini.
Note- Program berikut dapat mengasumsikan sumber data yang dibuat sebelumnya. Sebelum mencoba untuk mengeksekusi, dapatkan pustaka pendukung dan buat sumber data yang diperlukan (tabel dengan karakteristik yang diperlukan, atau sumber referensi lainnya).
Contoh ini juga menggunakan Eclipse IDE, file kredensial AWS, dan AWS Toolkit dalam Proyek Java Eclipse AWS.
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());
}
}
}