Localize uma linha pela chave primária e adicione, modifique ou exclua colunas de atributo incrementalmente. Opcionalmente, especifique um número de versão. O SDK for Java usa UpdateRow para atualizações atômicas de linha única. Casos de uso comuns incluem atualização de campos de status, arquivamento de valores históricos e exclusão lógica.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize uma instância OTSClient.
Descrição
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
Localize uma linha pela chave primária e atualize as colunas de atributo incrementalmente. Use RowUpdateChange para armazenar a chave primária e as operações de alteração de coluna. Obtenha a unidade de capacidade consumida (CU) com response.getConsumedCapacity().
O exemplo a seguir atualiza a linha row1 na tabela de dados update_row_demo e define a coluna de atributo col1 como changed_val1.
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
rowUpdateChange.put("col1", ColumnValue.fromString("changed_val1"));
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
System.out.println("RequestId: " + response.getRequestId());
System.out.println("Write CU: " + response.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
Parâmetros
O objeto RowUpdateChange contém os dados de atualização de uma linha. Veja a descrição de cada parâmetro abaixo.
|
Nome |
Tipo |
Descrição |
|
tableName (obrigatório) |
String |
Nome da tabela de dados a atualizar. |
|
primaryKey (obrigatório) |
PrimaryKey |
Informações da chave primária, incluindo nomes e valores das colunas.
|
|
columnsToUpdate (obrigatório) |
List<Pair<Column, Type>> |
Lista de alterações nas colunas de atributo. Chame os métodos a seguir de
Para exemplos de código de cada operação, consulte a seção Cenários. |
|
condition (opcional) |
Condition |
Define a condição de gravação. Para obter detalhes, consulte Atualização condicional. |
Cenários
Gravar colunas de atributo com número de versão especificado
Passe um terceiro argumento para put e especifique o número de versão (timestamp em milissegundos) da coluna de atributo. Use essa abordagem para arquivar valores históricos associados ao tempo de negócio.
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// Specify the version number (a millisecond timestamp) as the third argument.
long version = System.currentTimeMillis();
rowUpdateChange.put("col2", ColumnValue.fromString("val2"), version);
client.updateRow(new UpdateRowRequest(rowUpdateChange));
Excluir uma versão específica de uma coluna de atributo
Use deleteColumn para remover uma única versão de uma coluna de atributo e manter as demais intactas.
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// Delete the col2 value at the specified version (a millisecond timestamp).
rowUpdateChange.deleteColumn("col2", 1747893563831L);
client.updateRow(new UpdateRowRequest(rowUpdateChange));
Excluir uma coluna de atributo inteira
Use deleteColumns para excluir todas as versões de uma coluna de atributo em uma única operação.
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// Delete all versions of the col2 attribute column.
rowUpdateChange.deleteColumns("col2");
client.updateRow(new UpdateRowRequest(rowUpdateChange));