全部产品
Search
文档中心

Tablestore:Konfigurasikan pembaruan bersyarat

更新时间:Jul 02, 2025

Gunakan fitur pembaruan bersyarat untuk memperbarui data dalam tabel hanya jika kondisi yang ditentukan terpenuhi. Jika kondisi tidak terpenuhi, pembaruan akan gagal.

Catatan

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.

  • IGNORE: Tidak ada pemeriksaan keberadaan yang dilakukan.

  • EXPECT_EXIST: Baris diharapkan ada. Jika baris ada, kondisi terpenuhi. Jika baris tidak ada, kondisi tidak terpenuhi.

  • EXPECT_NOT_EXIST: Baris diharapkan tidak ada. Jika baris tidak ada, kondisi terpenuhi. Jika baris ada, kondisi tidak terpenuhi.

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.

  • Jika operator logika adalah NOT, Anda hanya dapat menentukan satu subkondisi.

  • Jika operator logika adalah AND atau OR, Anda harus menentukan setidaknya dua subkondisi.

pass_if_missing

Menentukan apakah akan melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris. Jenis: Boolean. Nilai valid:

  • True: melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris. Ini adalah nilai default.

  • False: tidak melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris.

latest_version_only

Menentukan apakah hanya menggunakan versi terbaru dari nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Jenis: Boolean. Nilai valid:

  • True: hanya menggunakan versi terbaru dari nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Ini adalah nilai default.

  • False: menggunakan semua versi nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Jika salah satu versi nilai memenuhi kondisi, pemeriksaan kondisi dilewati.

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)