All Products
Search
Document Center

Tablestore:Filter

Last Updated:Apr 30, 2026

Tablestore mendukung penyaringan data di sisi server berdasarkan kondisi tertentu selama kueri. Gunakan filter dalam Python SDK untuk hanya mengembalikan baris yang memenuhi kriteria filter Anda.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Cara kerja filter

Filter dievaluasi di server setelah Tablestore memindai baris-baris yang sesuai dengan rentang kunci primary. Unit kapasitas baca (RCU) dikonsumsi untuk setiap baris yang dipindai, terlepas dari apakah baris tersebut lolos filter atau tidak. Untuk meminimalkan konsumsi RCU yang tidak perlu, tentukan rentang kunci primary yang tepat sebelum menerapkan filter.

Tablestore menyediakan dua jenis filter:

  • SingleColumnCondition — menyaring baris berdasarkan nilai satu kolom atribut. Gunakan ini ketika Anda perlu mencocokkan satu kolom terhadap nilai tetap.

  • CompositeColumnCondition — menggabungkan beberapa kondisi dengan operator logika (AND, OR, NOT). Gunakan ini ketika logika filter Anda melibatkan beberapa kolom atau memerlukan ekspresi majemuk. Mendukung hingga 32 kondisi.

SingleColumnCondition

Menyaring baris berdasarkan apakah satu kolom atribut memenuhi kondisi perbandingan tertentu.

class SingleColumnCondition(ColumnCondition)

Parameter

Parameter

Tipe

Deskripsi

comparator

ComparatorType

Wajib diisi. Operator relasional. Nilai yang valid: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, LESS_EQUAL.

column_name

str

Wajib diisi. Nama kolom atribut yang akan dievaluasi.

column_value

str, int, bytes, float, bool

Wajib diisi. Nilai yang akan dibandingkan.

pass_if_missing

bool

Menentukan apakah baris yang tidak berisi kolom atribut yang ditentukan harus dikembalikan. Nilai default: True.

latest_version_only

bool

Menentukan apakah hanya versi terbaru dari kolom atribut yang dievaluasi. Nilai default: True. Jika diatur ke True, kondisi hanya diperiksa terhadap versi terbaru, meskipun kolom memiliki beberapa versi.

Contoh kode

Contoh berikut menjalankan kueri rentang untuk baris dengan kunci primary dalam rentang [row1, row3) dan hanya mengembalikan baris di mana kolom atribut col1 sama dengan val1.

try:
    # Setel kunci primary awal untuk kueri.
    inclusive_start_primary_key = [('id', 'row1')]
    # Setel kunci primary akhir untuk kueri. Kunci akhir bersifat eksklusif.
    exclusive_end_primary_key = [('id', 'row3')]

    # Buat filter dengan kondisi col1 == "val1".
    singleColumnCondition = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)

    # Panggil metode get_range untuk mengkueri data.
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=singleColumnCondition)

    # Proses hasilnya.
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("Range get failed with error: %s" % e)
  • Untuk mengecualikan baris yang tidak berisi kolom atribut yang ditentukan:

    singleColumnCondition.pass_if_missing = False
  • Untuk mengevaluasi semua versi data dan mengembalikan baris jika ada versi apa pun yang memenuhi kondisi:

    singleColumnCondition.latest_version_only = False

CompositeColumnCondition

Menggabungkan beberapa kondisi filter menggunakan operator logika. Mendukung hingga 32 kondisi dan memungkinkan penumpukan objek CompositeColumnCondition untuk ekspresi kompleks.

class CompositeColumnCondition(ColumnCondition)

Parameter

Parameter

Tipe

Deskripsi

combinator

LogicalOperator

Wajib diisi. Operator logika. Nilai yang valid: NOT, AND, OR.

sub_conditions

List[ColumnCondition]

Wajib diisi. Daftar kondisi yang akan digabungkan. Setiap item dapat berupa SingleColumnCondition atau CompositeColumnCondition.

Contoh kode

Contoh berikut menjalankan kueri rentang untuk baris dengan kunci primary dalam rentang [row1, row3) dan menerapkan filter majemuk:

(col1 == "val1" OR col2 == "val2") AND col3 == "val3"

try:
    # Setel kunci primary awal untuk kueri.
    inclusive_start_primary_key = [('id', 'row1')]

    # Setel kunci primary akhir untuk kueri. Kunci akhir bersifat eksklusif.
    exclusive_end_primary_key = [('id', 'row3')]

    # Buat kondisi single-column pertama: col1 == "val1".
    singleColumnCondition1 = SingleColumnCondition('col1', 'val1', ComparatorType.EQUAL)
    # Buat kondisi single-column kedua: col2 == "val2".
    singleColumnCondition2 = SingleColumnCondition('col2', 'val2', ComparatorType.EQUAL)
    # Buat kondisi majemuk pertama: col1 == "val1" OR col2 == "val2".
    compositeColumnCondition1 = CompositeColumnCondition(LogicalOperator.OR)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition1)
    compositeColumnCondition1.add_sub_condition(singleColumnCondition2)
    # Buat kondisi single-column ketiga: col3 == "val3".
    singleColumnCondition3 = SingleColumnCondition('col3', 'val3', ComparatorType.EQUAL)
    # Buat kondisi majemuk akhir: (col1 == "val1" OR col2 == "val2") AND col3 == "val3".
    compositeColumnCondition2 = CompositeColumnCondition(LogicalOperator.AND)
    compositeColumnCondition2.add_sub_condition(compositeColumnCondition1)
    compositeColumnCondition2.add_sub_condition(singleColumnCondition3)

    # Panggil metode get_range untuk mengkueri data.
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key,
                                                                              column_filter=compositeColumnCondition2)

    # Proses hasilnya.
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("Range get failed with error: %s" % e)

Langkah berikutnya