Todos os produtos
Search
Central de documentação

Tablestore:Configurar atualização condicional

Última atualização: Jul 03, 2026

O recurso de atualização condicional permite atualizar dados em uma tabela de dados apenas se as condições especificadas forem atendidas. Caso contrário, a atualização falha.

Nota

Para obter informações sobre os erros que podem ocorrer ao usar o recurso de atualização condicional, consulte Códigos de erro.

Pré-requisitos

Observações de uso

Ao chamar as operações PutRow, UpdateRow, DeleteRow ou BatchWriteRow para atualizar dados, use a atualização condicional para verificar condições de existência de linha e condições baseadas em colunas. A atualização só é bem-sucedida quando todas as condições são atendidas.

A atualização condicional pode ser baseada em condições de existência de linha e em condições baseadas em colunas.

  • As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST.

    Ao modificar uma tabela de dados, o Tablestore verifica primeiro a condição de existência da linha. Se essa condição não for atendida, a modificação falha e um erro é retornado.

  • As condições baseadas em colunas incluem SingleColumnCondition e CompositeCondition, usadas para determinar se as condições são atendidas com base nos valores de uma ou mais colunas.

    Essas condições suportam os seguintes operadores relacionais: =, !=, >, >=, < e <=. Também aceitam os operadores lógicos NOT, AND e OR. É possível especificar até 10 condições baseadas em colunas para uma atualização condicional.

    • SingleColumnCondition permite comparar uma constante com uma coluna, que pode ser uma chave primária. Não há suporte para comparação entre duas colunas ou entre duas constantes.

    • Operadores lógicos combinam subcondições em CompositeCondition. Essas subcondições podem ser do tipo SingleColumnCondition ou CompositeCondition.

Use a atualização condicional para implementar bloqueio otimista. Ao atualizar uma linha, obtenha o valor de uma coluna específica e defina uma condição de atualização com base nesse valor. Por exemplo, ao alterar o valor da Coluna A para 2, verifique seu valor atual. Neste exemplo, suponha que o valor obtido seja 1. Nesse caso, especifique que a linha só pode ser atualizada se o valor da Coluna A for igual a 1. Se a condição for atendida, a atualização será bem-sucedida. Se outro cliente tiver modificado a linha anteriormente, a atualização falhará.

Parâmetros

Parâmetro

Descrição

RowExistenceExpectation

Condição de existência da linha. Durante a modificação de uma tabela, o Tablestore verifica essa condição. Se ela não for atendida, a operação falha e um erro é retornado.

As condições de existência de linha incluem IGNORE, EXPECT_EXIST e EXPECT_NOT_EXIST. No Tablestore, RowExistenceExpectation_IGNORE representa IGNORE, RowExistenceExpectation_EXPECT_EXIST representa EXPECT_EXIST e RowExistenceExpectation_EXPECT_NOT_EXIST representa EXPECT_NOT_EXIST.

  • IGNORE: Nenhuma verificação de existência é realizada.

  • EXPECT_EXIST: Espera-se que a linha exista. A condição é atendida se a linha existir; caso contrário, não é atendida.

  • EXPECT_NOT_EXIST: Espera-se que a linha não exista. A condição é atendida se a linha não existir; caso contrário, não é atendida.

column_name

Nome da coluna.

column_value

Valor usado para comparação na coluna.

comparator

Operador relacional utilizado para comparar valores de coluna. Para mais informações, consulte ComparatorType.

Os operadores relacionais incluem EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<) e LESS_EQUAL(<=). No Tablestore, CT_EQUAL representa EQUAL(=), CT_NOT_EQUAL representa NOT_EQUAL(!=), CT_GREATER_THAN representa GREATER_THAN(>), CT_GREATER_EQUAL representa GREATER_EQUAL(>=), CT_LESS_THAN representa LESS_THAN(<) e CT_LESS_EQUAL representa LESS_EQUAL(<=).

combinator

Operador lógico usado para combinar múltiplas condições. Para mais informações, consulte LogicalOperator.

Os operadores lógicos incluem NOT, AND e OR. No Tablestore, LO_NOT representa NOT, LO_AND representa AND e LO_OR representa OR.

O número de subcondições permitidas varia conforme o operador lógico utilizado.

  • Para o operador NOT, especifique apenas uma subcondição.

  • Para os operadores AND ou OR, especifique pelo menos duas subcondições.

pass_if_missing

Define se a verificação de condição deve ser aprovada quando uma coluna não existir na linha. Tipo: Booleano. Valores válidos:

  • True: Aprova a verificação de condição se a coluna não existir na linha. Este é o valor padrão.

  • False: Reprova a verificação de condição se a coluna não existir na linha.

latest_version_only

Define se apenas a versão mais recente dos valores deve ser usada na comparação quando uma coluna possuir múltiplas versões. Tipo: Booleano. Valores válidos:

  • True: Usa apenas a versão mais recente para comparação quando houver múltiplas versões. Este é o valor padrão.

  • False: Usa todas as versões disponíveis para comparação. A verificação é aprovada se qualquer versão atender à condição.

Exemplos

O código de exemplo abaixo demonstra como configurar a atualização condicional para modificar uma linha com base na chave primária especificada. Neste cenário, a atualização só ocorre se a linha existir e o valor da coluna age for igual a 20. Se a linha não existir ou se o valor da coluna age for diferente de 20, a operação falhará.

def update_row_with_condition(client):
    table_name = "<TABLE_NAME>"
    primary_key = [('gid',1), ('uid',"101")]
    update_of_attribute_columns = {
        'PUT' : [('name','David'), ('address','Hongkong')],
        'DELETE' : [('address', None, 1488436949003)],
        'DELETE_ALL' : [('mobile'), ('age')],
        'INCREMENT' : [('counter', -1)]
    }
    row = Row(primary_key, update_of_attribute_columns)

    # Specify that the update is successful only if the following conditions are met. Otherwise, the update fails. 
    # (1) The specified row exists. 
    # (2) The value of the age column in the specified row is 20. 
    condition = Condition(RowExistenceExpectation.EXPECT_EXIST, SingleColumnCondition("age", 20, ComparatorType.EQUAL)) # Update the row only if the row exists. 

    consumed, return_row = client.update_row(table_name, row, condition)