全部产品
Search
文档中心

Tablestore:Tulis Data

更新时间:Jul 06, 2025

Tablestore memungkinkan Anda menulis data ke tabel dengan menulis satu baris atau beberapa baris sekaligus. Anda dapat menulis baris secara individual atau dalam kelompok sesuai kebutuhan bisnis. Topik ini menjelaskan cara menulis data ke Tablestore menggunakan Tablestore SDK for Python.

Operasi

Tablestore menyediakan operasi PutRow, UpdateRow, dan BatchWriteRow untuk menulis data. Pilih operasi yang sesuai berdasarkan kebutuhan bisnis Anda.

Operasi

Deskripsi

Skenario

Sisipkan satu baris data

Anda dapat memanggil operasi PutRow untuk menyisipkan satu baris data. Jika baris tersebut ada, Tablestore menghapus semua versi data di semua kolom dari baris yang ada dan menulis data baru.

Operasi ini cocok untuk skenario di mana Anda ingin menulis sejumlah kecil data.

Perbarui satu baris data

Anda dapat memanggil operasi UpdateRow untuk memperbarui satu baris data. Anda dapat menambahkan kolom atribut ke baris, menghapus kolom atribut dari baris, menghapus versi tertentu dari data dalam kolom atribut, atau memperbarui nilai kolom atribut. Jika baris tidak ada, baris baru akan disisipkan.

Operasi ini cocok untuk skenario di mana Anda ingin memperbarui data yang ada. Misalnya, Anda ingin menghapus kolom atribut, menghapus versi tertentu dari data, atau memperbarui nilai kolom atribut.

Tulis beberapa baris data sekaligus

Anda dapat memanggil operasi BatchWriteRow untuk menulis beberapa baris data ke satu atau lebih tabel sekaligus.

Operasi BatchWriteRow terdiri dari beberapa operasi PutRow, UpdateRow, dan DeleteRow. Saat Anda memanggil operasi BatchWriteRow, proses pembuatan suboperasi sama dengan proses pemanggilan operasi PutRow, UpdateRow, atau DeleteRow.

Operasi ini cocok untuk skenario di mana Anda ingin menulis, menghapus, atau memperbarui sejumlah besar data dan skenario di mana Anda ingin menulis, menghapus, dan memperbarui data pada saat yang bersamaan.

Prasyarat

  • Instansi OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instansi OTSClient.

  • Tabel data telah dibuat dan siap digunakan untuk penulisan data.

Sisipkan satu baris data

Operasi API

"""
Deskripsi: Operasi ini menulis satu baris data. Jumlah unit kapasitas (CUs) yang dikonsumsi oleh operasi ini dikembalikan.
table_name: nama tabel.
row: baris yang ingin Anda tulis ke tabel data, termasuk kolom kunci utama dan kolom atribut.
condition: kondisi yang harus dipenuhi untuk melakukan operasi. Setelah Anda menentukan kondisi, Tablestore memeriksa apakah kondisi yang ditentukan terpenuhi sebelum Tablestore melakukan operasi. Operasi hanya dilakukan jika kondisi terpenuhi. Parameter condition adalah instance dari kelas tablestore.metadata.Condition.
Kondisi keberadaan baris dan kondisi berdasarkan nilai kolom didukung. Jika Anda ingin menentukan kondisi keberadaan baris, Anda dapat mengatur parameter condition ke IGNORE, EXPECT_EXIST, atau EXPECT_NOT_EXIST berdasarkan kebutuhan bisnis Anda.
return_type: jenis data yang ingin Anda kembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci utama yang dapat dikembalikan. Dalam banyak kasus, parameter ini digunakan oleh fitur kolom kunci utama auto-increment.
Respons: jumlah CUs yang dikonsumsi oleh operasi dan data baris yang dikembalikan.
consumed: jumlah CUs yang dikonsumsi oleh operasi. Parameter consumed adalah instance dari kelas tablestore.metadata.CapacityUnit.
return_row: data baris yang dikembalikan, yang mungkin mencakup kolom kunci utama dan kolom atribut.
Contoh:
    primary_key = [('gid',1), ('uid',101)]
    attribute_columns = [('name','Mary'), ('mobile',111111111), ('address','City A in China'), ('age',20)]
    row = Row(primary_key, attribute_columns)
    condition = Condition('EXPECT_NOT_EXIST')
    consumed, return_row = client.put_row('myTable', row, condition)
"""
def put_row(self, table_name, row, condition = None, return_type = None, transaction_id = None):

