Tablestore memungkinkan Anda membaca satu baris data atau data dengan nilai kunci primer dalam rentang tertentu dari tabel indeks. Jika tabel indeks mencakup kolom atribut yang ingin dikembalikan, Anda dapat membaca langsung dari tabel indeks. Jika tidak, Anda perlu mengambil data dari tabel utama tempat indeks dibuat.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Indeks sekunder telah dibuat. Untuk informasi lebih lanjut, lihat Buat indeks sekunder.
Catatan penggunaan
Anda hanya dapat menggunakan tabel indeks untuk membaca data.
Kolom kunci primer pertama dari indeks sekunder lokal harus sama dengan kolom kunci primer pertama dari tabel utama.
Jika kolom atribut yang ingin dikembalikan tidak ada dalam tabel indeks, Anda perlu mengambil data dari tabel utama tempat indeks dibuat untuk mendapatkan kolom atribut tersebut.
Baca satu baris data
Anda dapat memanggil operasi GetRow untuk membaca satu baris data. Untuk informasi lebih lanjut, lihat Baca satu baris data.
Parameter
Saat memanggil operasi GetRow untuk membaca data dari tabel indeks, perhatikan hal-hal berikut:
Atur table_name ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci primer tabel utama yang tidak ditentukan sebagai kolom indeks ke tabel indeks sebagai kolom kunci primer tambahan. Oleh karena itu, saat menentukan kolom kunci primer suatu baris dalam tabel indeks, Anda harus menyertakan kolom indeks dan kolom kunci primer tabel utama.
Contoh
Kode sampel berikut menunjukkan cara membaca baris data dalam tabel indeks berdasarkan kunci primernya:
# Konstruksi kunci primer. Kolom kunci primer tabel indeks terdiri dari definedcol1, pk1, dan pk2. pk2 adalah kolom kunci primer tabel data yang tidak ditentukan sebagai kolom indeks tabel indeks. Ketiga kolom kunci primer bertipe INTEGER. Nilai kunci primer berdasarkan mana Anda ingin membaca data adalah 1 pada kolom definedcol1, 101 pada kolom pk1, dan 11 pada kolom pk2.
# Jika Anda ingin membaca data dari indeks sekunder lokal, kolom kunci primer pertama tabel indeks harus sama dengan kolom kunci primer pertama tabel data.
primary_key = [('definedcol1', 1), ('pk1', 101), ('pk2', 11)]
# Tentukan kolom atribut tabel indeks yang ingin Anda kembalikan. Dalam contoh ini, definedcol2 dan definedcol3 ditentukan. Jika Anda mengatur parameter columns_to_get ke [], semua kolom atribut tabel indeks dikembalikan.
columns_to_get = ['definedcol2', 'definedcol3']
# Tentukan filter untuk kolom. Dalam contoh ini, filter digunakan untuk mengembalikan baris di mana nilai kolom definedcol2 tidak sama dengan 1, dan nilai kolom definedcol3 adalah '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 menanyakan data.
# Tentukan nama tabel indeks. Nilai 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('Baca berhasil, konsumsi %s CU baca.' % 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:
# Tampilkan kunci, nilai, dan versi setiap kolom.
print('nama:%s\tnilai:%s' % (att[0], att[1]))
# 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 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()))
Baca data yang nilai kunci primernya berada dalam rentang tertentu
Anda dapat memanggil operasi GetRange untuk membaca data dengan nilai kunci primer dalam rentang tertentu. Untuk informasi lebih lanjut, lihat Baca data yang nilai kunci primernya berada dalam rentang tertentu.
Parameter
Saat memanggil operasi GetRange untuk membaca data dari tabel indeks, perhatikan hal-hal berikut:
Atur table_name ke nama tabel indeks.
Tablestore secara otomatis menambahkan kolom kunci primer tabel utama yang tidak ditentukan sebagai kolom indeks ke tabel indeks sebagai kolom kunci primer tambahan. Oleh karena itu, saat menentukan kunci primer awal dan akhir dari rentang yang ingin diambil, Anda harus menyertakan kolom indeks dan kolom kunci primer tabel utama.
Contoh
Kode sampel berikut menunjukkan cara membaca data dengan nilai kunci primer dalam rentang tertentu dari indeks sekunder:
# Konstruksi kunci primer awal dari rentang. Jika Anda ingin membaca data dari indeks sekunder lokal, kolom kunci primer pertama tabel indeks harus sama dengan kolom kunci primer pertama tabel data.
inclusive_start_primary_key = [('definedcol1', 1), ('pk1', INF_MIN), ('pk2', INF_MIN)]
# Konstruksi kunci primer akhir dari rentang.
exclusive_end_primary_key = [('definedcol1', 5), ('pk1', INF_MAX), ('pk2', INF_MIN)]
# Tentukan bahwa semua kolom baris yang memenuhi kondisi query dikembalikan.
columns_to_get = []
# Atur parameter limit ke 90 untuk mengembalikan maksimal 90 baris data. Jika total 100 baris memenuhi kondisi query, jumlah baris yang dikembalikan dalam operasi baca pertama berkisar antara 0 hingga 90. Nilai parameter next_start_primary_key bukan None.
limit = 90
# Tentukan filter untuk kolom. Dalam contoh ini, filter digunakan untuk mengembalikan baris di mana nilai kolom definedcol2 lebih kecil dari 50, dan nilai kolom definedcol3 adalah 'China'.
cond = CompositeColumnCondition(LogicalOperator.AND)
# Tentukan parameter pass_if_missing untuk menentukan apakah sebuah baris memenuhi kondisi filter jika baris tersebut tidak mengandung kolom tertentu.
# Jika Anda tidak menentukan parameter pass_if_missing atau mengatur parameter ke True, sebuah baris memenuhi kondisi filter jika baris tersebut tidak mengandung kolom tertentu.
# Jika Anda mengatur parameter pass_if_missing ke False, sebuah baris tidak memenuhi kondisi filter jika baris tersebut tidak mengandung kolom tertentu.
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.
# Tentukan 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) # Tentukan rentang waktu data. Dalam contoh ini, waktu mulai lebih besar dari atau sama dengan 1557125059000. Waktu akhir 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(
'<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)
# Tampilkan kolom kunci primer 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 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
Untuk kebutuhan kueri multi-dimensi dan analisis data, Anda dapat membuat indeks pencarian dan menentukan atribut yang diperlukan sebagai bidang indeks pencarian. Kemudian, Anda dapat menggunakan indeks pencarian untuk menjalankan kueri berdasarkan kolom non-kunci primer, kueri Boolean, kueri fuzzy, serta mendapatkan nilai maksimum dan minimum, statistik jumlah baris, dan pengelompokan hasil kueri. Untuk informasi lebih lanjut, lihat Indeks pencarian.
Jika Anda ingin menjalankan pernyataan SQL untuk menanyakan dan menganalisis data, Anda dapat menggunakan fitur kueri SQL. Untuk informasi lebih lanjut, lihat Kueri SQL.