Go SDK 可为行写入、更新或删除操作设置判断条件,仅在目标行满足条件时执行操作。
前提条件
安装Tablestore Go SDK并初始化客户端。
功能说明
条件更新包含行存在性条件和列条件,两者可以独立使用或组合使用。通过 PutRowChange、UpdateRowChange 或 DeleteRowChange 的 SetCondition 和 SetColumnCondition 设置条件,也可以将这些行变更对象加入 BatchWriteRow 请求。条件不满足时,服务端返回错误且不修改数据。
-
行存在性条件用于判断目标行是否存在,包括忽略判断、期望行存在和期望行不存在。
-
列条件用于比较单列值,或通过逻辑运算组合多个列条件。不支持列与列或常量与常量比较。单次更新最多包含 10 个列条件。
以下示例仅在目标行存在且 score 列值为 30 时更新 status 列。
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)
}
参数说明
行存在性条件
调用 SetCondition 设置 RowExistenceExpectation。
|
名称 |
类型 |
说明 |
|
expectation(必选) |
|
行存在性条件。取值范围: |
单列条件
调用 NewSingleColumnCondition(columnName, comparator, value) 创建单列条件。SingleColumnCondition 包含以下参数。
|
名称 |
类型 |
说明 |
|
ColumnName(必选) |
|
要判断的列名称。 |
|
Comparator(必选) |
|
关系运算符。支持 |
|
ColumnValue(必选) |
|
用于比较的常量值。 |
|
FilterIfMissing(可选) |
|
目标行不包含判断列时是否视为不满足条件。默认值为 |
|
LatestVersionOnly(可选) |
|
是否只判断最新版本。默认值为 |
组合条件
调用 NewCompositeColumnCondition(lo) 创建组合条件,并调用 AddFilter 添加子条件。子条件可以是单列条件或嵌套的组合条件。CompositeColumnValueFilter 包含以下参数。
|
名称 |
类型 |
说明 |
|
Operator(必选) |
|
逻辑运算符。 |
|
Filters(必选) |
|
参与逻辑运算的子条件。 |
场景示例
使用组合条件更新数据
以下示例仅在 score >= 60 且 status 等于 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)