Todos os produtos
Search
Central de documentação

Tablestore:Batch row operations

Última atualização: Aug 20, 2026

Use o Tablestore SDK for Java para gravar, atualizar e excluir linhas em lote em uma ou mais tabelas do modelo Wide Column em uma única solicitação.

Pré-requisitos

Instale o Tablestore SDK for Java e inicialize o cliente.

Descrição

Chame batchWriteRow para combinar operações de gravação, atualização e exclusão de linhas em várias tabelas em uma única solicitação. O servidor processa cada linha independentemente. A falha em uma linha não afeta as demais. Chame isAllSucceed e getFailedRows para inspecionar os resultados.

public BatchWriteRowResponse batchWriteRow(BatchWriteRowRequest batchWriteRowRequest) throws TableStoreException, ClientException
Nota

Se qualquer operação na solicitação contiver um erro de parâmetro, o Tablestore retornará um erro de parâmetro para toda a solicitação e nenhuma operação será executada.

O exemplo a seguir grava uma linha (chave primária row1) na tabela batch_write_demo, verifica o resultado geral com isAllSucceed e recupera os detalhes das linhas com falha usando getFailedRows.

String tableName = "batch_write_demo";

BatchWriteRowRequest request = new BatchWriteRowRequest();

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"))
        .build();
RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));
request.addRowChange(rowPutChange);

BatchWriteRowResponse response = client.batchWriteRow(request);
System.out.println("All Succeeded: " + response.isAllSucceed());
if (!response.isAllSucceed()) {
    for (BatchWriteRowResponse.RowResult fail : response.getFailedRows()) {
        System.out.println("Failed: table=" + fail.getTableName()
                + " index=" + fail.getIndex()
                + " error=" + fail.getError());
    }
}

Parâmetros

BatchWriteRowRequest contém os seguintes parâmetros.

Nome

Tipo

Descrição

rowChangesGroupByTable (obrigatório)

Map<String, List<RowChange>>

Operações de linha agrupadas por tabela, adicionadas ao chamar addRowChange. Uma única solicitação pode combinar operações de gravação, atualização e exclusão em diferentes tabelas.

atomic (opcional)

Boolean

Define se as gravações atômicas em lote devem ser ativadas. Quando ativado, as operações de linha na mesma tabela precisam usar a mesma chave primária. Caso contrário, a solicitação falhará.

transactionId (opcional)

String

ID da transação local. Defina este parâmetro apenas ao operar dados em uma transação local. Se definido, uma única solicitação poderá conter operações para apenas uma tabela.

Para obter informações sobre como adquirir e utilizar o ID, consulte Use local transactions.

Operações de linha

Cada elemento em rowChangesGroupByTable é uma implementação de RowChange. As implementações a seguir são compatíveis.

  • RowPutChange: Grava colunas de atributo em uma linha. Para detalhes de configuração, consulte Write a row.

  • RowUpdateChange: Adiciona, modifica ou exclui colunas de atributo em uma linha, ou executa incrementos atômicos. Para detalhes de configuração, consulte Atualize uma linha.

  • RowDeleteChange: Exclua uma linha e todos os dados de suas colunas de atributo. Para detalhes de configuração, consulte Exclua uma linha.

Resposta

BatchWriteRowResponse contém o seguinte campo específico da operação.

Campo

Tipo

Descrição

tableToRowStatus

Map<String, List<RowResult>>

Resultados no nível de linha agrupados por tabela, obtidos ao chamar getRowStatus. Também é possível chamar getSucceedRows e getFailedRows para obter os resultados das linhas com sucesso e com falha.

Resultado da linha

Cada elemento em tableToRowStatus é do tipo RowResult e contém os seguintes campos.

Campo

Tipo

Descrição

isSucceed

boolean

Indica se a operação na linha foi bem-sucedida.

tableName

String

Nome da tabela.

error

Error

Informações de erro retornadas quando a operação na linha falha.

index

int

Posição da operação de linha na lista de operações da tabela.

row

Row

Dados da linha retornados pela operação. Se nenhum conteúdo de retorno estiver configurado, o valor será null.

Exemplos

Atualização de linhas em lote

Use RowUpdateChange para atualizar colunas de atributo em uma solicitação em lote.

String tableName = "batch_write_demo";

BatchWriteRowRequest request = new BatchWriteRowRequest();

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row_for_update"))
        .build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);

// Update or add attribute columns
rowUpdateChange.put("col1", ColumnValue.fromString("new_val1"));
rowUpdateChange.put("col2", ColumnValue.fromLong(100));

// Delete an entire attribute column
rowUpdateChange.deleteColumns("obsolete_col");

request.addRowChange(rowUpdateChange);
client.batchWriteRow(request);

Exclusão de linhas em lote

Use RowDeleteChange para excluir linhas inteiras em uma solicitação em lote.

String tableName = "batch_write_demo";

BatchWriteRowRequest request = new BatchWriteRowRequest();

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row_for_delete"))
        .build();
RowDeleteChange rowDeleteChange = new RowDeleteChange(tableName, primaryKey);

request.addRowChange(rowDeleteChange);
client.batchWriteRow(request);

Combinação de operações entre tabelas

Combine operações de gravação, atualização e exclusão em várias tabelas em uma única solicitação. O Tablestore retorna resultados por linha.

String tableA = "batch_write_demo";
String tableB = "batch_write_demo_2";

BatchWriteRowRequest request = new BatchWriteRowRequest();

// Insert a new row into table A
PrimaryKey pkA = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowA_new"))
        .build();
RowPutChange putA = new RowPutChange(tableA, pkA);
putA.addColumn("col1", ColumnValue.fromString("valA"));
request.addRowChange(putA);

// Update an existing row in table B
PrimaryKey pkB = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowB_existing"))
        .build();
RowUpdateChange updateB = new RowUpdateChange(tableB, pkB);
updateB.put("status", ColumnValue.fromString("done"));
request.addRowChange(updateB);

// Delete a row from table A
PrimaryKey pkADel = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("rowA_obsolete"))
        .build();
RowDeleteChange deleteA = new RowDeleteChange(tableA, pkADel);
request.addRowChange(deleteA);

BatchWriteRowResponse response = client.batchWriteRow(request);

if (!response.isAllSucceed()) {
    System.out.println("Failed rows: " + response.getFailedRows().size());
    for (BatchWriteRowResponse.RowResult fail : response.getFailedRows()) {
        System.out.println(" - table=" + fail.getTableName()
                + " index=" + fail.getIndex()
                + " error=" + fail.getError().getMessage());
    }
}