Parameter

Parameter

Deskripsi

table_name

Nama tabel data.

row

Baris data. Parameter ini mencakup item konfigurasi berikut:

  • primary_key: informasi kunci utama tentang baris. Informasi kunci utama mencakup nama, tipe, dan nilai kolom kunci utama.

    Penting
    • Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe sebenarnya dari kolom kunci utama dalam tabel.

    • Jika kolom kunci utama adalah kolom kunci utama auto-increment, Anda hanya perlu mengatur nilai kolom kunci utama auto-increment sebagai placeholder. Untuk informasi lebih lanjut, lihat Konfigurasikan kolom kunci utama auto-increment.

  • attribute_columns: kolom atribut dari baris. Kolom atribut ditentukan oleh parameter dalam urutan berikut: nama kolom atribut, nilai kolom atribut (ColumnValue), tipe kolom atribut (ColumnType), dan timestamp. Tipe kolom atribut dan timestamp bersifat opsional.

    • Nama kolom atribut adalah nama kolom atribut, dan tipe kolom atribut adalah tipe data dari kolom atribut. Untuk informasi lebih lanjut, lihat Konvensi penamaan dan tipe data.

      Anda dapat mengatur parameter ColumnType ke ColumnType.INTEGER yang menentukan nilai INTEGER, ColumnType.STRING yang menentukan STRING yang dikodekan UTF-8, ColumnType.BINARY yang menentukan nilai BINARY, ColumnType.BOOLEAN yang menentukan nilai BOOLEAN, atau ColumnType.DOUBLE yang menentukan nilai DOUBLE. Jika tipe kolom atribut adalah BINARY, Anda harus mengatur parameter ColumnType ke ColumnType.BINARY. Dalam kasus lain, Anda dapat meninggalkan parameter ColumnType kosong.

    • Timestamp adalah nomor versi data. Untuk informasi lebih lanjut, lihat Versi data dan TTL.

      Anda dapat menggunakan nomor versi data yang dihasilkan secara otomatis oleh sistem atau menentukan nomor versi data kustom. Jika Anda tidak menentukan nomor versi data, nomor versi data yang dihasilkan secara otomatis oleh sistem digunakan.

      • Nomor versi data yang dihasilkan oleh Tablestore adalah jumlah milidetik yang telah berlalu sejak pukul 00:00:00 UTC pada 1 Januari 1970.

      • Jika Anda menentukan nomor versi kustom, pastikan bahwa nomor versi tersebut adalah timestamp 64-bit yang akurat hingga milidetik dan berada dalam rentang versi yang valid.

condition

Kondisi yang harus dipenuhi untuk melakukan operasi. Anda dapat menentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Konfigurasikan pembaruan bersyarat.

Catatan
  • RowExistenceExpectation.IGNORE menentukan bahwa data baru dimasukkan ke baris tanpa memandang apakah baris yang ditentukan ada. Jika baris yang ditentukan ada, data yang ada akan ditimpa.

  • RowExistenceExpectation.EXPECT_EXIST menentukan bahwa data baru hanya dimasukkan jika baris yang ditentukan ada. Data yang ada akan ditimpa.

  • RowExistenceExpectation.EXPECT_NOT_EXIST menentukan bahwa data hanya dimasukkan jika baris yang ditentukan tidak ada.

