Fitur pembaruan bersyarat memungkinkan Anda memperbarui data dalam tabel hanya jika kondisi yang ditentukan terpenuhi. Jika kondisi tidak terpenuhi, pembaruan akan gagal.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instance OTSClient.
Tabel data telah dibuat dan berisi data.
Catatan Penggunaan
Ketika menggunakan operasi PutRow, UpdateRow, DeleteRow, atau BatchWriteRow untuk memperbarui data, Anda dapat menerapkan pembaruan bersyarat untuk memeriksa kondisi keberadaan baris dan kondisi berbasis kolom. Pembaruan hanya berhasil jika kondisi tersebut terpenuhi.
Pembaruan bersyarat dapat dilakukan berdasarkan kondisi keberadaan baris dan kondisi berbasis kolom.
Kondisi keberadaan baris mencakup IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST.
Tablestore pertama-tama memeriksa kondisi keberadaan baris sebelum memodifikasi tabel data. Jika kondisi ini tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan.
Kondisi berbasis kolom mencakup SingleColumnCondition dan CompositeCondition, yang digunakan untuk menentukan apakah kondisi terpenuhi berdasarkan nilai satu atau beberapa kolom.
Kondisi berbasis kolom mendukung operator relasional berikut: =, !=, >, >=, <, dan <=. Kondisi ini juga mendukung operator logika NOT, AND, dan OR. Anda dapat menentukan hingga 10 kondisi berbasis kolom untuk pembaruan bersyarat.
SingleColumnCondition mendukung perbandingan antara konstanta dan kolom, termasuk kolom kunci utama. Namun, SingleColumnCondition tidak mendukung perbandingan antara dua kolom atau dua konstanta.
Operator logika digunakan untuk menggabungkan subkondisi dalam CompositeCondition. Subkondisi ini dapat berupa SingleColumnCondition atau CompositeCondition.
Anda dapat menggunakan pembaruan bersyarat untuk melakukan kunci optimis. Saat Anda memperbarui baris, Anda harus mendapatkan nilai kolom tertentu dan menentukan kondisi pembaruan baris berdasarkan nilai kolom tersebut. Sebagai contoh, saat Anda memperbarui nilai Kolom A dalam baris menjadi 2, Anda harus mendapatkan nilai Kolom A. Dalam contoh ini, nilai yang diperoleh adalah 1. Kemudian, Anda harus menentukan bahwa baris hanya dapat diperbarui jika nilai Kolom A adalah 1. Jika kondisi yang ditentukan terpenuhi, pembaruan berhasil. Jika baris diperbarui oleh klien lain, pembaruan gagal.
Parameter
Parameter | Deskripsi |
RowExistenceExpectation | Kondisi keberadaan baris. Saat Anda memodifikasi tabel, Tablestore pertama-tama memeriksa kondisi keberadaan baris. Jika kondisi keberadaan baris tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan. Kondisi keberadaan baris mencakup IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST. Di Tablestore, RowExistenceExpectation_IGNORE menunjukkan IGNORE, RowExistenceExpectation_EXPECT_EXIST menunjukkan EXPECT_EXIST, dan RowExistenceExpectation_EXPECT_NOT_EXIST menunjukkan EXPECT_NOT_EXIST.
|
ColumnName | Nama kolom. |
ColumnValue | Nilai pembanding kolom. |
Comparator | Operator relasional yang digunakan untuk membandingkan nilai kolom. Untuk informasi tentang jenis operator relasional, lihat ComparatorType. Operator relasional mencakup EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<), dan LESS_EQUAL(<=). Di Tablestore, CT_EQUAL menunjukkan EQUAL(=), CT_NOT_EQUAL menunjukkan NOT_EQUAL(!=), CT_GREATER_THAN menunjukkan GREATER_THAN(>), CT_GREATER_EQUAL menunjukkan GREATER_EQUAL(>=), CT_LESS_THAN menunjukkan LESS_THAN(<), dan CT_LESS_EQUAL menunjukkan LESS_EQUAL(<=). |
Operator | Operator logika yang digunakan untuk menggabungkan beberapa kondisi. Untuk informasi tentang jenis operator logika, lihat LogicalOperator. Operator logika mencakup NOT, AND, dan OR. Di Tablestore, LO_NOT menunjukkan NOT, LO_AND menunjukkan AND, dan LO_OR menunjukkan OR. Jumlah subkondisi yang dapat Anda tentukan bervariasi berdasarkan operator logika yang Anda gunakan.
|
FilterIfMissing | Menentukan apakah akan melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris. Nilai parameter ini bertipe Boolean. Nilai defaultnya adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan. Jika Anda menetapkan parameter FilterIfMissing ke true dan kolom tidak ada dalam baris, pemeriksaan kondisi gagal dan baris tidak memenuhi kondisi pembaruan. |
LatestVersionsOnly | Menentukan apakah hanya menggunakan versi terbaru dari nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Nilai parameter ini bertipe Boolean. Nilai defaultnya adalah true, yang menentukan bahwa jika kolom memiliki beberapa versi nilai, hanya versi terbaru dari nilai yang digunakan untuk perbandingan. Jika Anda menetapkan parameter LatestVersionsOnly ke false dan kolom memiliki beberapa versi nilai, semua versi nilai digunakan untuk perbandingan. Dalam hal ini, jika hanya satu versi yang memenuhi kondisi, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan. |
Contoh
Perbarui data dengan menggunakan kondisi keberadaan baris
Berikut adalah kode sampel yang menunjukkan cara memperbarui baris berdasarkan kunci utama. Jika baris yang ditentukan ada, pembaruan berhasil. Jika tidak, pembaruan gagal.
updateRowRequest := new(tablestore.UpdateRowRequest)
updateRowChange := new(tablestore.UpdateRowChange)
updateRowChange.TableName = tableName
updatePk := new(tablestore.PrimaryKey)
updatePk.AddPrimaryKeyColumn("pk1", "pk1value1")
updatePk.AddPrimaryKeyColumn("pk2", int64(2))
updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
updateRowChange.PrimaryKey = updatePk
updateRowChange.DeleteColumn("col1") // Hapus kolom col1.
updateRowChange.PutColumn("col2", int64(77)) // Tambahkan kolom col2 dengan nilai 77.
updateRowChange.PutColumn("col4", "newcol3") // Tambahkan kolom col4 dengan nilai "newcol3".
// Tentukan bahwa baris diharapkan ada.
updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
updateRowRequest.UpdateRowChange = updateRowChange
_, err := client.UpdateRow(updateRowRequest)
if err != nil {
fmt.Println("update gagal dengan kesalahan:", err)
} else {
fmt.Println("pembaruan baris selesai")
}Perbarui data dengan menggunakan kondisi keberadaan baris dan kondisi berbasis kolom
Perbarui baris dengan menggunakan kondisi
updateRowRequest := new(tablestore.UpdateRowRequest) updateRowChange := new(tablestore.UpdateRowChange) updateRowChange.TableName = tableName updatePk := new(tablestore.PrimaryKey) updatePk.AddPrimaryKeyColumn("pk1", "pk1value1") updateRowChange.PrimaryKey = updatePk updateRowChange.PutColumn("col2", int64(77)) // Tambahkan kolom col2 dengan nilai 77. // Tentukan bahwa nilai yang diharapkan dari kolom col5 adalah 3. clCondition1 := tablestore.NewSingleColumnCondition("col5", tablestore.CT_EQUAL, int64(3)) // Nilai default dari parameter FilterIfMissing adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati. // Jika Anda ingin menentukan bahwa pemeriksaan kondisi gagal jika kolom tidak ada dalam baris, tetapkan parameter FilterIfMissing ke true. //clCondition1.FilterIfMissing = true // Tentukan bahwa baris diharapkan ada. updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST) updateRowChange.SetColumnCondition(clCondition1) updateRowRequest.UpdateRowChange = updateRowChange _, err := client.UpdateRow(updateRowRequest) if err != nil { fmt.Println("update gagal dengan kesalahan:", err) } else { fmt.Println("pembaruan baris selesai") }Hapus baris dengan menggunakan kondisi
Berikut adalah kode sampel yang menunjukkan cara menghapus baris berdasarkan kunci utama. Jika baris yang ditentukan ada dan nilai kolom col2 adalah 3, pembaruan berhasil. Jika tidak, pembaruan gagal.
deleteRowReq := new(tablestore.DeleteRowRequest) deleteRowReq.DeleteRowChange = new(tablestore.DeleteRowChange) deleteRowReq.DeleteRowChange.TableName = tableName deletePk := new(tablestore.PrimaryKey) deletePk.AddPrimaryKeyColumn("pk1", "pk1value1") deletePk.AddPrimaryKeyColumn("pk2", int64(2)) deletePk.AddPrimaryKeyColumn("pk3", []byte("pk3")) deleteRowReq.DeleteRowChange.PrimaryKey = deletePk // Tentukan bahwa baris diharapkan ada. deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST) // Tentukan bahwa nilai yang diharapkan dari kolom col2 adalah 3. clCondition1 := tablestore.NewSingleColumnCondition("col2", tablestore.CT_EQUAL, int64(3)) // Nilai default dari parameter FilterIfMissing adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati. // Jika Anda ingin menentukan bahwa pemeriksaan kondisi gagal jika kolom tidak ada dalam baris, tetapkan parameter FilterIfMissing ke true. //clCondition1.FilterIfMissing = true deleteRowReq.DeleteRowChange.SetColumnCondition(clCondition1) _, err := client.DeleteRow(deleteRowReq) if err != nil { fmt.Println("penghapusan gagal dengan kesalahan:", err) } else { fmt.Println("penghapusan baris selesai") }