DynamoDB - Bảng truy vấn
Truy vấn bảng chủ yếu yêu cầu chọn bảng, chỉ định khóa phân vùng và thực hiện truy vấn; với các tùy chọn sử dụng các chỉ mục phụ và thực hiện lọc sâu hơn thông qua các hoạt động quét.
Sử dụng Bảng điều khiển GUI, Java hoặc tùy chọn khác để thực hiện tác vụ.
Bảng truy vấn sử dụng Bảng điều khiển GUI
Thực hiện một số truy vấn đơn giản bằng cách sử dụng các bảng đã tạo trước đó. Đầu tiên, hãy mở bảng điều khiển tạihttps://console.aws.amazon.com/dynamodb
Chọn Tables từ ngăn điều hướng và chọn Replytừ danh sách bảng. Sau đó chọnItems để xem dữ liệu đã tải.
Chọn liên kết lọc dữ liệu (“Quét: [Bảng] Trả lời”) bên dưới Create Item cái nút.
Trong màn hình lọc, chọn Truy vấn cho thao tác. Nhập giá trị khóa phân vùng thích hợp và nhấp vàoStart.
Các Reply bảng sau đó trả về các mục phù hợp.
Bảng truy vấn sử dụng Java
Sử dụng phương thức truy vấn trong Java để thực hiện các thao tác truy xuất dữ liệu. Nó yêu cầu chỉ định giá trị khóa phân vùng, với khóa sắp xếp là tùy chọn.
Mã một truy vấn Java bằng cách tạo một querySpec objectmô tả các thông số. Sau đó, truyền đối tượng vào phương thức truy vấn. Chúng tôi sử dụng khóa phân vùng từ các ví dụ trước.
Bạn có thể xem lại ví dụ sau:
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());
}
}
}
Lưu ý rằng truy vấn sử dụng khóa phân vùng, tuy nhiên, các chỉ mục phụ cung cấp một tùy chọn khác cho các truy vấn. Tính linh hoạt của chúng cho phép truy vấn các thuộc tính không phải khóa, một chủ đề sẽ được thảo luận sau trong hướng dẫn này.
Phương pháp quét cũng hỗ trợ các hoạt động truy xuất bằng cách thu thập tất cả dữ liệu bảng. Cácoptional .withFilterExpression ngăn các mục nằm ngoài tiêu chí đã chỉ định xuất hiện trong kết quả.
Phần sau của hướng dẫn này, chúng ta sẽ thảo luận về scanningchi tiết. Bây giờ, hãy xem ví dụ sau:
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());
}
}
}