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) |
|
Define a condição de existência da linha. Valores válidos: |
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) |
|
Coluna a ser avaliada. |
|
Comparator (obrigatório) |
|
Operador de comparação. Valores válidos: |
|
ColumnValue (obrigatório) |
|
Valor constante usado como base para comparação. |
|
FilterIfMissing (opcional) |
|
Determina se a condição falha caso a linha não contenha a coluna especificada. Valor padrão: |
|
LatestVersionOnly (opcional) |
|
Define se apenas a versão mais recente deve ser avaliada. Valor padrão: |
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) |
|
Operador lógico. Os operadores |
|
Filters (obrigatório) |
|
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)