return_type

Jenis data yang ingin Anda kembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci utama yang dapat dikembalikan. Dalam banyak kasus, parameter ini digunakan oleh fitur kolom kunci utama auto-increment.

transaction_id

ID transaksi lokal. Jika Anda ingin menggunakan fitur transaksi lokal untuk menghapus data, Anda harus mengonfigurasi parameter ini.

Contoh

Kode contoh berikut menunjukkan cara menyisipkan satu baris data:

Catatan

Dalam contoh berikut, versi data di kolom atribut age adalah 1498184687000, yang menunjukkan 23 Juni 2017. Jika selisih antara waktu saat ini dan nilai parameter max_time_deviation lebih besar dari 1498184687000, operasi PutRow dilarang. Nilai parameter max_time_deviation ditentukan saat Anda membuat tabel.

# Tentukan nama tabel data.
table_name = '<TABLE_NAME>'

# Kolom kunci utama pertama adalah gid dan nilainya adalah integer 1. Kolom kunci utama kedua adalah uid dan nilainya adalah integer 101.
primary_key = [('gid',1), ('uid',101)]
# Baris berisi lima kolom atribut:
# Kolom atribut pertama adalah name dan nilainya adalah string John. Nomor versi data kolom atribut pertama tidak ditentukan. Sistem menggunakan waktu saat ini sebagai nomor versi data.
# Kolom atribut kedua adalah mobile dan nilainya adalah integer 1390000****. Nomor versi data kolom atribut kedua tidak ditentukan. Sistem menggunakan waktu saat ini sebagai nomor versi data.
# Kolom atribut ketiga adalah address dan nilainya adalah nilai biner China. Nomor versi data kolom atribut ketiga tidak ditentukan. Sistem menggunakan waktu saat ini sebagai nomor versi data.
# Kolom atribut keempat adalah female dan nilainya adalah nilai Boolean False. Nomor versi data kolom atribut keempat tidak ditentukan. Sistem menggunakan waktu saat ini sebagai nomor versi data.
# Kolom atribut kelima adalah age dan nilainya adalah 29.7. 1498184687000 ditentukan sebagai nomor versi data kolom atribut kelima.
attribute_columns = [('name','John'), ('mobile',1390000****),('address', bytearray('China', encoding='utf8')),('female', False), ('age', 29.7, 1498184687000)]
# Buat baris menggunakan primary_key dan attribute_columns.
row = Row(primary_key, attribute_columns)

# Tentukan kondisi keberadaan baris yang mengharapkan baris yang ditentukan tidak ada. Jika baris yang ditentukan ada, kesalahan Condition Update Failed terjadi.
condition = Condition(RowExistenceExpectation.EXPECT_NOT_EXIST)
try:
    # Jika Anda tidak menentukan parameter ReturnType saat memanggil metode put_row, nilai parameter return_row adalah None.
    consumed, return_row = client.put_row(table_name, row, condition)

    # Tampilkan jumlah CU tulis yang dikonsumsi oleh permintaan.
    print('put row berhasil, konsumsi %s write cu.' % consumed.write)
