Utilice el Tablestore SDK for Go para especificar condiciones en la escritura, actualización o eliminación de una fila. De este modo, la operación se ejecuta únicamente cuando la fila destino cumple dichas condiciones.
Requisitos previos
Instale Tablestore SDK for Go e inicialice el cliente.
Descripción
Una actualización condicional puede incluir una condición de existencia de fila, una condición de columna o ambas. Invoque SetCondition y SetColumnCondition en PutRowChange, UpdateRowChange o DeleteRowChange. También puede agregar estos objetos de cambio de fila a una solicitud BatchWriteRow. Si no se cumplen las condiciones, el servidor devuelve un error y no modifica los datos.
La condición de existencia de fila verifica si la fila destino existe. Puede omitir esta verificación, exigir que la fila exista o exigir que no exista.
La condición de columna compara el valor de una columna o combina varias condiciones mediante operadores lógicos. No se admiten comparaciones entre columnas ni entre constantes. Una actualización puede contener hasta 10 condiciones de columna.
El siguiente ejemplo actualiza la columna status solo si la fila destino existe y el valor de la columna score es 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
Condición de existencia de fila
Invoque SetCondition para especificar un valor de RowExistenceExpectation.
|
Nombre |
Tipo |
Descripción |
|
expectation (obligatorio) |
|
La condición de existencia de la fila. Valores válidos: |
Condición de columna única
Invoque NewSingleColumnCondition(columnName, comparator, value) para crear una condición de columna única. SingleColumnCondition incluye los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
ColumnName (obligatorio) |
|
La columna por evaluar. |
|
Comparator (obligatorio) |
|
El operador de comparación. Valores válidos: |
|
ColumnValue (obligatorio) |
|
El valor constante con el que se compara. |
|
FilterIfMissing (opcional) |
|
Indica si la condición no se cumple cuando la fila no contiene la columna especificada. Valor predeterminado: |
|
LatestVersionOnly (opcional) |
|
Indica si se debe evaluar únicamente la versión más reciente. Valor predeterminado: |
Condición compuesta
Invoque NewCompositeColumnCondition(lo) para crear una condición compuesta y utilice AddFilter para agregar subcondiciones. Cada subcondición puede ser una condición de columna única o una condición compuesta anidada. CompositeColumnValueFilter incluye los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
Operator (obligatorio) |
|
El operador lógico. |
|
Filters (obligatorio) |
|
Las subcondiciones por combinar. |
Ejemplos
Actualización de datos mediante una condición compuesta
El siguiente ejemplo ejecuta una actualización solo si score >= 60 y status es igual a 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)