すべてのプロダクト
Search
ドキュメントセンター

Tablestore:条件付き更新の使用

最終更新日:Aug 14, 2026

Tablestore SDK for Go を使用して、行の書き込み、更新、または削除に条件を指定することで、対象の行が条件を満たす場合にのみ操作を実行します。

前提条件

Tablestore SDK for Go をインストールし、クライアントを初期化します。

説明

条件付き更新には、行の存在条件、列条件、またはその両方を含めることができます。PutRowChange、UpdateRowChange、または DeleteRowChange で SetCondition と SetColumnCondition を呼び出します。これらの行変更オブジェクトを BatchWriteRow リクエストに追加することもできます。条件が満たされない場合、サーバーはエラーを返し、データは変更されません。

  • 行の存在条件は、対象の行が存在するかどうかをチェックします。行の存在を無視する、行が存在することを必須とする、または行が存在しないことを必須とする、のいずれかを指定できます。

  • 列条件は、1 つの列の値を比較するか、論理演算子を使用して複数の列条件を組み合わせます。列同士の比較および定数同士の比較はサポートされません。1 回の更新には最大 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 (必須)

RowExistenceExpectation

行の存在条件です。有効な値は、行が存在するかどうかをチェックしない RowExistenceExpectation_IGNORE、行の存在を要求する RowExistenceExpectation_EXPECT_EXIST、および行が存在しないことを要求する RowExistenceExpectation_EXPECT_NOT_EXIST です。

単一列条件

NewSingleColumnCondition(columnName, comparator, value) を呼び出して、単一列条件を作成します。SingleColumnCondition には、以下のパラメーターが含まれています。

名前

タイプ

説明

ColumnName (必須)

*string

評価対象の列。

Comparator (必須)

*ComparatorType

比較演算子です。有効な値: CT_EQUAL、CT_NOT_EQUAL、CT_GREATER_THAN、CT_GREATER_EQUAL、CT_LESS_THAN、および CT_LESS_EQUAL。

ColumnValue (必須)

interface{}

比較対象となる定数値。

FilterIfMissing (任意)

bool

行に列が含まれていない場合に条件が満たされないかどうかを指定します。デフォルト値は false で、条件が満たされることを意味します。

LatestVersionOnly (任意)

bool

最新バージョンのみを評価するかどうかを指定します。デフォルト値は false で、いずれかのバージョンが条件を満たした場合に条件が満たされることを意味します。

複合条件

NewCompositeColumnCondition(lo) を呼び出して複合条件を作成し、AddFilter を呼び出してサブ条件を追加します。サブ条件は、単一列条件またはネストされた複合条件にすることができます。CompositeColumnValueFilter には、次のパラメーターが含まれています。

名前

タイプ

説明

Operator (必須)

LogicalOperator

論理演算子。 LO_AND と LO_OR には、少なくとも 2 つのサブ条件が必要です。 LO_NOT は、サブ条件を 1 つのみ受け入れます。

Filters (必須)

[]ColumnFilter

組み合わせるサブ条件。

例

複合条件を使用したデータの更新

以下のサンプルは、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)