Tablestore menyaring hasil kueri di server sebelum mengembalikan hanya baris yang memenuhi kondisi filter.
Prasyarat
Instance OTSClient telah diinisialisasi. Untuk detail lebih lanjut, lihat Inisialisasi instance OTSClient.
Tabel data telah dibuat dan data telah dimasukkan ke dalam tabel tersebut.
Prosedur
Saat menggunakan operasi GetRow, BatchGetRow, atau GetRange untuk menanyakan data, Anda dapat menerapkan filter untuk mengembalikan hanya baris yang memenuhi kondisi tertentu.
Filter mencakup dua jenis: SingleColumnCondition dan CompositeColumnCondition.
SingleColumnCondition: Menentukan apakah baris dikembalikan berdasarkan nilai kolom referensi tunggal.
CompositeColumnCondition: Menentukan apakah baris dikembalikan berdasarkan kombinasi kondisi dari beberapa kolom referensi.
Batasan
Kondisi filter mendukung operator relasional (=, !=, >, >=, <, <=) dan operator logika (NOT, AND, OR). Filter dapat mencakup hingga 10 subkondisi.
Kolom referensi yang digunakan oleh filter harus termasuk dalam kolom yang dikembalikan. Jika tidak, filter tidak dapat mengevaluasi nilai kolom referensi.
Penggunaan filter pada operasi GetRow, BatchGetRow, dan GetRange tidak mengubah semantik asli atau batasan operasi tersebut.
Saat memanggil operasi GetRange, hingga 5.000 baris atau 4 MB data dapat dipindai secara bersamaan.
Jika 5.000 baris atau 4 MB data yang dipindai tidak memenuhi kondisi filter, respons baris akan kosong. Namun, parameter next_start_primary_key mungkin tetap ada. Dalam hal ini, gunakan parameter next_start_primary_key untuk melanjutkan pembacaan data sampai nilainya kosong.
Parameter
Parameter | Deskripsi |
column_name | Nama kolom referensi yang digunakan oleh filter. |
column_value | Nilai kolom referensi yang digunakan oleh filter. |
ComparatorType | Operator relasional yang digunakan oleh filter. Untuk informasi lebih lanjut tentang operator relasional, lihat ComparatorType. Operator relasional berikut didukung: EQUAL (=), NOT_EQUAL (!=), GREATER_THAN (>), GREATER_EQUAL (>=), LESS_THAN (<), dan LESS_EQUAL (<=). |
LogicOperator | Operator logika yang digunakan oleh filter. Untuk informasi tentang operator logika, lihat LogicalOperator. Operator logika berikut didukung: NOT, AND, dan OR. |
pass_if_missing | Menentukan apakah akan mengembalikan baris jika kolom referensi tidak ada dalam baris. Tipe data parameter ini adalah Boolean. Nilai defaultnya adalah True, yang menentukan bahwa baris dikembalikan jika kolom referensi tidak ada dalam baris. Jika Anda mengatur parameter pass_if_missing ke False dan kolom referensi tidak ada dalam baris, baris tersebut tidak dikembalikan. |
latest_version_only | Menentukan apakah hanya versi terbaru dari data dalam kolom referensi yang digunakan untuk perbandingan ketika kolom referensi berisi beberapa versi data. Tipe data parameter ini adalah Boolean. Nilai defaultnya adalah True, yang menentukan bahwa hanya versi terbaru dari data yang digunakan untuk perbandingan jika kolom referensi berisi beberapa versi data. Jika Anda mengatur parameter latest_version_only ke False dan kolom referensi berisi beberapa versi data, semua versi data dalam kolom digunakan untuk perbandingan. Dalam hal ini, baris dikembalikan ketika setidaknya satu versi data memenuhi kondisi filter. |
Contoh
Gunakan SingleColumnCondition untuk menyaring data
Contoh kode berikut menunjukkan cara membaca baris dari tabel data. Versi terbaru data dibaca dan disaring berdasarkan nilai kolom nama.
def get_row_with_condition(client):
# Tentukan primary key dari baris yang ingin Anda baca.
primary_key = [('uid',1), ('gid',101)]
# Tentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, semua kolom dikembalikan.
columns_to_get = []
# Tentukan bahwa baris dikembalikan ketika nilai kolom nama adalah Hangzhou.
cond = SingleColumnCondition("name", 'Hangzhou', ComparatorType.EQUAL, pass_if_missing = True)
consumed, return_row, next_token = client.get_row('Sampletable', primary_key, columns_to_get, cond, 1)
print('Baca berhasil, konsumsi %s read cu.' % 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:
print('nama:%s\tvalue:%s\ttimestamp:%d' % (att[0], att[1], att[2]))
Gunakan CompositeColumnCondition untuk menyaring data
Contoh kode berikut menunjukkan cara membaca baris dari tabel data. Data disaring berdasarkan kombinasi kondisi filter untuk nilai kolom pertumbuhan dan nama.
def get_row_with_composite_condition(client):
# Tentukan primary key dari baris yang ingin Anda baca.
primary_key = [('uid',1), ('gid',101)]
# Tentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, semua kolom dikembalikan.
columns_to_get = []
# Tentukan bahwa baris dikembalikan ketika nilai kolom pertumbuhan adalah 0,9 dan nilai kolom nama adalah Hangzhou.
cond = CompositeColumnCondition(LogicalOperator.AND)
cond.add_sub_condition(SingleColumnCondition("growth", 0.9, ComparatorType.EQUAL))
cond.add_sub_condition(SingleColumnCondition("name", 'Hangzhou', ComparatorType.EQUAL))
consumed, return_row, next_token = client.get_row('Sampletable', primary_key, columns_to_get, cond, 1)
print('Baca berhasil, konsumsi %s read cu.' % 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:
print('nama:%s\tvalue:%s\ttimestamp:%d' % (att[0], att[1], att[2]))
Referensi
Jika aplikasi perlu menggunakan atribut kolom berbeda sebagai kondisi kueri untuk menanyakan data, tentukan kolom atribut tersebut sebagai primary key dari indeks sekunder. Dengan cara ini, Anda dapat menggunakan indeks sekunder untuk menanyakan data berdasarkan atribut kolom, mempercepat proses kueri. Untuk informasi lebih lanjut, lihat Indeks Sekunder.
Untuk kebutuhan kueri multi-dimensi dan analisis data, buat indeks pencarian dan tentukan atribut yang diperlukan sebagai bidang indeks pencarian. Gunakan indeks pencarian untuk melakukan kueri berdasarkan kolom non-primary key, kueri Boolean, dan kueri fuzzy. Anda juga dapat menggunakannya untuk mendapatkan nilai maksimum dan minimum, mengumpulkan statistik jumlah baris, serta mengelompokkan hasil kueri. Untuk informasi lebih lanjut, lihat Indeks Pencarian.