All Products
Search
Document Center

Tablestore:Ekspor data offline secara massal

Last Updated:Aug 06, 2026

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 INF_MIN dan INF_MAX. Titik virtual harus memiliki jumlah kolom yang sama dengan primary key tabel. INF_MIN menyatakan negatif tak hingga dan bernilai lebih kecil daripada nilai apa pun dari tipe kolom mana pun; INF_MAX menyatakan positif tak hingga dan bernilai lebih besar daripada nilai apa pun dari tipe kolom mana pun.

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 INF_MIN dan INF_MAX. Titik virtual harus memiliki jumlah kolom yang sama dengan primary key tabel.

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 columnsToGet dan filter, server terlebih dahulu mengambil kolom yang disebutkan dalam columnsToGet, lalu menerapkan filter pada hasil tersebut.

Untuk informasi tentang cara mengonfigurasi filter, lihat Gunakan filter.

dataBlockType (opsional)

DataBlockType

Encoding blok data dari respons. Nilai yang valid: DBT_PLAIN_BUFFER atau DBT_SIMPLE_ROW_MATRIX (nilai default API: DBT_SIMPLE_ROW_MATRIX). Encoding harus sesuai dengan parser yang digunakan untuk mengurai hasilnya.

Respons

Hasil pembacaan

BulkExportResponse berisi bidang spesifik operasi berikut.

Nama

Tipe

Deskripsi

rows

ByteBuffer

Data baris yang di-encode. Gunakan parser yang sesuai dengan dataBlockType untuk mengurai baris-baris tersebut.

nextStartPrimaryKey

PrimaryKey

Primary key awal untuk pembacaan berikutnya. Nilai null menunjukkan bahwa seluruh data dalam rentang yang ditentukan telah dikembalikan.

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);