Topik ini menjelaskan cara menggunakan Tablestore SDK for Java untuk membaca data dengan nilai kunci primer dalam rentang tertentu dari Tablestore.
Prasyarat
Klien harus diinisialisasi terlebih dahulu. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.
Deskripsi metode
public GetRangeResponse getRange(GetRangeRequest getRangeRequest) throws TableStoreException, ClientExceptionKode contoh
Contoh kode berikut membaca data dari tabel test_table, di mana nilai kunci primer lebih besar dari row1.
public static void getRangeExample(SyncClient client) {
// Konstruksi kondisi query.
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("test_table");
// Tentukan kunci primer awal untuk query.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());
// Tentukan kunci primer akhir. Hasil tidak termasuk kunci primer akhir.
primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
// Tentukan versi yang ingin Anda query.
rangeRowQueryCriteria.setMaxVersions(1);
// Panggil metode getRange untuk query data.
GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);
// Kembalikan hasil.
System.out.println("RequestId: " + getRangeResponse.getRequestId());
System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
for(Row row : getRangeResponse.getRows())
System.out.println(row);
}Jumlah maksimum data yang dapat dipindai dalam satu operasi pembacaan rentang adalah 5.000 baris atau 4 MB. Jika batas tersebut terlampaui, nilai kunci primer untuk operasi baca berikutnya akan dikembalikan. Anda dapat merujuk pada kode berikut untuk query iteratif.
while(true) {
GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria);
GetRangeResponse getRangeResponse = client.getRange(getRangeRequest);
// Kembalikan hasil.
System.out.println("RequestId: " + getRangeResponse.getRequestId());
System.out.println("Read CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + getRangeResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
for(Row row : getRangeResponse.getRows())
System.out.println(row);
System.out.println("Jumlah Baris: " + getRangeResponse.getRows().size());
// Tentukan kunci primer awal untuk operasi baca berikutnya.
if(getRangeResponse.getNextStartPrimaryKey() != null)
rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
else break;
}Anda juga dapat merujuk pada contoh kode berikut untuk mengonfigurasi pengaturan berikut saat melakukan query data:
Tentukan arah pembacaan data.
// Tentukan bahwa data dibaca dalam arah mundur. rangeRowQueryCriteria.setDirection(Direction.BACKWARD); // Tentukan kunci primer awal. Saat Anda membaca data dalam arah mundur, kunci primer awal harus lebih besar dari kunci primer akhir. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX); rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); // Tentukan kunci primer akhir. Hasil tidak termasuk kunci primer akhir. primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")); rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());Tentukan rentang versi data untuk dibaca. Hanya data dalam rentang versi tersebut yang akan dikembalikan.
// Tentukan rentang versi data untuk query menjadi satu hari sebelum waktu saat ini. rangeRowQueryCriteria.setTimeRange(new TimeRange(System.currentTimeMillis() - 86400*1000, System.currentTimeMillis()));Tentukan kolom atribut untuk dibaca.
rangeRowQueryCriteria.addColumnsToGet("col2");Tentukan jumlah maksimum baris yang dikembalikan dalam satu operasi.
rangeRowQueryCriteria.setLimit(10);