Tablestore SDK for Java membaca beberapa baris berdasarkan rentang primary key untuk pemrosesan offline dan mengembalikan hasilnya sebagai blok data dalam encoding yang ditentukan.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi
Fitur ini memindai baris-baris berurutan dari tabel data berdasarkan rentang primary key. Respons mencakup baris-baris yang primary key-nya lebih besar dari atau sama dengan kunci awal dan lebih kecil dari kunci akhir. Gunakan BulkExportQueryCriteria (dalam subpackage com.alicloud.openservices.tablestore.model.tunnel) untuk menetapkan primary key awal dan akhir, kolom yang akan dikembalikan, filter, serta jenis encoding blok data. Respons mengembalikan data baris sebagai byte yang di-encode dalam ByteBuffer, yang kemudian dapat Anda uraikan menjadi daftar baris menggunakan parser yang sesuai: DBT_PLAIN_BUFFER dipasangkan dengan PlainBufferBlockParser, sedangkan DBT_SIMPLE_ROW_MATRIX dipasangkan dengan SimpleRowMatrixBlockParser. Jika getNextStartPrimaryKey() mengembalikan nilai non-null, berarti masih terdapat baris tersisa; lanjutkan pemindaian dari kunci tersebut.
public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException
Contoh berikut membaca data dari tabel bulk_export_demo pada rentang primary key [row00, row99) dalam satu panggilan. Contoh ini menggunakan encoding DBT_PLAIN_BUFFER dan mengurai hasilnya dengan parser yang sesuai.
String tableName = "bulk_export_demo";
// Primary key awal (inklusif)
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
.build();
// Primary key akhir (eksklusif)
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
.build();
// BulkExportQueryCriteria terletak di subpackage model.tunnel
BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
criteria.setInclusiveStartPrimaryKey(startPk);
criteria.setExclusiveEndPrimaryKey(endPk);
criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
criteria.addColumnsToGet("pk");
criteria.addColumnsToGet("col1");
BulkExportRequest request = new BulkExportRequest(criteria);
BulkExportResponse response = client.bulkExport(request);
// response.getRows() mengembalikan ByteBuffer; uraikan menjadi List<Row> menggunakan parser yang sesuai
// DBT_PLAIN_BUFFER -> PlainBufferBlockParser
// DBT_SIMPLE_ROW_MATRIX -> SimpleRowMatrixBlockParser
PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
List<Row> rows = parser.getRows();
System.out.println("Jumlah baris yang dikembalikan: " + rows.size());
for (Row row : rows) {
System.out.println(row);
}
// Nilai nextStartPrimaryKey yang tidak null menunjukkan bahwa masih ada data tersisa dan pagination harus dilanjutkan
System.out.println("Masih ada data berikutnya: " + (response.getNextStartPrimaryKey() != null));
Parameter
Konfigurasi permintaan
BulkExportRequest berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
bulkExportQueryCriteria (wajib) |
BulkExportQueryCriteria |
Kriteria pembacaan rentang. |
Kriteria pembacaan rentang
BulkExportRequest.bulkExportQueryCriteria bertipe BulkExportQueryCriteria dan berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
tableName (wajib) |
String |
Nama tabel data. |
|
inclusiveStartPrimaryKey (wajib) |
PrimaryKey |
Primary key awal dari rentang pemindaian. Jika baris dengan kunci ini ada, maka baris tersebut disertakan dalam respons. Menerima primary key yang valid atau titik virtual yang dibuat dari |
|
exclusiveEndPrimaryKey (wajib) |
PrimaryKey |
Primary key akhir dari rentang pemindaian. Baris dengan kunci ini tidak pernah disertakan dalam respons, baik baris tersebut ada maupun tidak. Menerima primary key yang valid atau titik virtual yang dibuat dari |
|
columnsToGet (opsional) |
Set<String> |
Himpunan nama kolom yang akan dikembalikan. Jika tidak ditetapkan, semua kolom dari setiap baris akan dikembalikan. Jika ditetapkan, respons hanya mencakup kolom yang ada pada setiap baris. Jika suatu baris tidak memiliki salah satu kolom yang ditentukan, baris tersebut tidak disertakan dalam respons. |
|
filter (opsional) |
Filter |
Filter sisi server yang diterapkan setelah pemilihan kolom. Jika Anda menentukan Untuk informasi tentang cara mengonfigurasi filter, lihat Gunakan filter. |
|
dataBlockType (opsional) |
DataBlockType |
Encoding blok data dari respons. Nilai yang valid: |
Respons
Hasil pembacaan
BulkExportResponse berisi bidang spesifik operasi berikut.
|
Nama |
Tipe |
Deskripsi |
|
rows |
ByteBuffer |
Data baris yang di-encode. Gunakan parser yang sesuai dengan |
|
nextStartPrimaryKey |
PrimaryKey |
Primary key awal untuk pembacaan berikutnya. Nilai |
|
dataBlockType |
DataBlockType |
Encoding dari data baris yang dikembalikan. |
|
bodyBytes |
long |
Jumlah byte dalam badan respons. |
Contoh
Lakukan pagination melalui seluruh tabel
Satu panggilan bulkExport sering kali hanya mengembalikan sebagian dari rentang tersebut. Untuk memindai seluruh tabel, gunakan nextStartPrimaryKey dari setiap respons sebagai primary key awal untuk panggilan berikutnya. Hentikan proses ketika nextStartPrimaryKey bernilai null.
String tableName = "bulk_export_demo";
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
.build();
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
.build();
int totalRows = 0;
while (startPk != null) {
BulkExportQueryCriteria criteria = new BulkExportQueryCriteria(tableName);
criteria.setInclusiveStartPrimaryKey(startPk);
criteria.setExclusiveEndPrimaryKey(endPk);
criteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
BulkExportResponse response = client.bulkExport(new BulkExportRequest(criteria));
PlainBufferBlockParser parser = new PlainBufferBlockParser(response.getRows());
List<Row> rows = parser.getRows();
totalRows += rows.size();
// Nilai null pada nextStartPrimaryKey menunjukkan bahwa seluruh data telah dibaca
startPk = response.getNextStartPrimaryKey();
}
System.out.println("Total baris yang dipindai: " + totalRows);