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

Tablestore:条件付き更新の使用

最終更新日:Aug 13, 2026

Go 向け Tablestore SDK を使用して、行の書き込み、更新、または削除に対する条件を指定できます。これにより、ターゲット行が条件を満たす場合にのみ、操作が実行されます。

前提条件

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

説明

条件付き更新には、行の存在条件、列条件、またはその両方を含めることができます。 PutRowChangeUpdateRowChange、または DeleteRowChangeSetConditionSetColumnCondition を呼び出します。 これらの行変更オブジェクトを 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_EQUALCT_NOT_EQUALCT_GREATER_THANCT_GREATER_EQUALCT_LESS_THAN、および CT_LESS_EQUAL です。

ColumnValue (必須)

interface{}

比較対象となる定数値。

FilterIfMissing (任意)

bool

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

LatestVersionOnly (任意)

bool

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

複合条件

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

名前

タイプ

説明

Operator (必須)

LogicalOperator

論理演算子です。 LO_ANDLO_OR は、少なくとも 2 つのサブ条件を必要とします。 LO_NOT は、1 つのサブ条件のみを受け付けます。

Filters (必須)

[]ColumnFilter

組み合わせるサブ条件。

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

以下のサンプルは、score >= 60 かつ statuspending の場合にのみ更新を実行します。

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)