Gunakan fitur pembaruan bersyarat untuk memperbarui data dalam tabel hanya jika kondisi yang ditentukan terpenuhi. Jika kondisi tidak terpenuhi, pembaruan akan gagal.
Untuk informasi lebih lanjut tentang kesalahan yang mungkin terjadi saat menggunakan fitur pembaruan bersyarat, lihat Kode Kesalahan.
Prasyarat
Instansi OTSClient harus diinisialisasi. Untuk detail lebih lanjut, lihat Inisialisasi Instansi OTSClient.
Tabel data telah dibuat dan data telah ditulis ke dalam tabel tersebut.
Catatan penggunaan
Saat memanggil operasi PutRow, UpdateRow, DeleteRow, atau BatchWriteRow untuk memperbarui data, Anda dapat menggunakan pembaruan bersyarat untuk memeriksa kondisi keberadaan baris dan kondisi berbasis kolom. Pembaruan hanya berhasil jika kondisi terpenuhi.
Pembaruan bersyarat dapat dilakukan berdasarkan kondisi keberadaan baris dan kondisi berbasis kolom.
Kondisi keberadaan baris mencakup IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST.
Saat memodifikasi tabel data, Tablestore pertama-tama memeriksa kondisi keberadaan baris. Jika kondisi tersebut 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 seperti NOT, AND, dan OR. Anda dapat menentukan hingga 10 kondisi berbasis kolom untuk pembaruan bersyarat.
SingleColumnCondition mendukung perbandingan antara konstanta dan kolom. Kolom tersebut bisa berupa kolom kunci utama. SingleColumnCondition tidak mendukung perbandingan antara dua kolom atau dua konstanta.
Operator logika digunakan untuk menggabungkan subkondisi dalam CompositeCondition. Subkondisi tersebut 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 memeriksa kondisi keberadaan baris. Jika kondisi keberadaan baris tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan. Kondisi keberadaan baris meliputi 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.
|
column_name | Nama kolom. |
column_value | Nilai pembanding kolom. |
comparator | Operator relasional yang digunakan untuk membandingkan nilai kolom. Untuk informasi lebih lanjut, lihat ComparatorType. Operator relasional meliputi 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(<=). |
combinator | Operator logika yang digunakan untuk menggabungkan beberapa kondisi. Untuk informasi lebih lanjut, lihat LogicalOperator. Operator logika meliputi 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.
|
pass_if_missing | Menentukan apakah akan melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris. Jenis: Boolean. Nilai valid:
|
latest_version_only | Menentukan apakah hanya menggunakan versi terbaru dari nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Jenis: Boolean. Nilai valid:
|
Contoh
Berikut adalah kode contoh yang menunjukkan cara mengonfigurasi fitur pembaruan bersyarat untuk memperbarui baris data berdasarkan kunci utama yang ditentukan. Dalam contoh ini, pembaruan berhasil hanya jika baris ada dan nilai kolom age adalah 20. Jika baris tidak ada atau nilai kolom age bukan 20, pembaruan gagal.
def update_row_with_condition(client):
table_name = "<TABLE_NAME>"
primary_key = [('gid',1), ('uid',"101")]
update_of_attribute_columns = {
'PUT' : [('name','David'), ('address','Hongkong')],
'DELETE' : [('address', None, 1488436949003)],
'DELETE_ALL' : [('mobile'), ('age')],
'INCREMENT' : [('counter', -1)]
}
row = Row(primary_key, update_of_attribute_columns)
# Tentukan bahwa pembaruan berhasil hanya jika kondisi berikut terpenuhi. Jika tidak, pembaruan gagal.
# (1) Baris yang ditentukan ada.
# (2) Nilai kolom age dalam baris yang ditentukan adalah 20.
condition = Condition(RowExistenceExpectation.EXPECT_EXIST, SingleColumnCondition("age", 20, ComparatorType.EQUAL)) # Perbarui baris hanya jika baris ada.
consumed, return_row = client.update_row(table_name, row, condition)