All Products
Search
Document Center

Tablestore:Tulis data

Last Updated:Mar 19, 2026

Tablestore memungkinkan Anda menulis data ke tabel dengan menambahkan satu atau beberapa baris sekaligus. Anda dapat memilih untuk menulis baris secara individual atau dalam batch, sesuai kebutuhan bisnis Anda. Topik ini menjelaskan cara menulis data ke Tablestore menggunakan Tablestore SDK untuk Java.

Mode Penulisan

Tablestore menyediakan operasi PutRow, UpdateRow, dan BatchWriteRow untuk menulis data. Pilih operasi yang sesuai dengan kasus penggunaan Anda.

Mode Penulisan

Deskripsi

Skenario

Sisipkan satu baris data

Panggil operasi PutRow untuk menyisipkan baris baru. Jika baris tersebut sudah ada, Tablestore menghapus semua versi data di semua kolom dari baris yang ada sebelum menyisipkan baris baru.

Operasi ini cocok untuk skenario di mana Anda perlu menulis jumlah data yang kecil.

Perbarui satu baris data

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

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

Tulis beberapa baris data sekaligus

Panggil operasi BatchWriteRow untuk menulis beberapa baris atau menulis ke beberapa tabel dalam satu permintaan.

Operasi BatchWriteRow terdiri dari beberapa suboperasi PutRow, UpdateRow, dan DeleteRow. Setiap suboperasi dibuat dengan cara yang sama seperti operasi PutRow, UpdateRow, atau DeleteRow individual.

Operasi ini cocok untuk skenario di mana Anda ingin menulis, menghapus, atau memperbarui jumlah data yang besar atau melakukan operasi tulis, hapus, dan perbarui secara bersamaan.

Prasyarat

Sisipkan satu baris data

Panggil operasi PutRow untuk menyisipkan baris baru. Jika baris tersebut sudah ada, Tablestore akan menghapus semua versi data di semua kolom dari baris yang ada sebelum menyisipkan baris baru.

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 akan ditulis, termasuk kolom kunci primer dan kolom atribut.
condition: kondisi yang harus dipenuhi untuk menjalankan operasi. Tablestore memeriksa apakah kondisi terpenuhi sebelum menjalankan operasi. Operasi hanya dijalankan jika kondisi terpenuhi. Parameter condition adalah instance dari kelas tablestore.metadata.Condition.
Dua jenis kondisi didukung: kondisi keberadaan baris dan kondisi nilai kolom. Untuk kondisi keberadaan baris, atur parameter condition ke IGNORE, EXPECT_EXIST, atau EXPECT_NOT_EXIST.
return_type: jenis data yang dikembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci primer yang dapat dikembalikan. Dalam kebanyakan kasus, parameter ini digunakan untuk kolom kunci primer 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 primer 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 primer tentang baris. Informasi kunci primer mencakup nama, tipe, dan nilai kolom kunci primer.

    Penting
    • Jumlah dan tipe kolom kunci primer yang Anda tentukan harus sesuai dengan jumlah dan tipe aktual kolom kunci primer di tabel.

    • Jika kolom kunci primer adalah kolom kunci primer auto-increment, atur nilai kolom kunci primer auto-increment ke placeholder. Untuk informasi lebih lanjut, lihat Konfigurasikan kolom kunci primer auto-increment.

  • attribute_columns: kolom atribut dari baris. Setiap kolom atribut ditentukan dalam urutan berikut: nama kolom atribut, nilai kolom atribut (ColumnValue), tipe kolom atribut (ColumnType), dan stempel waktu. Tipe kolom atribut dan stempel waktu bersifat opsional.

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

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

    • Stempel waktu 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, sistem akan menggunakan nomor versi data yang dihasilkan secara otomatis.

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

      • Jika Anda menentukan nomor versi kustom, pastikan nomor versi tersebut merupakan stempel waktu 64-bit yang akurat hingga milidetik dan berada dalam rentang versi yang valid.

condition

Gunakan pembaruan bersyarat untuk menentukan kondisi keberadaan baris atau kondisi nilai kolom. Untuk informasi lebih lanjut, lihat Konfigurasikan pembaruan bersyarat.

Catatan
  • RowExistenceExpectation.IGNORE menentukan bahwa data baru disisipkan ke baris terlepas dari apakah baris yang ditentukan ada atau tidak. Jika baris yang ditentukan ada, data yang ada akan ditimpa.

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

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

return_type

Jenis data yang dikembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci primer yang dapat dikembalikan. Dalam kebanyakan kasus, parameter ini digunakan untuk kolom kunci primer auto-increment.

transaction_id

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

Contoh

Sisipkan satu baris data.

Catatan

