Anda dapat menggunakan fitur pembaruan bersyarat untuk memperbarui data dalam tabel hanya jika kondisi yang ditentukan terpenuhi. Jika kondisi tidak terpenuhi, pembaruan gagal.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Instance OTSClient.
Tabel dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat Tabel dan Tulis Data.
Catatan penggunaan
Saat Anda 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 berhasil hanya jika kondisi terpenuhi.
Pembaruan bersyarat dapat dilakukan berdasarkan kondisi keberadaan baris dan kondisi berbasis kolom.
Kondisi keberadaan baris meliputi IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST.
Saat Anda memodifikasi tabel, Tablestore pertama-tama memeriksa kondisi keberadaan baris. Jika kondisi keberadaan baris tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan.
Kondisi berbasis kolom meliputi 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 berbasis kolom juga mendukung operator logika berikut: NOT, AND, dan OR. Anda dapat menentukan hingga 10 kondisi berbasis kolom untuk pembaruan bersyarat.
SingleColumnCondition mendukung perbandingan antara konstanta dan kolom. Kolom tersebut dapat berupa kolom kunci utama. SingleColumnCondition tidak mendukung perbandingan antara dua kolom atau dua konstanta.
Operator logika digunakan untuk menggabungkan subkondisi dalam CompositeCondition. Subkondisi 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 digunakan untuk menentukan IGNORE, RowExistenceExpectation_EXPECT_EXIST digunakan untuk menentukan EXPECT_EXIST, dan RowExistenceExpectation_EXPECT_NOT_EXIST digunakan untuk menentukan 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 meliputi EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<), dan LESS_EQUAL(<=). Di Tablestore, CT_EQUAL digunakan untuk menentukan EQUAL(=), CT_NOT_EQUAL digunakan untuk menentukan NOT_EQUAL(!=), CT_GREATER_THAN digunakan untuk menentukan GREATER_THAN(>), CT_GREATER_EQUAL digunakan untuk menentukan GREATER_EQUAL(>=), CT_LESS_THAN digunakan untuk menentukan LESS_THAN(<), dan CT_LESS_EQUAL digunakan untuk menentukan LESS_EQUAL(<=). |
combinator | Operator logika yang menggabungkan beberapa kondisi. Untuk informasi tentang jenis operator logika, lihat LogicalOperator. Operator logika meliputi NOT, AND, dan OR. Di Tablestore, LO_NOT digunakan untuk menentukan NOT, LO_AND digunakan untuk menentukan AND, dan LO_OR digunakan untuk menentukan OR. Jumlah subkondisi yang dapat Anda tentukan bervariasi berdasarkan operator logika yang Anda gunakan.
|
passIfMissing | Menentukan apakah akan melewati pemeriksaan kondisional ketika kolom tidak ada dalam baris. Nilai parameter ini bertipe Boolean. Nilai defaultnya adalah true, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan. Jika Anda menetapkan parameter passIfMissing ke false dan kolom tidak ada dalam baris, pemeriksaan kondisi gagal dan baris tidak memenuhi kondisi pembaruan. |
latestVersionOnly | Menentukan apakah hanya versi terbaru dari nilai yang digunakan 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 latestVersionOnly ke false dan kolom memiliki beberapa versi nilai, semua versi nilai digunakan untuk perbandingan. Dalam hal ini, jika setidaknya satu versi memenuhi kondisi, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan. |
Contoh
Perbarui baris berdasarkan kunci utama yang ditentukan. Jika baris yang ditentukan ada, nilai kolom "name" adalah "john", dan nilai kolom "addr" adalah "china", pembaruan berhasil. Jika tidak, pembaruan gagal.
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};
// Tentukan kondisi pembaruan. Tentukan bahwa data hanya dapat diperbarui jika kondisi berikut terpenuhi: baris yang ditentukan ada, nilai kolom "name" adalah "john", dan nilai kolom "addr" adalah "china".
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});