Todos os produtos
Search
Central de documentação

Tablestore:Use conditional updates

Última atualização: Aug 13, 2026

Use o Tablestore SDK for Go para especificar condições em operações de escrita, atualização ou exclusão de linhas. A operação será executada apenas se a linha de destino atender aos critérios definidos.

Pré-requisitos

Instale o Tablestore SDK for Go e inicialize o cliente.

Descrição

Uma atualização condicional pode incluir uma condição de existência de linha, uma condição de coluna ou ambas. Chame SetCondition e SetColumnCondition em PutRowChange, UpdateRowChange ou DeleteRowChange. Também é possível adicionar esses objetos de alteração de linha a uma solicitação BatchWriteRow. Se as condições não forem atendidas, o servidor retornará um erro e não modificará os dados.

  • A condição de existência de linha verifica se a linha de destino existe. É possível ignorar a verificação de existência, exigir que a linha exista ou exigir que ela não exista.

  • A condição de coluna compara o valor de uma coluna ou combina várias condições usando operadores lógicos. Não há suporte para comparações entre colunas ou entre constantes. Uma atualização pode conter até 10 condições de coluna.

O exemplo a seguir atualiza a coluna status somente se a linha de destino existir e o valor da coluna score for 30.

primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")

change := &tablestore.UpdateRowChange{
    TableName:  "example_table",
    PrimaryKey: primaryKey,
}
change.PutColumn("status", "processed")
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(
    tablestore.NewSingleColumnCondition("score", tablestore.CT_EQUAL, int64(30)),
)

_, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
    log.Fatal(err)
}

Parâmetros

Condição de existência de linha

Chame SetCondition para especificar um valor de RowExistenceExpectation.

Nome

Tipo

Descrição

expectation (obrigatório)

RowExistenceExpectation

Define a condição de existência da linha. Valores válidos: RowExistenceExpectation_IGNORE, que ignora a verificação de existência; RowExistenceExpectation_EXPECT_EXIST, que exige a existência da linha; e RowExistenceExpectation_EXPECT_NOT_EXIST, que exige que a linha não exista.

Condição de coluna única

Use NewSingleColumnCondition(columnName, comparator, value) para criar uma condição de coluna única. O objeto SingleColumnCondition aceita os seguintes parâmetros.

Nome

Tipo

Descrição

ColumnName (obrigatório)

*string

Coluna a ser avaliada.

Comparator (obrigatório)

*ComparatorType

Operador de comparação. Valores válidos: CT_EQUAL, CT_NOT_EQUAL, CT_GREATER_THAN, CT_GREATER_EQUAL, CT_LESS_THAN e CT_LESS_EQUAL.

ColumnValue (obrigatório)

interface{}

Valor constante usado como base para comparação.

FilterIfMissing (opcional)

bool

Determina se a condição falha caso a linha não contenha a coluna especificada. Valor padrão: false, indicando que a condição é considerada atendida.

LatestVersionOnly (opcional)

bool

Define se apenas a versão mais recente deve ser avaliada. Valor padrão: false, o que significa que a condição será atendida se qualquer versão corresponder ao critério.

Condição composta

Use NewCompositeColumnCondition(lo) para criar uma condição composta e chame AddFilter para adicionar subcondições. Cada subcondição pode ser uma condição de coluna única ou outra condição composta aninhada. O filtro CompositeColumnValueFilter possui os seguintes parâmetros.

Nome

Tipo

Descrição

Operator (obrigatório)

LogicalOperator

Operador lógico. Os operadores LO_AND e LO_OR exigem pelo menos duas subcondições. O operador LO_NOT aceita apenas uma subcondição.

Filters (obrigatório)

[]ColumnFilter

Subcondições a serem combinadas.

Exemplos

Atualizar dados com uma condição composta

No exemplo abaixo, a atualização ocorre apenas se score >= 60 e o status for pending.

condition := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
condition.AddFilter(
    tablestore.NewSingleColumnCondition("score", tablestore.CT_GREATER_EQUAL, int64(60)),
)
condition.AddFilter(
    tablestore.NewSingleColumnCondition("status", tablestore.CT_EQUAL, "pending"),
)

change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.SetColumnCondition(condition)