Pada contoh berikut, versi data di kolom atribut age adalah 1498184687000, yang sesuai dengan tanggal 23 Juni 2017. Parameter `max_time_deviation` ditentukan saat Anda membuat tabel. Operasi PutRow dilarang jika selisih antara waktu server saat ini dan versi data melebihi nilai parameter `max_time_deviation`.

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

# Kolom kunci primer pertama adalah gid dan nilainya adalah integer 1. Kolom kunci primer 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 tidak ditentukan. Sistem menggunakan waktu saat ini sebagai nomor versi data.
# Kolom atribut kedua adalah mobile dan nilainya adalah integer 1390000****. Nomor versi data 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 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 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.
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, terjadi kesalahan Condition Update Failed.
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 succeed, consume %s write cu.' % consumed.write)
# Pengecualian client biasanya disebabkan oleh kesalahan parameter atau pengecualian jaringan.
except OTSClientError as e:
    print("put row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
# Pengecualian server biasanya disebabkan oleh kesalahan parameter atau kesalahan pembatasan kecepatan.
except OTSServiceError as e:
    print("put row failed, 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 kode contoh lengkap, lihat PutRow@GitHub.

Perbarui satu baris data

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

Antarmuka

"""
Deskripsi: Operasi ini memperbarui satu baris data.
table_name: nama tabel.
row: baris yang akan diperbarui, termasuk kolom kunci primer dan kolom atribut. Kolom kunci primer dalam format list. Kolom atribut dalam format dict.
condition: kondisi yang harus dipenuhi untuk menjalankan operasi. Tablestore memeriksa apakah kondisi terpenuhi sebelum menjalankan operasi. Operasi hanya dijalankan jika kondisi terpenuhi. Parameter condition adalah instance dari kelas tablestore.metadata.Condition.
Dua jenis kondisi didukung: kondisi keberadaan baris dan kondisi nilai kolom. Untuk kondisi keberadaan baris, atur parameter condition ke IGNORE, EXPECT_EXIST, atau EXPECT_NOT_EXIST.
return_type: jenis data yang dikembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci primer yang dapat dikembalikan. Dalam kebanyakan kasus, parameter ini digunakan untuk kolom kunci primer 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.
Contoh:
    primary_key = [('gid',1), ('uid',101)]
    update_of_attribute_columns = {
        'put' : [('name','Jack'), ('address','City A in China')],
        'delete' : [('mobile', None, 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 primer tentang baris. Informasi kunci primer mencakup nama, tipe, dan nilai kolom kunci primer.

    Penting
    • Jumlah dan tipe kolom kunci primer yang Anda tentukan harus sesuai dengan jumlah dan tipe aktual kolom kunci primer di tabel.

    • Jika kolom kunci primer adalah kolom kunci primer auto-increment, atur nilai kolom kunci primer auto-increment ke placeholder. Untuk informasi lebih lanjut, lihat Konfigurasikan kolom kunci primer auto-increment.

  • update_of_attribute_columns: kolom atribut yang akan diperbarui.

    • Untuk menambahkan atau memperbarui data, tentukan nama kolom atribut, nilai kolom atribut, tipe kolom atribut (opsional), dan stempel waktu (opsional).

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

      Stempel waktu adalah nomor versi data. 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, sistem akan menggunakan nomor versi data yang dihasilkan secara otomatis. Untuk informasi lebih lanjut, lihat Versi data dan TTL.

      • Saat sistem menghasilkan nomor versi untuk data secara otomatis, nomor versi default adalah stempel waktu UNIX saat ini dalam milidetik (milidetik sejak 00:00:00 UTC pada 1 Januari 1970).

      • Jika Anda menentukan nomor versi kustom, pastikan nomor versi tersebut merupakan stempel waktu 64-bit yang akurat hingga milidetik dan berada dalam rentang versi yang valid.

    • Untuk menghapus versi tertentu dari data dalam kolom atribut, tentukan hanya nama kolom atribut dan stempel waktu.

      Stempel waktu adalah bilangan bulat 64-bit, diukur dalam milidetik, yang merepresentasikan versi tertentu dari data.

    • Untuk menghapus kolom atribut, tentukan hanya nama kolom atribut.

      Catatan

      Menghapus semua kolom atribut dalam baris tidak sama dengan menghapus baris. Untuk menghapus baris, gunakan operasi DeleteRow.

condition

Gunakan pembaruan bersyarat untuk menentukan kondisi keberadaan baris atau kondisi nilai kolom.

return_type

Jenis data yang dikembalikan. Parameter return_type adalah instance dari kelas tablestore.metadata.ReturnType. Hanya kunci primer yang dapat dikembalikan. Dalam kebanyakan kasus, parameter ini digunakan untuk kolom kunci primer auto-increment.

transaction_id

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

Contoh

Perbarui satu baris data.

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

# Kolom kunci primer pertama adalah gid dan nilainya adalah integer 1. Kolom kunci primer kedua adalah uid dan nilainya adalah integer 101.
primary_key = [('gid',1), ('uid',101)]
# Pembaruan mencakup tiga bagian: 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 (stempel waktu) dari data. Dalam contoh ini, data dengan 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)

# Atur kondisi keberadaan baris ke RowExistenceExpectation.IGNORE. Artinya, baris diperbarui terlepas dari apakah baris tersebut ada atau tidak.
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 succeed, consume %s write cu.' % consumed.write)
# Pengecualian client biasanya disebabkan oleh kesalahan parameter atau pengecualian jaringan.
except OTSClientError as e:
    print("update row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
# Pengecualian server biasanya disebabkan oleh kesalahan parameter atau kesalahan pembatasan kecepatan.
except OTSServiceError as e:
    print("update row failed, 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 kode contoh lengkap, lihat UpdateRow@GitHub.

Tulis beberapa baris data sekaligus

Panggil operasi BatchWriteRow untuk menulis beberapa baris atau menulis ke beberapa tabel dalam satu permintaan.

Setiap suboperasi dalam BatchWriteRow dijalankan secara independen. Tablestore mengembalikan hasil setiap suboperasi secara terpisah.

Catatan Penggunaan

Saat Anda memanggil operasi BatchWriteRow, beberapa baris mungkin gagal ditulis. Operasi ini tidak melemparkan pengecualian untuk kegagalan parsial tersebut. Sebaliknya, BatchWriteRowResponse yang dikembalikan berisi indeks dan pesan kesalahan untuk baris yang gagal. Oleh karena itu, Anda harus memeriksa nilai kembali untuk menentukan apakah setiap baris berhasil ditulis. Jika Anda tidak memeriksa nilai kembali, operasi yang gagal tersebut mungkin terlewatkan.

Jika server mendeteksi kesalahan parameter pada beberapa operasi, operasi BatchWriteRow mungkin melemparkan pengecualian kesalahan parameter. Dalam kasus ini, tidak ada operasi dalam permintaan yang dijalankan.

Antarmuka

"""
Deskripsi: Operasi ini menulis beberapa baris data sekaligus.
request = BatchWriteRowRequest()
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

Tulis beberapa baris data.

put_row_items = []
# Tambahkan baris untuk operasi PutRow.
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)

# Tambahkan baris untuk operasi UpdateRow.
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)

