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) |
|
Kondisi keberadaan baris. Nilai yang valid: |
Kondisi kolom tunggal
Panggil NewSingleColumnCondition(columnName, comparator, value) untuk membuat kondisi kolom tunggal. SingleColumnCondition memiliki parameter berikut.
|
Name |
Type |
Description |
|
ColumnName (required) |
|
Kolom yang akan dievaluasi. |
|
Comparator (required) |
|
Operator perbandingan. Nilai yang valid: |
|
ColumnValue (required) |
|
Nilai konstanta yang digunakan untuk perbandingan. |
|
FilterIfMissing (optional) |
|
Menentukan apakah kondisi dianggap tidak terpenuhi jika baris tidak berisi kolom tersebut. Nilai default: |
|
LatestVersionOnly (optional) |
|
Menentukan apakah hanya versi terbaru yang dievaluasi. Nilai default: |
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) |
|
Operator logika. |
|
Filters (required) |
|
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)