DynamoDB - ตารางแบบสอบถาม
การสืบค้นตารางต้องเลือกตารางเป็นหลักโดยระบุคีย์พาร์ติชันและดำเนินการสืบค้น ด้วยตัวเลือกในการใช้ดัชนีทุติยภูมิและการกรองที่ลึกขึ้นผ่านการสแกน
ใช้ GUI Console, Java หรือตัวเลือกอื่นในการทำงาน
ตารางแบบสอบถามโดยใช้ GUI Console
ดำเนินการสืบค้นง่ายๆโดยใช้ตารางที่สร้างไว้ก่อนหน้านี้ ขั้นแรกให้เปิดคอนโซลที่https://console.aws.amazon.com/dynamodb
เลือก Tables จากบานหน้าต่างนำทางแล้วเลือก Replyจากรายการตาราง จากนั้นเลือกไฟล์Items เพื่อดูข้อมูลที่โหลด
เลือกลิงก์การกรองข้อมูล (“ Scan: [Table] Reply”) ที่อยู่ด้านล่าง Create Item ปุ่ม.
ในหน้าจอการกรองให้เลือกแบบสอบถามสำหรับการดำเนินการ ป้อนค่าคีย์พาร์ติชันที่เหมาะสมแล้วคลิกStart.
Reply จากนั้นส่งคืนรายการที่ตรงกัน
ตารางแบบสอบถามโดยใช้ Java
ใช้วิธีการสืบค้นใน Java เพื่อดำเนินการดึงข้อมูล ต้องระบุค่าคีย์พาร์ติชันโดยมีคีย์การเรียงลำดับเป็นทางเลือก
เขียนโค้ดคิวรี Java โดยสร้างไฟล์ querySpec objectอธิบายพารามิเตอร์ จากนั้นส่งวัตถุไปยังวิธีการสืบค้น เราใช้คีย์พาร์ติชันจากตัวอย่างก่อนหน้านี้
คุณสามารถดูตัวอย่างต่อไปนี้ -
import java.util.HashMap;
import java.util.Iterator;
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.QueryOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
public class ProductsQuery {
public static void main(String[] args) throws Exception {
AmazonDynamoDBClient client = new AmazonDynamoDBClient()
.withEndpoint("http://localhost:8000");
DynamoDB dynamoDB = new DynamoDB(client);
Table table = dynamoDB.getTable("Products");
HashMap<String, String> nameMap = new HashMap<String, String>();
nameMap.put("#ID", "ID");
HashMap<String, Object> valueMap = new HashMap<String, Object>();
valueMap.put(":xxx", 122);
QuerySpec querySpec = new QuerySpec()
.withKeyConditionExpression("#ID = :xxx")
.withNameMap(new NameMap().with("#ID", "ID"))
.withValueMap(valueMap);
ItemCollection<QueryOutcome> items = null;
Iterator<Item> iterator = null;
Item item = null;
try {
System.out.println("Product with the ID 122");
items = table.query(querySpec);
iterator = items.iterator();
while (iterator.hasNext()) {
item = iterator.next();
System.out.println(item.getNumber("ID") + ": "
+ item.getString("Nomenclature"));
}
} catch (Exception e) {
System.err.println("Cannot find products with the ID number 122");
System.err.println(e.getMessage());
}
}
}
โปรดทราบว่าแบบสอบถามใช้คีย์พาร์ติชันอย่างไรก็ตามดัชนีรองมีตัวเลือกอื่นสำหรับคิวรี ความยืดหยุ่นช่วยให้สามารถสืบค้นแอตทริบิวต์ที่ไม่ใช่คีย์ซึ่งเป็นหัวข้อที่จะกล่าวถึงในบทช่วยสอนนี้ในภายหลัง
วิธีการสแกนยังสนับสนุนการดำเนินการดึงข้อมูลโดยการรวบรวมข้อมูลตารางทั้งหมด optional .withFilterExpression ป้องกันไม่ให้รายการที่อยู่นอกเกณฑ์ที่ระบุปรากฏในผลลัพธ์
ต่อไปในบทช่วยสอนนี้เราจะพูดถึง scanningในรายละเอียด. ตอนนี้ดูตัวอย่างต่อไปนี้ -
import java.util.Iterator;
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.ScanOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.ScanSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
public class ProductsScan {
public static void main(String[] args) throws Exception {
AmazonDynamoDBClient client = new AmazonDynamoDBClient()
.withEndpoint("http://localhost:8000");
DynamoDB dynamoDB = new DynamoDB(client);
Table table = dynamoDB.getTable("Products");
ScanSpec scanSpec = new ScanSpec()
.withProjectionExpression("#ID, Nomenclature , stat.sales")
.withFilterExpression("#ID between :start_id and :end_id")
.withNameMap(new NameMap().with("#ID", "ID"))
.withValueMap(new ValueMap().withNumber(":start_id", 120)
.withNumber(":end_id", 129));
try {
ItemCollection<ScanOutcome> items = table.scan(scanSpec);
Iterator<Item> iter = items.iterator();
while (iter.hasNext()) {
Item item = iter.next();
System.out.println(item.toString());
}
} catch (Exception e) {
System.err.println("Cannot perform a table scan:");
System.err.println(e.getMessage());
}
}
}