# Tambahkan baris untuk operasi DeleteRow.
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))

# Panggil metode batch_write_row untuk menulis beberapa baris data sekaligus. Jika terjadi kesalahan seperti kesalahan parameter permintaan, pengecualian dilemparkan. Jika beberapa baris gagal, tidak ada pengecualian yang dilemparkan, tetapi item internal mungkin gagal.
try:
    result = client.batch_write_row(request)
    print('Result status: %s'%(result.is_all_succeed()))

    # Periksa hasil operasi PutRow.
    print('check first table\'s put results:')
    succ, fail = result.get_put()
    for item in succ:
        print('Put succeed, consume %s write cu.' % item.consumed.write)
    for item in fail:
        print('Put failed, error code: %s, error message: %s' % (item.error_code, item.error_message))

    # Periksa hasil operasi UpdateRow.
    print('check first table\'s update results:')
    succ, fail = result.get_update()
    for item in succ:
        print('Update succeed, consume %s write cu.' % item.consumed.write)
    for item in fail:
        print('Update failed, error code: %s, error message: %s' % (item.error_code, item.error_message))

    # Periksa hasil operasi DeleteRow.
    print('check second table\'s delete results:')
    succ, fail = result.get_delete()
    for item in succ:
        print('Delete succeed, consume %s write cu.' % item.consumed.write)
    for item in fail:
        print('Delete failed, error code: %s, error message: %s' % (item.error_code, item.error_message)) 
# Pengecualian client biasanya disebabkan oleh kesalahan parameter atau pengecualian jaringan.
except OTSClientError as e:
    print("get row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
# Pengecualian server biasanya disebabkan oleh kesalahan parameter atau kesalahan pembatasan kecepatan.
except OTSServiceError as e:
    print("get row failed, 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 kode contoh lengkap, lihat BatchWriteRow@GitHub.

FAQ

Referensi

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

  • Untuk mengumpulkan statistik real-time untuk aplikasi online, seperti jumlah tampilan halaman (PVs) untuk topik, Anda dapat menggunakan fitur penghitung atomik. Untuk informasi lebih lanjut, lihat Gunakan fitur penghitung atomik.

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

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