Baca beberapa baris dari satu atau beberapa tabel dalam satu permintaan menggunakan Tablestore SDK for Java. Setiap baris menghasilkan respons independen, sehingga Anda dapat mengambil catatan detail secara batch berdasarkan kunci primer.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi
public BatchGetRowResponse batchGetRow(BatchGetRowRequest batchGetRowRequest) throws TableStoreException, ClientException
Baca beberapa baris dalam satu permintaan. Objek BatchGetRowRequest berisi satu atau lebih objek MultiRowQueryCriteria yang ditambahkan dengan memanggil metode addMultiRowQueryCriteria. Setiap objek MultiRowQueryCriteria menargetkan satu tabel. Semua baris dalam kriteria tersebut menggunakan kondisi kueri yang sama, seperti maxVersions, columnsToGet, dan filter.
Server memproses setiap baris secara independen—kegagalan pada satu baris tidak memengaruhi baris lainnya. Panggil metode isAllSucceed, getSucceedRows, atau getFailedRows untuk memeriksa hasil pada tingkat baris.
Satu panggilan BatchGetRow dapat mengambil hingga 100 baris.
Contoh berikut membaca dua baris (dengan kunci primer row1 dan row2) dari tabel batch_get_demo dan hanya mengembalikan versi terbaru dari setiap kolom.
String tableName = "batch_get_demo";
MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);
// Tambahkan kunci primer untuk baris 1
PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());
// Tambahkan kunci primer untuk baris 2
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());
criteria.setMaxVersions(1);
BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);
BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("RequestId: " + response.getRequestId());
System.out.println("All Succeeded: " + response.isAllSucceed());
for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
System.out.println("Succeeded: " + rowResult.getRow());
}
if (!response.isAllSucceed()) {
for (BatchGetRowResponse.RowResult fail : response.getFailedRows()) {
System.out.println("Failed: table=" + fail.getTableName()
+ " index=" + fail.getIndex()
+ " error=" + fail.getError());
}
}
Parameter yang diperlukan adalah tableName, rowKeys, serta salah satu dari maxVersions atau timeRange. Lihat tabel Parameter untuk skema lengkapnya.
Parameter
Objek MultiRowQueryCriteria berisi kondisi kueri batch untuk satu tabel.
|
Name |
Type |
Description |
|
tableName (required) |
String |
Nama tabel yang akan dibaca. |
|
rowKeys (required) |
List<PrimaryKey> |
Daftar kunci primer, ditambahkan dengan memanggil |
|
maxVersions (one required) |
OptionalValue<Integer> |
Jumlah maksimum versi yang akan dibaca. Tetapkan minimal salah satu dari Jika suatu kolom memiliki lebih banyak versi daripada |
|
timeRange (one required) |
OptionalValue<TimeRange> |
Rentang waktu yang akan dibaca. Tetapkan minimal salah satu dari Setiap kolom atribut dapat memiliki beberapa versi. Setelah Anda menetapkan rentang waktu, Tablestore hanya mengembalikan versi yang berada dalam rentang tersebut. |
|
columnsToGet (optional) |
Set<String> |
Kolom yang akan dibaca — baik kolom kunci primer maupun kolom atribut.
|
|
filter (optional) |
OptionalValue<Filter> |
Kondisi filter. Untuk detailnya, lihat Use filters. Jika Anda menetapkan |
Skenario
Read across multiple tables
Untuk membaca dari beberapa tabel dalam satu permintaan, buat satu objek MultiRowQueryCriteria untuk setiap tabel, lalu tambahkan masing-masing ke permintaan menggunakan metode addMultiRowQueryCriteria.
String tableA = "batch_get_demo";
String tableB = "batch_get_demo_2";
BatchGetRowRequest request = new BatchGetRowRequest();
// Kondisi kueri untuk tabel A
MultiRowQueryCriteria criteriaA = new MultiRowQueryCriteria(tableA);
PrimaryKeyBuilder pkA = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkA.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteriaA.addRow(pkA.build());
criteriaA.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaA);
// Kondisi kueri untuk tabel B
MultiRowQueryCriteria criteriaB = new MultiRowQueryCriteria(tableB);
PrimaryKeyBuilder pkB = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkB.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowA"));
criteriaB.addRow(pkB.build());
criteriaB.setMaxVersions(1);
request.addMultiRowQueryCriteria(criteriaB);
BatchGetRowResponse response = client.batchGetRow(request);
System.out.println("Total succeeded rows: " + response.getSucceedRows().size());
Read with a filter
Panggil metode setFilter untuk menyambungkan filter nilai kolom ke kriteria. Semua baris dalam objek MultiRowQueryCriteria ini menggunakan filter yang sama, dan Tablestore hanya mengembalikan baris yang cocok.
String tableName = "batch_get_demo";
MultiRowQueryCriteria criteria = new MultiRowQueryCriteria(tableName);
PrimaryKeyBuilder pkb1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb1.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
criteria.addRow(pkb1.build());
PrimaryKeyBuilder pkb2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
pkb2.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
criteria.addRow(pkb2.build());
criteria.setMaxVersions(1);
// Kembalikan hanya baris di mana col1 bernilai "val1"
SingleColumnValueFilter filter = new SingleColumnValueFilter(
"col1",
SingleColumnValueFilter.CompareOperator.EQUAL,
ColumnValue.fromString("val1"));
filter.setPassIfMissing(false);
criteria.setFilter(filter);
BatchGetRowRequest request = new BatchGetRowRequest();
request.addMultiRowQueryCriteria(criteria);
BatchGetRowResponse response = client.batchGetRow(request);
int matched = 0;
for (BatchGetRowResponse.RowResult rowResult : response.getSucceedRows()) {
if (rowResult.getRow() != null) {
matched++;
}
}
System.out.println("Rows matching filter: " + matched);