Tablestore memungkinkan Anda membaca satu baris data atau data yang nilai kunci primernya berada dalam rentang tertentu dari tabel indeks. Jika tabel indeks berisi kolom atribut yang ingin Anda kembalikan, Anda dapat membaca langsung dari tabel indeks tersebut. Namun, jika tidak, Anda perlu mengkueri data dari tabel utama tempat tabel indeks dibuat.
Prasyarat
Client telah diinisialisasi. Untuk informasi selengkapnya, lihat Inisialisasi client Tablestore.
Indeks sekunder telah dibuat. Untuk informasi selengkapnya, lihat Buat indeks sekunder.
Perhatian
Tabel indeks hanya dapat digunakan untuk membaca data.
Kolom kunci primer pertama pada tabel indeks sekunder lokal harus sama dengan kolom kunci primer pertama pada tabel utama.
Jika kolom atribut yang akan diambil tidak ada di tabel indeks, Anda harus mencari data tersebut di tabel utama.
Membaca satu baris data
Anda dapat memanggil operasi GetRow untuk membaca satu baris data. Untuk informasi selengkapnya, lihat Membaca satu baris data.
Parameter
Saat menggunakan operasi GetRow untuk membaca data dari tabel indeks, perhatikan hal berikut:
Atur table_name ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci primer dari tabel utama ke kunci primer tabel indeks jika kolom tersebut belum didefinisikan sebagai kolom indeks. Oleh karena itu, saat menetapkan kunci primer untuk suatu baris, Anda harus menentukan baik kolom indeks maupun kolom kunci primer yang ditambahkan secara otomatis ini.
Contoh
Contoh berikut menunjukkan cara membaca satu baris data dengan kunci primer tertentu dari tabel indeks.
# Membangun kunci primer. Kolom kunci primer pertama adalah definedcol1 dengan nilai 1. Kolom kunci primer kedua adalah pk1 dengan nilai 101. Kolom kunci primer ketiga adalah kunci primer tabel data yang ditambahkan, yaitu pk2 dengan nilai 11.
# Jika Anda membaca data dari indeks sekunder lokal, kolom kunci primer pertama pada tabel indeks harus sama dengan kolom kunci primer pertama pada tabel data.
primary_key = [('definedcol1', 1), ('pk1', 101), ('pk2', 11)]
# Kolom atribut yang dikembalikan adalah definedcol2 dan definedcol3. Jika columns_to_get diatur ke [], semua kolom atribut pada tabel indeks akan dikembalikan.
columns_to_get = ['definedcol2', 'definedcol3']
# Atur filter untuk menambahkan kondisi kolom. Kondisi filter adalah nilai kolom definedcol2 tidak sama dengan 1 dan nilai kolom definedcol3 sama dengan 'test'.
cond = CompositeColumnCondition(LogicalOperator.AND)
cond.add_sub_condition(SingleColumnCondition("definedcol2", 1, ComparatorType.NOT_EQUAL))
cond.add_sub_condition(SingleColumnCondition("definedcol3", 'test', ComparatorType.EQUAL))
try:
# Panggil operasi get_row untuk mengkueri data.
# Konfigurasikan nama tabel indeks. Parameter terakhir, 1, menunjukkan bahwa hanya satu versi nilai yang dikembalikan.
consumed, return_row, next_token = client.get_row('<INDEX_NAME>', primary_key, columns_to_get, cond, 1)
print('Pembacaan berhasil, mengonsumsi %s read cu.' % consumed.read)
print('Nilai kunci primer: %s' % return_row.primary_key)
print('Nilai atribut: %s' % return_row.attribute_columns)
for att in return_row.attribute_columns:
# Cetak kunci, nilai, dan versi setiap kolom.
print('name:%s\tvalue:%s' % (att[0], att[1]))
# Terjadi pengecualian client, biasanya karena parameter tidak valid atau error jaringan.
except OTSClientError as e:
print('get row gagal, http_status:%d, error_message:%s' % (e.get_http_status(), e.get_error_message()))
# Terjadi pengecualian sisi server, biasanya karena parameter tidak valid atau error 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()))
Membaca rentang data
Anda dapat memanggil operasi GetRange untuk membaca data dalam rentang tertentu. Untuk informasi selengkapnya, lihat Membaca data dalam rentang.
Parameter
Saat menggunakan operasi GetRange untuk membaca data dari tabel indeks, perhatikan hal berikut:
Atur table_name ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci primer dari tabel utama ke kunci primer tabel indeks jika kolom tersebut belum didefinisikan sebagai kolom indeks. Oleh karena itu, saat menetapkan kunci primer awal dan akhir, Anda harus menentukan baik kolom indeks maupun kolom kunci primer yang ditambahkan secara otomatis ini.
Contoh
Contoh berikut menunjukkan cara membaca data dalam rentang kunci primer tertentu.
# Tetapkan kunci primer awal untuk kueri rentang. Jika Anda membaca data dari indeks sekunder lokal, kolom kunci primer pertama pada tabel indeks harus sama dengan kolom kunci primer pertama pada tabel data.
inclusive_start_primary_key = [('definedcol1', 1), ('pk1', INF_MIN), ('pk2', INF_MIN)]
# Tetapkan kunci primer akhir untuk kueri rentang.
exclusive_end_primary_key = [('definedcol1', 5), ('pk1', INF_MAX), ('pk2', INF_MIN)]
# Kueri semua kolom dalam tabel indeks.
columns_to_get = []
# Kembalikan maksimal 90 baris sekaligus. Jika total hasilnya 100 dan Anda mengatur limit ke 90 pada kueri pertama, kueri pertama akan mengembalikan maksimal 90 hasil dan minimal 0 hasil, tetapi next_start_primary_key tidak None.
limit = 90
# Atur filter untuk menambahkan kondisi kolom. Kondisi filter adalah nilai kolom definedcol2 kurang dari 50 dan nilai kolom definedcol3 sama dengan 'China'.
cond = CompositeColumnCondition(LogicalOperator.AND)
# Jika suatu baris tidak berisi kolom yang ditentukan, Anda harus mengonfigurasi parameter pass_if_missing untuk menentukan apakah baris tersebut memenuhi kondisi filter.
# Jika Anda tidak mengatur pass_if_missing atau mengaturnya ke True, baris yang tidak berisi kolom tersebut dianggap memenuhi kondisi filter.
# Jika Anda mengatur pass_if_missing ke False, baris yang tidak berisi kolom tersebut tidak memenuhi kondisi filter.
cond.add_sub_condition(SingleColumnCondition("definedcol3", 'China', ComparatorType.EQUAL, pass_if_missing=False))
cond.add_sub_condition(SingleColumnCondition("definedcol2", 50, ComparatorType.LESS_THAN, pass_if_missing=False))
try:
# Panggil operasi get_range.
# Tetapkan nama tabel indeks.
consumed, next_start_primary_key, row_list, next_token = client.get_range(
'<INDEX_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) # start_time lebih besar dari atau sama dengan 1557125059000, dan end_time kurang dari 1557129059000.
)
all_rows = []
all_rows.extend(row_list)
# Jika 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(
'<INDEX_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)
# Cetak kunci primer dan kolom atribut.
for row in all_rows:
print(row.primary_key, row.attribute_columns)
print('Total baris: ', len(all_rows))
# Terjadi pengecualian client, biasanya karena parameter tidak valid atau error jaringan.
except OTSClientError as e:
print('get row gagal, http_status:%d, error_message:%s' % (e.get_http_status(), e.get_error_message()))
# Terjadi pengecualian sisi server, biasanya karena parameter tidak valid atau error 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())
FAQ
Referensi
Jika Anda memiliki kebutuhan kueri multidimensi, seperti kueri pada kolom non-kunci primer, kueri kolom komposit, dan kueri fuzzy, atau kebutuhan analitik data seperti menghitung nilai maksimum, menghitung jumlah baris, dan mengelompokkan data, Anda dapat menambahkan atribut yang diperlukan sebagai bidang ke dalam indeks pencarian. Kemudian, Anda dapat menggunakan indeks pencarian tersebut untuk mengkueri dan menganalisis data. Untuk informasi selengkapnya, lihat Indeks pencarian.
Untuk mengkueri dan menganalisis data menggunakan SQL, Anda dapat menggunakan fitur kueri SQL. Untuk informasi selengkapnya, lihat Kueri SQL.