全部产品
Search
文档中心

Tablestore:Filter

更新时间:Jul 02, 2025

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.