Gunakan Tablestore SDK for Java untuk membaca baris berurutan dari tabel model Kolom Lebar dalam rentang kunci primer.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi
Panggil getRange untuk membaca baris secara berurutan dalam urutan maju atau mundur dalam rentang kunci primer. Anda dapat menentukan kolom yang dikembalikan, rentang versi data, serta kondisi filter.
public GetRangeResponse getRange(GetRangeRequest getRangeRequest) throws TableStoreException, ClientException
Satu kali pembacaan rentang mengembalikan maksimal 5.000 baris atau data sebesar 4 MB. Jika salah satu batas tercapai, gunakan nextStartPrimaryKey dalam respons untuk melanjutkan pembacaan.
Contoh berikut melakukan pemindaian maju pada get_range_demo, membaca semua baris dengan kunci primer lebih besar dari atau sama dengan row1, dan hanya mengembalikan versi terbaru dari setiap kolom.
String tableName = "get_range_demo";
RangeRowQueryCriteria criteria = new RangeRowQueryCriteria(tableName);
// Kunci primer awal (inklusif)
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.setInclusiveStartPrimaryKey(startPkBuilder.build());
// Kunci primer akhir (eksklusif); INF_MAX menyatakan tak hingga positif
PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
criteria.setExclusiveEndPrimaryKey(endPkBuilder.build());
criteria.setMaxVersions(1);
GetRangeResponse response = client.getRange(new GetRangeRequest(criteria));
for (Row row : response.getRows()) {
System.out.println(row);
}
Parameter
GetRangeRequest mencakup parameter berikut.
|
Name |
Type |
Description |
|
rangeRowQueryCriteria (required) |
|
Kriteria untuk membaca rentang baris. |
|
transactionId (optional) |
|
ID transaksi lokal. Tetapkan parameter ini hanya saat Anda membaca data dalam transaksi lokal. Untuk informasi tentang cara memperoleh dan menggunakan ID tersebut, lihat Use local transactions. |
Kriteria kueri rentang
rangeRowQueryCriteria bertipe RangeRowQueryCriteria dan mencakup parameter berikut.
|
Name |
Type |
Description |
|
tableName (required) |
|
Nama tabel. |
|
inclusiveStartPrimaryKey (required) |
|
Kunci primer awal inklusif. Untuk pembacaan maju, nilainya harus lebih kecil daripada kunci primer akhir. Untuk pembacaan mundur, nilainya harus lebih besar daripada kunci primer akhir. Skemanya harus sesuai dengan skema tabel. Gunakan |
|
exclusiveEndPrimaryKey (required) |
|
Kunci primer akhir eksklusif. Skemanya harus sesuai dengan skema tabel. Gunakan |
|
direction (optional) |
|
Arah pembacaan. Nilai default adalah |
|
maxVersions (optional) |
|
Jumlah maksimum versi data yang dikembalikan untuk setiap kolom atribut. Jika terdapat lebih banyak versi yang sesuai, Tablestore mengembalikan versi dari yang terbaru ke yang terlama. Tetapkan minimal salah satu dari |
|
timeRange (optional) |
|
Rentang versi data. Hanya versi dalam rentang yang dikembalikan. Tetapkan minimal salah satu dari |
|
limit (optional) |
|
Jumlah maksimum baris yang dikembalikan dalam satu panggilan. Nilainya harus lebih besar dari 0. Saat batas tercapai, gunakan |
|
columnsToGet (optional) |
|
Kolom yang akan dikembalikan. Jika Anda tidak menentukan parameter ini, seluruh baris dikembalikan. Jika Anda menentukannya, baris yang tidak mengandung kolom yang ditentukan tidak dikembalikan. |
|
filter (optional) |
|
Kondisi filter. Jika Anda menentukan Untuk informasi tentang cara mengonfigurasi filter, lihat Use filters. |
Respons
GetRangeResponse mencakup bidang spesifik operasi berikut.
|
Field |
Type |
Description |
|
|
|
Baris yang dikembalikan dalam panggilan saat ini, diperoleh dengan memanggil |
|
|
|
Kunci primer awal untuk panggilan berikutnya, diperoleh dengan memanggil |
Contoh skenario
Iterasi berpaginasi
nextStartPrimaryKey dalam respons merupakan kunci primer awal halaman berikutnya. Panggil getRange dalam loop hingga nextStartPrimaryKey bernilai null untuk memindai semua baris yang sesuai.
String tableName = "get_range_demo";
RangeRowQueryCriteria criteria = new RangeRowQueryCriteria(tableName);
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MIN);
criteria.setInclusiveStartPrimaryKey(startPkBuilder.build());
PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
criteria.setExclusiveEndPrimaryKey(endPkBuilder.build());
criteria.setMaxVersions(1);
int totalRows = 0;
while (true) {
GetRangeResponse response = client.getRange(new GetRangeRequest(criteria));
totalRows += response.getRows().size();
// Respons saat ini belum mengembalikan semua baris; gunakan nextStartPrimaryKey untuk mengambil halaman berikutnya.
PrimaryKey nextStart = response.getNextStartPrimaryKey();
if (nextStart == null) {
break;
}
criteria.setInclusiveStartPrimaryKey(nextStart);
}
System.out.println("Total rows scanned: " + totalRows);
Pemindaian mundur
Gunakan setDirection(Direction.BACKWARD) untuk memindai secara mundur. Kunci primer awal harus lebih besar daripada kunci primer akhir.
String tableName = "get_range_demo";
RangeRowQueryCriteria criteria = new RangeRowQueryCriteria(tableName);
criteria.setDirection(Direction.BACKWARD);
// Untuk pemindaian mundur, kunci primer awal harus lebih besar daripada kunci primer akhir
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
criteria.setInclusiveStartPrimaryKey(startPkBuilder.build());
PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.setExclusiveEndPrimaryKey(endPkBuilder.build());
criteria.setMaxVersions(1);
GetRangeResponse response = client.getRange(new GetRangeRequest(criteria));
System.out.println("Rows (backward): " + response.getRows().size());
Filter bersyarat
Gunakan setFilter untuk hanya mengembalikan baris yang memenuhi kondisi nilai kolom tertentu.
String tableName = "get_range_demo";
RangeRowQueryCriteria criteria = new RangeRowQueryCriteria(tableName);
PrimaryKeyBuilder startPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
startPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MIN);
criteria.setInclusiveStartPrimaryKey(startPkBuilder.build());
PrimaryKeyBuilder endPkBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
endPkBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.INF_MAX);
criteria.setExclusiveEndPrimaryKey(endPkBuilder.build());
criteria.setMaxVersions(1);
// Mengembalikan hanya baris di mana col1 sama dengan "val1"
SingleColumnValueFilter filter = new SingleColumnValueFilter(
"col1",
SingleColumnValueFilter.CompareOperator.EQUAL,
ColumnValue.fromString("val1"));
filter.setPassIfMissing(false);
criteria.setFilter(filter);
GetRangeResponse response = client.getRange(new GetRangeRequest(criteria));
System.out.println("Rows (filtered): " + response.getRows().size());