# Dalam banyak kasus, pengecualian klien disebabkan oleh kesalahan parameter atau pengecualian jaringan.
except OTSClientError as e:
    print("put row gagal, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
# Dalam banyak kasus, pengecualian server disebabkan oleh kesalahan parameter atau kesalahan throttling.
except OTSServiceError as e:
    print("put row gagal, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id()))                    

Untuk melihat kode contoh terperinci, kunjungi PutRow@GitHub.

Perbarui satu baris data

Operasi API

"""
Deskripsi: Operasi ini memperbarui satu baris data.
table_name: nama tabel.
row: baris yang ingin Anda perbarui, termasuk kolom kunci utama dan kolom atribut. Kolom kunci utama berada dalam struktur daftar dan kolom atribut berada dalam struktur dict.
condition: kondisi yang harus dipenuhi untuk melakukan operasi. Setelah Anda menentukan kondisi, Tablestore memeriksa apakah kondisi yang ditentukan terpenuhi sebelum Tablestore melakukan operasi. Operasi hanya dilakukan jika kondisi terpenuhi. Parameter condition adalah instance dari kelas tablestore.metadata.Condition.
Kondisi keberadaan baris dan kondisi berdasarkan nilai kolom didukung. Jika Anda ingin menentukan kondisi keberadaan baris, Anda dapat mengatur parameter condition ke IGNORE, EXPECT_EXIST, atau EXPECT_NOT_EXIST berdasarkan kebutuhan bisnis Anda.
return_type: jenis data yang ingin Anda kembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci utama yang dapat dikembalikan. Dalam banyak kasus, parameter ini digunakan oleh fitur kolom kunci utama auto-increment.
Respons: jumlah CUs yang dikonsumsi oleh operasi dan data baris yang ditentukan oleh return_row.
consumed: jumlah CUs yang dikonsumsi oleh operasi. Parameter consumed adalah instance dari kelas tablestore.metadata.CapacityUnit.
return_row: data baris yang dikembalikan.
Contoh:
    primary_key = [('gid',1), ('uid',101)]
    update_of_attribute_columns = {
        'put' : [('name','Jack'), ('address','City A in China')],
        'delete' : [('mobile', 1493725896147)],
        'delete_all' : [('age')],
        'increment' : [('counter', 1)]
    }
    row = Row(primary_key, update_of_attribute_columns)
    condition = Condition('EXPECT_EXIST')
    consumed = client.update_row('myTable', row, condition)
"""
def update_row(self, table_name, row, condition, return_type = None, transaction_id = None):

Parameter

Parameter

Deskripsi

table_name

Nama tabel data.

row

Baris data. Parameter ini mencakup item konfigurasi berikut:

  • primary_key: informasi kunci utama tentang baris. Informasi kunci utama mencakup nama, tipe, dan nilai kolom kunci utama.

    Penting
    • Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe sebenarnya dari kolom kunci utama dalam tabel.

    • Jika kolom kunci utama adalah kolom kunci utama auto-increment, Anda hanya perlu mengatur nilai kolom kunci utama auto-increment sebagai placeholder. Untuk informasi lebih lanjut, lihat Konfigurasikan kolom kunci utama auto-increment.

  • update_of_attribute_columns: kolom atribut yang ingin Anda perbarui.

    condition

    Kondisi yang harus dipenuhi untuk melakukan operasi. Anda dapat menentukan kondisi keberadaan baris atau kondisi berdasarkan nilai kolom. Untuk informasi lebih lanjut, lihat Konfigurasikan pembaruan bersyarat.

    return_type

    Jenis data yang ingin Anda kembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci utama yang dapat dikembalikan. Dalam banyak kasus, parameter ini digunakan oleh fitur kolom kunci utama auto-increment.

    transaction_id

    ID transaksi lokal. Jika Anda ingin menggunakan fitur transaksi lokal untuk menghapus data, Anda harus mengonfigurasi parameter ini.

    Contoh

    Kode contoh berikut menunjukkan cara memperbarui satu baris data:

    # Tentukan nama tabel data.
    table_name = '<TABLE_NAME>'
    
    # Kolom kunci utama pertama adalah gid dan nilainya adalah integer 1. Kolom kunci utama kedua adalah uid dan nilainya adalah integer 101.
    primary_key = [('gid',1), ('uid',101)]
    # Jenis pembaruan mencakup PUT, DELETE, dan DELETE_ALL.
    # PUT: menambahkan kolom atribut atau memperbarui nilai yang ada dalam kolom atribut. Dalam contoh ini, dua kolom atribut ditambahkan. Kolom pertama adalah name dan nilainya adalah David. Kolom kedua adalah address dan nilainya adalah Hongkong.
    # DELETE: menghapus versi tertentu (timestamp) dari data. Dalam contoh ini, data yang memiliki nomor versi data 1488436949003 di kolom address dihapus.
    # DELETE_ALL: menghapus kolom. Dalam contoh ini, semua versi data di kolom mobile dan age dihapus.
    update_of_attribute_columns = {
        'PUT' : [('name','David'), ('address','Hongkong')],
        'DELETE' : [('address', None, 1488436949003)],
        'DELETE_ALL' : [('mobile'), ('age')],
    }
    row = Row(primary_key, update_of_attribute_columns)
    
    # Dalam contoh ini, parameter Condition diatur ke RowExistenceExpectation.IGNORE, yang menentukan bahwa baris diperbarui tanpa memandang apakah baris ada.
    condition = Condition(RowExistenceExpectation.IGNORE, SingleColumnCondition("age", 20, ComparatorType.EQUAL)) # perbarui baris hanya jika baris ini ada
    try:
        consumed, return_row = client.update_row(table_name, row, condition)
        
        # Tampilkan jumlah CU tulis yang dikonsumsi oleh permintaan.
        print('put row berhasil, konsumsi %s write cu.' % consumed.write)
    # Dalam banyak kasus, pengecualian klien disebabkan oleh kesalahan parameter atau pengecualian jaringan.
    except OTSClientError as e:
        print("update row gagal, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
    # Dalam banyak kasus, pengecualian server disebabkan oleh kesalahan parameter atau kesalahan throttling.
    except OTSServiceError as e:
        print("update row gagal, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id()))

    Untuk melihat kode contoh terperinci, kunjungi UpdateRow@GitHub.

    Tulis beberapa baris data sekaligus

    Catatan penggunaan

    Saat memanggil operasi BatchWriteRow untuk menulis beberapa baris data sekaligus, beberapa baris mungkin gagal ditulis. Dalam situasi ini, Tablestore tidak mengembalikan pengecualian, tetapi mengembalikan BatchWriteRowResponse yang mencakup indeks dan pesan kesalahan dari baris yang gagal. Saat memanggil operasi BatchWriteRow, pastikan untuk memeriksa nilai pengembalian guna menentukan apakah semua baris berhasil ditulis. Jika nilai pengembalian tidak diperiksa, baris yang gagal ditulis mungkin terabaikan.

    Operasi API

    """
    Deskripsi: Operasi ini menulis beberapa baris data sekaligus.
    request = MiltiTableInBatchWriteRowItem()
    request.add(TableInBatchWriteRowItem(table0, row_items))
    request.add(TableInBatchWriteRowItem(table1, row_items))
    response = client.batch_write_row(request)
    response: hasil yang dikembalikan. Tipe parameter response adalah tablestore.metadata.BatchWriteRowResponse.
    """
    def batch_write_row(self, request):                   

    Contoh

    Kode contoh berikut menunjukkan cara menulis beberapa baris data sekaligus:

    put_row_items = []
    # Panggil operasi PutRow untuk menyisipkan baris.
    for i in range(0, 20):
        primary_key = [('gid',i), ('uid',i+1)]
        attribute_columns = [('name','somebody'+str(i)), ('address','somewhere'+str(i)), ('age',i)]
        row = Row(primary_key, attribute_columns)
        condition = Condition(RowExistenceExpectation.IGNORE)
        item = PutRowItem(row, condition)
        put_row_items.append(item)
    
    # Panggil operasi UpdateRow untuk memperbarui baris.
    for i in range(0, 10):
        primary_key = [('gid',i), ('uid',i+1)]
        attribute_columns = {'put': [('name','somebody'+str(i)), ('address','somewhere'+str(i)), ('age',i)]}
        row = Row(primary_key, attribute_columns)
        condition = Condition(RowExistenceExpectation.IGNORE, SingleColumnCondition("age", i, ComparatorType.EQUAL))
        item = UpdateRowItem(row, condition)
        put_row_items.append(item)
    
    # Panggil operasi DeleteRow untuk menghapus baris.
    delete_row_items = []
    for i in range(10, 20):
        primary_key = [('gid',i), ('uid',i+1)]
        row = Row(primary_key)
        condition = Condition(RowExistenceExpectation.IGNORE)
        item = DeleteRowItem(row, condition)
        delete_row_items.append(item)
    
    # Buat permintaan untuk menulis beberapa baris data sekaligus.
    request = BatchWriteRowRequest()
    request.add(TableInBatchWriteRowItem('<TABLE_NAME>', put_row_items))
    request.add(TableInBatchWriteRowItem('<DELETE_TABLE_NAME>', delete_row_items))
    
    # Saat Anda memanggil metode batch_write_row untuk menulis beberapa baris data sekaligus, pengecualian mungkin terjadi jika terdapat kesalahan seperti kesalahan parameter permintaan. Jika operasi gagal untuk sebagian baris, pengecualian mungkin tidak terjadi tetapi item internal mungkin gagal.
    try:
        result = client.batch_write_row(request)
        print('Status hasil: %s'%(result.is_all_succeed()))
    
        # Periksa hasil operasi PutRow.
        print('periksa hasil put tabel pertama:')
        succ, fail = result.get_put()
        for item in succ:
            print('Put berhasil, konsumsi %s write cu.' % item.consumed.write)
        for item in fail:
            print('Put gagal, kode kesalahan: %s, pesan kesalahan: %s' % (item.error_code, item.error_message))
    
        # Periksa hasil operasi UpdateRow.
        print('periksa hasil update tabel pertama:')
        succ, fail = result.get_update()
        for item in succ:
            print('Update berhasil, konsumsi %s write cu.' % item.consumed.write)
        for item in fail:
            print('Update gagal, kode kesalahan: %s, pesan kesalahan: %s' % (item.error_code, item.error_message))
    
        # Periksa hasil operasi DeleteRow.
        print('periksa hasil delete tabel kedua:')
        succ, fail = result.get_delete()
        for item in succ:
            print('Delete berhasil, konsumsi %s write cu.' % item.consumed.write)
        for item in fail:
            print('Delete gagal, kode kesalahan: %s, pesan kesalahan: %s' % (item.error_code, item.error_message)) 
    # Dalam banyak kasus, pengecualian klien disebabkan oleh kesalahan parameter atau pengecualian jaringan.
    except OTSClientError as e:
        print("get row gagal, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
    # Dalam banyak kasus, pengecualian server disebabkan oleh kesalahan parameter atau kesalahan throttling.
    except OTSServiceError as e:
        print("get row gagal, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id()))

    Untuk melihat kode contoh terperinci, kunjungi BatchWriteRow@GitHub.

    Pertanyaan yang Sering Diajukan

    Referensi

    • Untuk memperbarui data dalam aplikasi dengan konkurensi tinggi berdasarkan kondisi tertentu, Anda dapat menggunakan fitur pembaruan bersyarat. Untuk informasi lebih lanjut, lihat Konfigurasikan pembaruan bersyarat.

    • Untuk mengumpulkan statistik waktu nyata tentang aplikasi online, seperti jumlah tampilan halaman (PV) pada berbagai topik, Anda dapat menggunakan fitur penghitung atomik. Untuk informasi lebih lanjut, lihat Gunakan fitur penghitung atomik.

    • Untuk melakukan operasi atomik untuk menulis satu atau lebih baris data, Anda dapat menggunakan fitur transaksi lokal. Untuk informasi lebih lanjut, lihat Gunakan fitur transaksi lokal.

    • Setelah menulis data ke tabel, Anda dapat membaca atau menghapus data sesuai kebutuhan bisnis. Untuk informasi lebih lanjut, lihat Baca data dan Hapus data.