All Products
Search
Document Center

Tablestore:Ekspor data offline secara massal

Last Updated:Jun 26, 2026

Pindai rentang baris kontigu dalam tabel data menggunakan bulkExport di SDK Tablestore untuk Java. Satu panggilan mengembalikan beberapa baris berdasarkan rentang kunci primer (inklusif kiri, eksklusif kanan) dan mendukung pemilihan kolom, filter sisi server, serta pengkodean blok data. Gabungkan dengan pagination untuk memindai seluruh tabel.

Prasyarat

Instal SDK Tablestore untuk Java dan inisialisasi klien.

Deskripsi fitur

public BulkExportResponse bulkExport(BulkExportRequest bulkExportRequest) throws TableStoreException, ClientException

Fitur ini memindai baris kontigu dari tabel data berdasarkan rentang kunci primer. Tanggapan mencakup baris yang kunci primernya lebih besar dari atau sama dengan kunci awal dan kurang dari kunci akhir. Gunakan BulkExportQueryCriteria (dalam subpaket com.alicloud.openservices.tablestore.model.tunnel) untuk menetapkan kunci primer awal dan akhir, kolom yang akan dikembalikan, filter, serta jenis pengkodean blok data. Tanggapan mengembalikan data baris sebagai byte yang dikodekan dalam ByteBuffer, yang kemudian diurai menjadi daftar baris menggunakan parser yang sesuai: DBT_PLAIN_BUFFER berpasangan dengan PlainBufferBlockParser, dan DBT_SIMPLE_ROW_MATRIX berpasangan dengan SimpleRowMatrixBlockParser. Jika getNextStartPrimaryKey() mengembalikan nilai non-null, masih terdapat baris tersisa; lanjutkan pemindaian dari kunci tersebut.

Contoh berikut membaca dari tabel bulk_export_demo pada rentang kunci primer [row00, row99) dalam satu panggilan. Contoh ini menggunakan pengkodean DBT_PLAIN_BUFFER dan mengurai hasilnya dengan parser yang sesuai.

String tableName = "bulk_export_demo";

// Kunci primer awal (inklusif)
PrimaryKey startPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row00"))
        .build();
// Kunci primer akhir (eksklusif)
PrimaryKey endPk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row99"))
        .build();

// BulkExportQueryCriteria terletak di subpaket 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 utama:

  • tableName (wajib): nama tabel data.

  • inclusiveStartPrimaryKey / exclusiveEndPrimaryKey (wajib): kunci primer awal dan akhir dari rentang pemindaian, inklusif kiri dan eksklusif kanan.

  • dataBlockType (opsional): pengkodean blok data dalam tanggapan, yang harus sesuai dengan parser yang digunakan untuk mengurai hasilnya.

  • columnsToGet / filter (opsional): kolom yang akan dikembalikan dan kondisi filter sisi server.

Parameter

Nama

Tipe

Deskripsi

tableName (wajib)

String

Nama tabel data.

inclusiveStartPrimaryKey (wajib)

PrimaryKey

Kunci primer awal dari rentang pemindaian. Jika baris dengan kunci ini ada, baris tersebut disertakan dalam tanggapan.

Menerima kunci primer yang valid atau titik virtual yang dibuat dari INF_MIN dan INF_MAX. Titik virtual harus memiliki jumlah kolom yang sama dengan kunci primer tabel. INF_MIN menyatakan negatif tak hingga dan lebih kecil daripada nilai apa pun dari tipe kolom mana pun; INF_MAX menyatakan positif tak hingga dan lebih besar daripada nilai apa pun dari tipe kolom mana pun.

exclusiveEndPrimaryKey (wajib)

PrimaryKey

Kunci primer akhir dari rentang pemindaian. Baris dengan kunci ini tidak pernah disertakan dalam tanggapan, baik baris tersebut ada maupun tidak.

Menerima kunci primer yang valid atau titik virtual yang dibuat dari INF_MIN dan INF_MAX. Titik virtual harus memiliki jumlah kolom yang sama dengan kunci primer tabel.

columnsToGet (opsional)

Set<String>

Himpunan nama kolom yang akan dikembalikan. Jika tidak ditetapkan, semua kolom setiap baris akan dikembalikan.

Jika ditetapkan, tanggapan hanya mencakup kolom yang ada pada setiap baris. Jika suatu baris tidak memiliki salah satu kolom yang ditentukan, baris tersebut tidak disertakan dalam tanggapan.

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 hasilnya.

dataBlockType (opsional)

DataBlockType

Pengkodean blok data dalam tanggapan. Nilai yang valid: DBT_PLAIN_BUFFER atau DBT_SIMPLE_ROW_MATRIX (nilai default API: DBT_SIMPLE_ROW_MATRIX). Pengkodean harus sesuai dengan parser yang digunakan untuk mengurai hasilnya.

Contoh skenario

Lakukan pagination pada seluruh tabel dengan nextStartPrimaryKey

Satu panggilan bulkExport sering kali hanya mengembalikan sebagian dari rentang tersebut. Untuk memindai seluruh tabel, gunakan nextStartPrimaryKey dari setiap tanggapan sebagai kunci primer 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 semua data telah dibaca
    startPk = response.getNextStartPrimaryKey();
}
System.out.println("Total baris yang dipindai: " + totalRows);