Tablestore menyediakan operasi API untuk membaca satu baris data, beberapa baris data secara bersamaan, dan data dengan nilai primary key dalam rentang tertentu dari tabel. Saat membaca satu atau beberapa baris data, Anda harus menentukan semua nilai kolom primary key. Untuk membaca data dalam rentang tertentu, tentukan rentang untuk semua kolom primary key atau awalan primary key. Anda juga dapat menentukan atribut kolom, jumlah versi data, rentang waktu untuk kueri, dan kondisi filter.
Metode Kueri
Tablestore menyediakan operasi GetRow, BatchGetRow, dan GetRange untuk membaca data. Pilih metode kueri yang sesuai berdasarkan skenario Anda.
Untuk membaca data dari tabel dengan kolom primary key auto-increment, pastikan Anda telah mengkueri semua nilai primary key, termasuk kolom auto-increment. Untuk informasi lebih lanjut, lihat Konfigurasi kolom primary key auto-increment. Jika nilai kolom auto-increment tidak tersedia, gunakan operasi GetRange untuk menentukan rentang pembacaan berdasarkan nilai primary key kolom pertama.
Metode Kueri | Deskripsi | Skenario |
Gunakan operasi GetRow untuk membaca satu baris data. | Metode ini cocok jika Anda mengetahui semua nilai primary key dan jumlah baris yang ingin dibaca kecil. | |
Gunakan operasi BatchGetRow untuk membaca beberapa baris data dari satu atau lebih tabel. Operasi BatchGetRow terdiri dari beberapa operasi GetRow. Proses pembuatannya sama dengan operasi GetRow individu. | Metode ini cocok jika Anda mengetahui semua nilai primary key dan jumlah baris besar atau ingin membaca data dari beberapa tabel. | |
Gunakan operasi GetRange untuk membaca data dalam rentang nilai primary key tertentu. Operasi GetRange mendukung pembacaan data dalam urutan maju atau mundur. Anda dapat menentukan jumlah baris yang ingin dibaca. Jika rentang besar dan batas pemindaian tercapai, pemindaian berhenti, dan informasi tentang baris berikutnya dikembalikan untuk melanjutkan pembacaan. | Metode ini cocok jika Anda mengetahui rentang nilai primary key atau awalan primary key. null Jika awalan primary key tidak ditentukan, gunakan INF_MIN dan INF_MAX untuk memindai semua data dalam tabel. Ini memerlukan sumber daya komputasi besar. Gunakan dengan hati-hati. |
Prasyarat
Instansi OTSClient diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instansi OTSClient.
Tabel data telah dibuat dan berisi data.
Membaca satu baris data
Gunakan operasi GetRow untuk membaca satu baris data. Hasil yang mungkin diperoleh setelah memanggil operasi ini adalah:
Operasi API
"""
Deskripsi: Operasi ini membaca satu baris data.
table_name: nama tabel.
primary_key: primary key. Tipe: dict.
columns_to_get: opsional. Nama kolom yang ingin Anda kembalikan. Tipe: list. Jika Anda tidak menentukan parameter ini, semua kolom dikembalikan.
column_filter: opsional. Kondisi filter untuk kolom. Hanya baris yang memenuhi kondisi yang dikembalikan.
max_version: opsional. Jumlah maksimum versi data yang dapat dikembalikan.
time_range: opsional. Rentang versi atau versi spesifik yang ingin Anda kembalikan. Anda harus mengonfigurasi setidaknya satu dari parameter max_version dan time_range.
Respons: jumlah unit kapasitas (CUs) yang dikonsumsi oleh operasi, dan kolom primary key dan kolom atribut yang dikembalikan.
consumed: jumlah CUs yang dikonsumsi oleh operasi. Parameter consumed adalah instance dari kelas tablestore.metadata.CapacityUnit.
return_row: data baris yang dikembalikan, termasuk primary key dan kolom atribut. Tipe: list. Contoh: [('PK0',value0), ('PK1',value1)].
next_token: kolom dari mana operasi baca kolom lebar berikutnya dimulai. Tipe: binary.
Contoh:
primary_key = [('gid',1), ('uid',101)]
columns_to_get = ['name', 'address', 'age']
consumed, return_row, next_token = client.get_row('myTable', primary_key, columns_to_get)
"""
def get_row(self, table_name, primary_key, columns_to_get=None,
column_filter=None, max_version=1, time_range=None,
start_column=None, end_column=None, token=None,
transaction_id=None):Parameter
Parameter | Deskripsi |
table_name | Nama tabel data. |
primary_key | Primary key dari baris. Nilai parameter ini terdiri dari nama, tipe, dan nilai setiap kolom primary key. null Jumlah dan tipe kolom primary key yang Anda tentukan harus sama dengan jumlah dan tipe kolom primary key sebenarnya dalam tabel. |
columns_to_get | Kolom yang ingin Anda kembalikan. Anda dapat menentukan nama kolom primary key atau kolom atribut.
null
|
column_filter | Filter yang ingin Anda gunakan untuk menyaring hasil kueri di sisi server. Hanya baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Filter. null Jika Anda mengonfigurasi parameter columns_to_get dan column_filter, Tablestore mengkueri kolom yang ditentukan oleh columns_to_get, lalu mengembalikan baris yang memenuhi kondisi filter. |
max_version | Jumlah maksimum versi data yang dapat dikembalikan. null Anda harus mengonfigurasi setidaknya satu dari max_version dan time_range.
|
time_range | Rentang versi atau versi spesifik yang ingin Anda kembalikan. Untuk informasi lebih lanjut, lihat TimeRange. null Anda harus mengonfigurasi setidaknya satu dari max_version dan time_range.
Hanya satu dari specific_time dan Nilai valid parameter time_range: 0 hingga |
transaction_id | ID transaksi lokal. Jika Anda ingin menggunakan fitur transaksi lokal untuk membaca data, Anda harus mengonfigurasi parameter ini. |
Contoh
Contoh kode berikut menunjukkan cara membaca satu baris data dari tabel:
# Primary key kolom pertama adalah gid dan nilainya adalah integer 1. Primary key kolom kedua adalah uid dan nilainya adalah integer 101.
primary_key = [('gid', 1), ('uid', 101)]
# Tentukan kolom yang ingin Anda baca. Dalam contoh ini, kolom diatur ke kolom atribut name, growth, dan type. Jika Anda biarkan parameter columns_to_get kosong, semua kolom atribut dikembalikan.
columns_to_get = ['name', 'growth', 'type']
# Tentukan filter untuk kolom. Dalam contoh ini, baris di mana nilai kolom growth bukan 0.9 dan nilai kolom name adalah Hangzhou dikembalikan.
cond = CompositeColumnCondition(LogicalOperator.AND)
cond.add_sub_condition(SingleColumnCondition("growth", 0.9, ComparatorType.NOT_EQUAL))
cond.add_sub_condition(SingleColumnCondition("name", 'Hangzhou', ComparatorType.EQUAL))
try:
# Panggil operasi get_row untuk mengkueri data.
# Tentukan nama tabel. Nilai terakhir 1 menentukan bahwa hanya satu versi data yang dikembalikan.
consumed, return_row, next_token = client.get_row('<table_name>', primary_key, columns_to_get, cond, 1)
print('Baca berhasil, konsumsi %s CU baca.' % consumed.read)
print('Nilai primary key: %s' % return_row.primary_key)
print('Nilai atribut: %s' % return_row.attribute_columns)
for att in return_row.attribute_columns:
# Tampilkan kunci, nilai, dan versi setiap kolom.
print('nama:%s\tvalue:%s\ttimestamp:%d' % (att[0], att[1], att[2]))
# 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 pengecualian 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 kode lengkap, kunjungi GetRow@GitHub.
Membaca beberapa baris data secara bersamaan
Gunakan operasi BatchGetRow untuk membaca beberapa baris data dari satu atau lebih tabel. Operasi ini terdiri dari beberapa operasi GetRow.
Setiap operasi GetRow dilakukan secara independen. Tablestore mengembalikan respons untuk setiap operasi GetRow secara terpisah.
Catatan Penggunaan
Jika beberapa baris gagal dibaca saat menggunakan BatchGetRow, Tablestore tidak mengembalikan pengecualian tetapi mencakup informasi baris gagal dalam respons BatchGetRowResponse. Periksa nilai pengembalian untuk memastikan keberhasilan pembacaan.
Operasi BatchGetRow menggunakan parameter yang sama untuk semua baris. Misalnya, jika
ColumnsToGetdiatur ke [colA], hanya nilai kolom colA yang dibaca dari semua baris.Anda dapat membaca maksimal 100 baris sekaligus dengan BatchGetRow.
Operasi API
"""
Deskripsi: Operasi ini membaca beberapa baris data secara bersamaan.
request = BatchGetRowRequest()
request.add(TableInBatchGetRowItem(myTable0, primary_keys, column_to_get=None, column_filter=None))
request.add(TableInBatchGetRowItem(myTable1, primary_keys, column_to_get=None, column_filter=None))
request.add(TableInBatchGetRowItem(myTable2, primary_keys, column_to_get=None, column_filter=None))
request.add(TableInBatchGetRowItem(myTable3, primary_keys, column_to_get=None, column_filter=None))
response = client.batch_get_row(request)
response: hasil yang dikembalikan. Parameter response adalah instance dari kelas tablestore.metadata.BatchGetRowResponse.
"""
def batch_get_row(self, request):
Parameter
Untuk detail parameter, lihat tabel Parameter pada bagian "Membaca satu baris data".
Contoh
Contoh kode berikut menunjukkan cara membaca tiga baris data sekaligus dari beberapa tabel:
# Tentukan kolom yang ingin Anda kembalikan.
columns_to_get = ['name', 'mobile', 'address', 'age']
# Baca tiga baris data.
rows_to_get = []
for i in range(0, 3):
primary_key = [('gid', i), ('uid', i + 1)]
rows_to_get.append(primary_key)
# Tentukan filter untuk kolom. Dalam contoh ini, kondisi filter terpenuhi jika nilai kolom name adalah John dan nilai kolom address adalah China.
cond = CompositeColumnCondition(LogicalOperator.AND)
cond.add_sub_condition(SingleColumnCondition("name", "John", ComparatorType.EQUAL))
cond.add_sub_condition(SingleColumnCondition("address", 'China', ComparatorType.EQUAL))
# Buat permintaan untuk membaca beberapa baris data.
request = BatchGetRowRequest()
# Tentukan baris yang ingin Anda baca dari tabel. Nilai terakhir 1 menentukan bahwa versi data terbaru dibaca.
request.add(TableInBatchGetRowItem('<table_name1>', rows_to_get, columns_to_get, cond, 1))
# Tentukan baris yang ingin Anda baca dari tabel lain.
request.add(TableInBatchGetRowItem('<table_name2>', rows_to_get, columns_to_get, cond, 1))
try:
result = client.batch_get_row(request)
print('Status Hasil: %s' % (result.is_all_succeed()))
table_result_0 = result.get_result_by_table('<table_name1>')
table_result_1 = result.get_result_by_table('<table_name2>')
print('Periksa hasil tabel pertama:')
for item in table_result_0:
if item.is_ok:
print('Baca berhasil, PrimaryKey: %s, Atribut: %s' % (item.row.primary_key, item.row.attribute_columns))
else:
print('Baca gagal, kode kesalahan: %s, pesan kesalahan: %s' % (item.error_code, item.error_message))
print('Periksa hasil tabel kedua:')
for item in table_result_1:
if item.is_ok:
print('Baca berhasil, PrimaryKey: %s, Atribut: %s' % (item.row.primary_key, item.row.attribute_columns))
else:
print('Baca 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 pengecualian 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 kode lengkap, kunjungi BatchGetRow@GitHub.
Membaca data yang nilai primary key-nya berada dalam rentang tertentu
Gunakan operasi GetRange untuk membaca data dalam rentang nilai primary key tertentu.
Operasi GetRange mendukung pembacaan data dalam urutan maju atau mundur. Anda dapat menentukan jumlah baris yang ingin dibaca. Jika rentang besar dan batas pemindaian tercapai, pemindaian berhenti, dan informasi tentang baris berikutnya dikembalikan untuk melanjutkan pembacaan.
Dalam tabel Tablestore, semua baris diurutkan berdasarkan primary key. Primary key terdiri dari semua kolom primary key secara berurutan, sehingga baris tidak diurutkan berdasarkan kolom primary key tertentu.
Catatan Penggunaan
Operasi GetRange mengikuti prinsip pencocokan paling kiri. Tablestore membandingkan nilai kolom primary key secara berurutan untuk membaca data dalam rentang tertentu. Misalnya, jika primary key terdiri dari PK1, PK2, dan PK3, Tablestore memeriksa apakah nilai PK1 berada dalam rentang. Jika ya, baris tersebut dikembalikan tanpa memeriksa kolom lain.
Ukuran data yang dipindai mencapai 4 MB.
Jumlah baris yang dipindai mencapai 5.000.
Jumlah baris yang dikembalikan mencapai batas atas.
Throughput baca tidak cukup untuk membaca baris berikutnya karena throughput cadangan habis.
Setiap pemanggilan GetRange memindai data sekali. Jika ukuran data besar, pemindaian berhenti saat jumlah baris mencapai 5.000 atau ukuran data mencapai 4 MB. Tablestore tidak mengembalikan data tersisa yang memenuhi kondisi kueri. Gunakan metode paging untuk mendapatkan data tersisa.
Operasi API
"""
Deskripsi: Operasi ini membaca baris yang nilai primary key-nya berada dalam rentang tertentu.
table_name: nama tabel data.
direction: urutan di mana Anda ingin mengurutkan baris dalam respons. Tipe: string. Nilai valid: FORWARD dan BACKWARD.
inclusive_start_primary_key: primary key tempat operasi baca dimulai. Jika baris yang ditentukan ada, baris tersebut termasuk dalam respons.
exclusive_end_primary_key: primary key tempat operasi baca berakhir. Terlepas dari apakah baris yang berisi primary key akhir ada, baris tersebut dikecualikan dari respons.
columns_to_get: opsional. Nama kolom yang ingin Anda kembalikan. Tipe: list. Jika Anda tidak menentukan parameter ini, semua kolom dikembalikan.
limit: opsional. Jumlah maksimum baris yang dapat dikembalikan. Jika Anda tidak menentukan parameter ini, semua baris dikembalikan.
column_filter: opsional. Kondisi filter untuk kolom. Hanya baris yang memenuhi kondisi yang dikembalikan.
max_version: opsional. Jumlah maksimum versi data yang dapat dikembalikan. Anda harus menentukan setidaknya satu dari parameter max_version dan time_range.
time_range: opsional. Rentang versi atau versi spesifik yang ingin Anda kembalikan. Anda harus menentukan setidaknya satu dari parameter max_version dan time_range.
start_column: opsional. Kolom tempat operasi baca kolom lebar dimulai.
end_column: opsional. Kolom tempat operasi baca kolom lebar berakhir.
token: opsional. Kolom awal untuk operasi baca kolom lebar saat ini. Nilai parameter ini dikembalikan oleh operasi baca kolom lebar sebelumnya, dan dienkripsi sebagai data biner.
Respons: hasil yang memenuhi kondisi.
consumed: jumlah CUs yang dikonsumsi oleh operasi. Parameter consumed adalah instance dari kelas tablestore.metadata.CapacityUnit.
next_start_primary_key: primary key tempat Anda ingin memulai operasi GetRange berikutnya. Tipe: dict.
row_list: baris data yang dikembalikan. Format: [Row, ...].
"""
def get_range(self, table_name, direction,
inclusive_start_primary_key,
exclusive_end_primary_key,
columns_to_get=None,
limit=None,
column_filter=None,
max_version=None,
time_range=None,
start_column=None,
end_column=None,
token=None):Parameter
Parameter | Deskripsi |
table_name | Nama tabel data. |
direction | Urutan di mana Anda ingin mengurutkan baris dalam respons.
Misalnya, sebuah tabel memiliki dua nilai primary key A dan B, dan Nilai A lebih kecil dari Nilai B. Jika Anda menetapkan parameter direction ke FORWARD dan menentukan rentang |
inclusive_start_primary_key | Primary key awal dan akhir dari rentang yang akan dibaca. Primary key awal dan akhir harus berupa primary key yang valid atau titik virtual yang terdiri dari tipe data INF_MIN dan INF_MAX. Jumlah kolom untuk setiap titik virtual harus sama dengan jumlah kolom setiap primary key. INF_MIN menentukan nilai yang sangat kecil. Semua nilai lain dari tipe lain lebih besar dari INF_MIN. INF_MAX menentukan nilai yang sangat besar. Semua nilai lain dari tipe lain lebih kecil dari INF_MAX.
Baris dalam tabel diurutkan dalam urutan menaik berdasarkan nilai primary key. Rentang yang digunakan untuk membaca data adalah interval tertutup kiri, terbuka kanan. Jika data dibaca dalam arah maju, baris yang nilai primary key-nya lebih besar dari atau sama dengan nilai primary key awal tetapi lebih kecil dari nilai primary key akhir dikembalikan. |
exclusive_end_primary_key | |
limit | Jumlah maksimum baris yang ingin Anda kembalikan. Nilai parameter ini harus lebih besar dari 0. Tablestore menghentikan operasi ketika jumlah maksimum baris yang dapat dikembalikan dalam arah maju atau mundur tercapai, meskipun beberapa baris dalam rentang yang ditentukan belum dikembalikan. Anda dapat menggunakan nilai parameter next_start_primary_key yang dikembalikan dalam respons untuk membaca data dalam permintaan berikutnya. |
columns_to_get | Kolom yang ingin Anda kembalikan. Anda dapat menentukan nama kolom primary key atau kolom atribut.
null
|
max_version | Jumlah maksimum versi data yang dapat dikembalikan. null Anda harus mengonfigurasi setidaknya satu dari max_version dan time_range.
|
time_range | Rentang versi atau versi spesifik yang ingin Anda kembalikan. Untuk informasi lebih lanjut, lihat TimeRange. null Anda harus mengonfigurasi setidaknya satu dari max_version dan time_range.
Hanya satu dari specific_time dan Nilai valid parameter time_range: 0 hingga |
column_filter | Filter yang ingin Anda gunakan untuk menyaring hasil kueri di sisi server. Hanya baris yang memenuhi kondisi filter yang dikembalikan. Untuk informasi lebih lanjut, lihat Filter. null Jika Anda mengonfigurasi parameter columns_to_get dan column_filter, Tablestore mengkueri kolom yang ditentukan oleh columns_to_get, lalu mengembalikan baris yang memenuhi kondisi filter. |
next_start_primary_key | Primary key awal untuk permintaan baca berikutnya. Nilai parameter next_start_primary_key dapat digunakan untuk menentukan apakah semua data telah dibaca.
|
Contoh
Contoh berikut membaca data dengan nilai kolom primary key pertama dalam rentang tertentu, dalam urutan menaik berdasarkan kolom primary key kedua dari INF_MIN hingga INF_MAX. Sistem memeriksa parameter next_start_primary_key dalam respons. Jika tidak kosong, sistem memanggil GetRange lagi hingga parameter tersebut kosong.
# Tentukan informasi primary key awal.
inclusive_start_primary_key = [('gid', 1), ('uid', INF_MIN)]
# Tentukan informasi primary key akhir.
exclusive_end_primary_key = [('gid', 5), ('uid', INF_MAX)]
# Kueri semua kolom.
columns_to_get = []
# Tetapkan parameter limit ke 90 untuk mengembalikan maksimal 90 baris data. Jika total 100 baris memenuhi kondisi kueri, jumlah baris yang dikembalikan dalam operasi baca pertama berkisar antara 0 hingga 90. Nilai parameter next_start_primary_key tidak None.
limit = 90
# Tentukan filter untuk kolom. Dalam contoh ini, baris di mana nilai kolom address adalah China dan nilai kolom age lebih kecil dari 50 memenuhi kondisi filter.
cond = CompositeColumnCondition(LogicalOperator.AND)
# Tentukan parameter pass_if_missing untuk menentukan apakah baris memenuhi kondisi filter jika baris tidak berisi kolom tertentu.
# Jika Anda tidak menentukan parameter pass_if_missing atau menetapkan parameter ke True, baris memenuhi kondisi filter jika baris tidak berisi kolom tertentu.
# Jika Anda menetapkan parameter pass_if_missing ke False, baris tidak memenuhi kondisi filter jika baris tidak berisi kolom tertentu.
cond.add_sub_condition(SingleColumnCondition("address", 'China', ComparatorType.EQUAL, pass_if_missing = False))
cond.add_sub_condition(SingleColumnCondition("age", 50, ComparatorType.LESS_THAN, pass_if_missing = False))
try:
# Panggil operasi GetRange.
consumed, next_start_primary_key, row_list, next_token = client.get_range(
'<table_name>', Direction.FORWARD,
inclusive_start_primary_key, exclusive_end_primary_key,
columns_to_get,
limit,
column_filter=cond,
max_version=1,
time_range = (1557125059000, 1557129059000) # Tentukan bahwa nilai parameter start_time lebih besar dari atau sama dengan 1557125059000 dan nilai parameter end_time lebih kecil dari 1557129059000.
)
all_rows = []
all_rows.extend(row_list)
# Jika parameter next_start_primary_key tidak kosong, lanjutkan membaca data.
while next_start_primary_key is not None:
inclusive_start_primary_key = next_start_primary_key
consumed, next_start_primary_key, row_list, next_token = client.get_range(
'<table_name>', Direction.FORWARD,
inclusive_start_primary_key, exclusive_end_primary_key,
columns_to_get, limit,
column_filter=cond,
max_version=1
)
all_rows.extend(row_list)
# Tampilkan kolom primary key dan kolom atribut.
for row in all_rows:
print(row.primary_key, row.attribute_columns)
print('Total baris: ', len(all_rows))
# 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 pengecualian 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 kode lengkap, kunjungi GetRange@GitHub.
Tanya Jawab Umum
Referensi
Untuk mempercepat kueri data, gunakan fitur indeks sekunder atau indeks pencarian. Untuk informasi lebih lanjut, lihat Indeks Sekunder atau Indeks Pencarian.
Untuk memvisualisasikan data dalam tabel, hubungkan tabel ke DataV atau Grafana. Untuk informasi lebih lanjut, lihat Visualisasi Data.
Untuk mengunduh data dari tabel ke file lokal, gunakan DataX atau CLI Tablestore. Untuk informasi lebih lanjut, lihat Unduh Data Tablestore ke File Lokal.
Untuk menghitung dan menganalisis data dalam tabel, gunakan fitur kueri SQL Tablestore. Untuk informasi lebih lanjut, lihat Kueri SQL.
nullAnda juga dapat menggunakan mesin komputasi seperti MaxCompute, Spark, Hive, HadoopMR, Function Compute, dan Flink untuk menghitung dan menganalisis data. Untuk informasi lebih lanjut, lihat Ikhtisar.