Todos los productos
Search
Centro de documentos

Tablestore:Uso de actualizaciones condicionales

Última actualización: Sep 03, 2026

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)

RowExistenceExpectation

La condición de existencia de la fila. Valores válidos: RowExistenceExpectation_IGNORE, que omite la verificación de existencia; RowExistenceExpectation_EXPECT_EXIST, que exige que la fila exista; y RowExistenceExpectation_EXPECT_NOT_EXIST, que exige que la fila no exista.

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)

*string

La columna por evaluar.

Comparator (obligatorio)

*ComparatorType

El operador de comparación. Valores válidos: CT_EQUAL, CT_NOT_EQUAL, CT_GREATER_THAN, CT_GREATER_EQUAL, CT_LESS_THAN y CT_LESS_EQUAL.

ColumnValue (obligatorio)

interface{}

El valor constante con el que se compara.

FilterIfMissing (opcional)

bool

Indica si la condición no se cumple cuando la fila no contiene la columna especificada. Valor predeterminado: false, lo que significa que la condición se considera cumplida.

LatestVersionOnly (opcional)

bool

Indica si se debe evaluar únicamente la versión más reciente. Valor predeterminado: false, lo que implica que la condición se cumple si cualquier versión la satisface.

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)

LogicalOperator

El operador lógico. LO_AND y LO_OR requieren como mínimo dos subcondiciones. LO_NOT acepta únicamente una subcondición.

Filters (obligatorio)

[]ColumnFilter

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)