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 |
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. | |
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. | |
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:
|
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
|
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:
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:
|
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.