Grave várias linhas em uma tabela com uma única solicitação usando o Tablestore SDK for Java. Esse método oferece suporte a operações de inserção, atualização e exclusão para cenários de big data offline.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize o cliente.
Descrição
public BulkImportResponse bulkImport(BulkImportRequest bulkImportRequest) throws TableStoreException, ClientException
O método bulkImport envia múltiplas operações de linha em uma única solicitação. O servidor processa cada linha independentemente e retorna resultados individuais. Essa abordagem é ideal para importações em massa offline em cenários de big data.
Adicione operações de linha com
addRowChange(RowChange)ouaddRowChanges(List<RowChange>). Ambos os métodos aceitam três subclasses deRowChange:RowPutChange,RowUpdateChangeeRowDeleteChange. É possível combinar as três subclasses em uma única solicitação.Chame
BulkImportResponse.getResult(succeedRows, failedRows)para preencher as duas listas com os resultados de cada linha. UseisAllSucceed()para verificar se todas as linhas foram processadas com sucesso. Cada resultado é independente; portanto, uma falha em determinada linha não afeta as operações nas demais.
O exemplo a seguir insere cinco linhas na tabela bulk_import_demo em uma única solicitação em massa e imprime a quantidade de linhas com sucesso e com falha.
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);
// Retrieve per-row results into succeedRows and failedRows
List<BulkImportResponse.RowResult> succeedRows = new ArrayList<BulkImportResponse.RowResult>();
List<BulkImportResponse.RowResult> failedRows = new ArrayList<BulkImportResponse.RowResult>();
response.getResult(succeedRows, failedRows);
System.out.println("All succeed: " + response.isAllSucceed());
System.out.println("Succeed: " + succeedRows.size() + ", Failed: " + failedRows.size());
Parâmetros
|
Nome |
Tipo |
Descrição |
|
tableName (Obrigatório) |
String |
Nome da tabela. |
|
rowChanges (Obrigatório) |
List<RowChange> |
Lista de operações de linha. Cada elemento deve ser uma instância de |
Exemplos
Combinar inserção, atualização e exclusão em uma única solicitação
Use um único objeto BulkImportRequest para enviar operações de inserção, atualização e exclusão simultaneamente.
String tableName = "bulk_import_demo";
BulkImportRequest request = new BulkImportRequest(tableName);
// Insert a new row
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);
// Update an existing row (append a column)
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);
// Delete an existing row
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("Mixed all succeed: " + response.isAllSucceed());
Tentar novamente linhas com falha
Use createRequestForRetry(failedRows) para criar uma nova solicitação a partir das linhas que falharam. A nova tentativa contém apenas as linhas malsucedidas, evitando a reexecução daquelas já processadas corretamente.
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);
// If any rows failed, build a retry request that contains only the failed rows
if (!failedRows.isEmpty()) {
BulkImportRequest retryRequest = request.createRequestForRetry(failedRows);
BulkImportResponse retryResponse = client.bulkImport(retryRequest);
System.out.println("Retry all succeed: " + retryResponse.isAllSucceed());
}