Tablestore SDK untuk Java mendukung impor data offline dengan menambahkan, memperbarui, atau menghapus beberapa baris sekaligus, serta mengembalikan hasil dari setiap operasi baris tersebut.
Prasyarat
Pasang Tablestore SDK untuk Java dan inisialisasi klien.
Deskripsi
Panggil metode bulkImport untuk mengirimkan beberapa operasi baris dalam satu permintaan. Server memproses setiap baris secara independen dan mengembalikan hasil per baris, sehingga kegagalan pada satu baris tidak memengaruhi operasi pada baris lainnya. Metode ini dirancang untuk impor massal data offline dalam skenario big data.
public BulkImportResponse bulkImport(BulkImportRequest bulkImportRequest) throws TableStoreException, ClientException
Contoh berikut menyisipkan lima baris ke dalam tabel bulk_import_demo dalam satu permintaan massal dan mencetak jumlah baris yang berhasil serta gagal.
String tableName = "bulk_import_demo";
BulkImportRequest request = new BulkImportRequest(tableName);
List<RowChange> rowChanges = new ArrayList<RowChange>();
for (int i = 0; i < 5; i++) {
PrimaryKey pk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row" + i))
.build();
RowPutChange put = new RowPutChange(tableName, pk);
put.addColumn(new Column("col1", ColumnValue.fromString("v" + i)));
rowChanges.add(put);
}
request.addRowChanges(rowChanges);
BulkImportResponse response = client.bulkImport(request);
// Ambil hasil per baris ke dalam succeedRows dan failedRows
List<BulkImportResponse.RowResult> succeedRows = new ArrayList<BulkImportResponse.RowResult>();
List<BulkImportResponse.RowResult> failedRows = new ArrayList<BulkImportResponse.RowResult>();
response.getResult(succeedRows, failedRows);
System.out.println("Semua berhasil: " + response.isAllSucceed());
System.out.println("Berhasil: " + succeedRows.size() + ", Gagal: " + failedRows.size());
Parameter
|
Name |
Type |
Description |
|
tableName (required) |
String |
Nama tabel. |
|
rowChanges (required) |
List<RowChange> |
Daftar operasi baris. Anda dapat menggabungkan operasi berikut dalam satu permintaan:
|
Respons
Hasil impor
BulkImportResponse berisi bidang spesifik operasi berikut.
|
Name |
Type |
Description |
|
rowResults |
List<BulkImportResponse.RowResult> |
Hasil dari setiap operasi baris dalam urutan yang sama seperti |
Hasil per baris
Setiap elemen dalam BulkImportResponse.rowResults[] bertipe BulkImportResponse.RowResult.
|
Name |
Type |
Description |
|
succeed |
boolean |
Menunjukkan apakah operasi baris berhasil. Panggil |
|
error |
Error |
Kesalahan untuk operasi baris yang gagal. Nilainya |
|
index |
int |
Indeks operasi baris dalam |
Contoh
Gabungkan operasi put, update, dan delete dalam satu permintaan
Gunakan satu objek BulkImportRequest untuk mengirimkan operasi put, update, dan delete sekaligus.
String tableName = "bulk_import_demo";
BulkImportRequest request = new BulkImportRequest(tableName);
// Sisipkan baris baru
PrimaryKey pkPut = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("mixed_put"))
.build();
RowPutChange put = new RowPutChange(tableName, pkPut);
put.addColumn(new Column("col1", ColumnValue.fromString("put_value")));
request.addRowChange(put);
// Perbarui baris yang sudah ada (tambahkan kolom)
PrimaryKey pkUpdate = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row0"))
.build();
RowUpdateChange update = new RowUpdateChange(tableName, pkUpdate);
update.put(new Column("col2", ColumnValue.fromLong(100)));
request.addRowChange(update);
// Hapus baris yang sudah ada
PrimaryKey pkDelete = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("row1"))
.build();
RowDeleteChange delete = new RowDeleteChange(tableName, pkDelete);
request.addRowChange(delete);
BulkImportResponse response = client.bulkImport(request);
System.out.println("Semua operasi campuran berhasil: " + response.isAllSucceed());
Ulangi baris yang gagal
Gunakan metode createRequestForRetry(failedRows) untuk membuat permintaan baru dari baris-baris yang gagal. Pengulangan hanya mencakup baris yang gagal, sehingga baris yang telah berhasil tidak diaplikasikan ulang.
String tableName = "bulk_import_demo";
BulkImportRequest request = new BulkImportRequest(tableName);
PrimaryKey pk = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("good"))
.build();
RowPutChange row = new RowPutChange(tableName, pk);
row.addColumn(new Column("col1", ColumnValue.fromString("ok")));
request.addRowChange(row);
BulkImportResponse response = client.bulkImport(request);
List<BulkImportResponse.RowResult> succeedRows = new ArrayList<BulkImportResponse.RowResult>();
List<BulkImportResponse.RowResult> failedRows = new ArrayList<BulkImportResponse.RowResult>();
response.getResult(succeedRows, failedRows);
// Jika ada baris yang gagal, buat permintaan ulang yang hanya berisi baris gagal tersebut
if (!failedRows.isEmpty()) {
BulkImportRequest retryRequest = request.createRequestForRetry(failedRows);
BulkImportResponse retryResponse = client.bulkImport(retryRequest);
System.out.println("Semua pengulangan berhasil: " + retryResponse.isAllSucceed());
}