All Products
Search
Document Center

Tablestore:Gunakan pembaruan bersyarat

Last Updated:Aug 14, 2026

Gunakan Tablestore SDK for Go untuk menetapkan kondisi pada operasi penulisan, pembaruan, atau penghapusan baris sehingga operasi tersebut hanya dijalankan jika baris target memenuhi kondisi yang ditentukan.

Prasyarat

Instal Tablestore SDK for Go dan inisialisasi klien.

Deskripsi

Pembaruan bersyarat dapat mencakup kondisi keberadaan baris, kondisi kolom, atau keduanya. Panggil SetCondition dan SetColumnCondition pada objek PutRowChange, UpdateRowChange, atau DeleteRowChange. Objek perubahan baris ini juga dapat ditambahkan ke dalam permintaan BatchWriteRow. Jika kondisi tidak terpenuhi, server akan mengembalikan error dan tidak mengubah data.

  • Kondisi keberadaan baris memeriksa apakah baris target ada. Anda dapat mengabaikan keberadaan baris, mensyaratkan bahwa baris harus ada, atau mensyaratkan bahwa baris tidak boleh ada.

  • Kondisi kolom membandingkan nilai satu kolom atau menggabungkan beberapa kondisi kolom menggunakan operator logika. Perbandingan antar kolom maupun antara kolom dan konstanta tidak didukung. Satu pembaruan dapat mencakup hingga 10 kondisi kolom.

Contoh berikut memperbarui kolom status hanya jika baris target ada dan nilai kolom score adalah 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)
}

Parameter

Kondisi keberadaan baris

Panggil SetCondition untuk menetapkan nilai RowExistenceExpectation.

Name

Type

Description

expectation (required)

RowExistenceExpectation

Kondisi keberadaan baris. Nilai yang valid: RowExistenceExpectation_IGNORE, yang tidak memeriksa keberadaan baris; RowExistenceExpectation_EXPECT_EXIST, yang mewajibkan baris harus ada; dan RowExistenceExpectation_EXPECT_NOT_EXIST, yang mewajibkan baris tidak boleh ada.

Kondisi kolom tunggal

Panggil NewSingleColumnCondition(columnName, comparator, value) untuk membuat kondisi kolom tunggal. SingleColumnCondition memiliki parameter berikut.

Name

Type

Description

ColumnName (required)

*string

Kolom yang akan dievaluasi.

Comparator (required)

*ComparatorType

Operator perbandingan. Nilai yang valid: CT_EQUAL, CT_NOT_EQUAL, CT_GREATER_THAN, CT_GREATER_EQUAL, CT_LESS_THAN, dan CT_LESS_EQUAL.

ColumnValue (required)

interface{}

Nilai konstanta yang digunakan untuk perbandingan.

FilterIfMissing (optional)

bool

Menentukan apakah kondisi dianggap tidak terpenuhi jika baris tidak berisi kolom tersebut. Nilai default: false, yang berarti kondisi dianggap terpenuhi.

LatestVersionOnly (optional)

bool

Menentukan apakah hanya versi terbaru yang dievaluasi. Nilai default: false, yang berarti kondisi dianggap terpenuhi jika salah satu versi memenuhi kondisi.

Kondisi komposit

Panggil NewCompositeColumnCondition(lo) untuk membuat kondisi komposit, lalu panggil AddFilter untuk menambahkan subkondisi. Subkondisi dapat berupa kondisi kolom tunggal atau kondisi komposit bersarang. CompositeColumnValueFilter memiliki parameter berikut.

Name

Type

Description

Operator (required)

LogicalOperator

Operator logika. LO_AND dan LO_OR memerlukan minimal dua subkondisi. LO_NOT hanya menerima satu subkondisi.

Filters (required)

[]ColumnFilter

Subkondisi yang akan digabungkan.

Contoh

Perbarui data menggunakan kondisi komposit

Contoh berikut melakukan pembaruan hanya jika score >= 60 dan status bernilai 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)