全部产品
Search
文档中心

Tablestore:Gunakan filter

更新时间:Jul 06, 2025

Tablestore menyaring hasil kueri di server sebelum mengembalikan hanya baris yang memenuhi kondisi filter.

Prasyarat

Metode

Saat menggunakan operasi GetRow, BatchGetRow, atau GetRange untuk menanyakan data, Anda dapat menerapkan filter agar hanya baris yang memenuhi kondisi tertentu yang dikembalikan.

Filter mencakup SingleColumnValueFilter dan CompositeColumnValueFilter.

  • SingleColumnValueFilter: Menentukan apakah baris akan dikembalikan berdasarkan nilai dari kolom referensi.

  • CompositeColumnValueFilter: Menentukan apakah baris akan dikembalikan berdasarkan kombinasi kondisi filter dari beberapa kolom referensi.

Catatan

Untuk detail lebih lanjut tentang filter, lihat Konfigurasikan filter.

Catatan penggunaan

  • Kondisi filter mendukung operator relasional berikut: =, !=, >, >=, <, dan <=. Kondisi filter juga mendukung operator logika NOT, AND, dan OR. Anda dapat menentukan hingga 10 subkondisi dalam sebuah kondisi filter.

  • Kolom referensi yang digunakan oleh filter harus termasuk dalam kolom yang dikembalikan. Jika tidak, filter tidak dapat menanyakan nilai dari kolom referensi.

  • Penggunaan filter pada operasi GetRow, BatchGetRow, dan GetRange tidak mempengaruhi semantik asli atau batasan dari operasi tersebut.

    Saat menggunakan operasi GetRange, hingga 5.000 baris atau 4 MB data dapat dipindai dalam satu waktu.

    Jika data yang dipindai tidak sesuai dengan kondisi filter, respons baris akan kosong. Namun, parameter next_start_primary_key mungkin tetap ada. Jika parameter ini tidak kosong, gunakan nilainya untuk melanjutkan pemindaian sampai NextStartPrimaryKey kosong.

Parameter

Anda dapat mengonfigurasi parameter column_filter untuk menggunakan filter dalam operasi GetRow, BatchGetRow, dan GetRange.

    'column_filter' => <ColumnFilter>
  • SingleColumnValueFilter

    SingleColumnValueFilter memungkinkan Anda membandingkan kolom dengan konstanta. Perbandingan antara dua kolom atau dua konstanta tidak didukung.

        [
            'column_name' => '<string>',
            'value' => <ColumnValue>,
            'comparator' => <ComparatorType>,
            'pass_if_missing' => true || false,
            'latest_version_only' => true || false
        ]
            
  • CompositeColumnValueFilter

    CompositeColumnValueFilter memiliki struktur pohon, terdiri dari node logical_operator dan node daun SingleColumnValueFilter.

        [
            'logical_operator' => <LogicalOperator>
            'sub_filters' => [
                <ColumnFilter>,
                <ColumnFilter>,
                <ColumnFilter>,
                // kondisi lainnya
            ]
        ]
            

Parameter

Deskripsi

column_name

Nama kolom referensi yang digunakan oleh filter.

value

Nilai kolom referensi yang digunakan oleh filter.

Tentukan parameter ini dalam format [Value, Type]. Nilai valid untuk Type adalah ColumnTypeConst::CONST_INTEGER, ColumnTypeConst::CONST_STRING, ColumnTypeConst::CONST_BINARY, ColumnTypeConst::CONST_BOOLEAN, dan ColumnTypeConst::CONST_DOUBLE, yang masing-masing menentukan tipe INTEGER, STRING (string yang dienkripsi UTF-8), BINARY, BOOLEAN, dan DOUBLE. Jika tipenya adalah BINARY, tipe tersebut harus ditentukan. Jika tipe bukan BINARY, Anda hanya perlu menentukan nilainya.

Jika tipenya adalah BINARY, Anda harus menentukan baik tipe maupun nilai.

comparator

Operator relasional yang digunakan oleh filter. Untuk informasi lebih lanjut tentang operator relasional, lihat ComparatorType.

Nilai valid: ComparatorTypeConst::CONST_EQUAL, ComparatorTypeConst::CONST_NOT_EQUAL, ComparatorTypeConst::CONST_GREATER_THAN, ComparatorTypeConst::CONST_GREATER_EQUAL, ComparatorTypeConst::CONST_LESS_THAN, dan ComparatorTypeConst::CONST_LESS_EQUAL.

logical_operator

Operator logika yang digunakan oleh filter. Untuk informasi tentang operator logika, lihat LogicalOperator.

Nilai valid: LogicalOperatorConst::CONST_NOT, LogicalOperatorConst::CONST_AND, dan LogicalOperatorConst::CONST_OR.

pass_if_missing

Menentukan apakah akan mengembalikan baris jika kolom referensi tidak ada dalam baris. Nilai parameter ini adalah Boolean. Nilai defaultnya adalah true, yang menunjukkan bahwa jika kolom referensi tidak ada dalam baris, baris tersebut dikembalikan.

Nilai false menunjukkan bahwa jika 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. Nilai parameter ini adalah Boolean. Nilai defaultnya adalah true, yang menunjukkan bahwa jika kolom referensi berisi beberapa versi data, hanya versi terbaru dari data yang digunakan untuk perbandingan.

Nilai false menunjukkan bahwa jika kolom referensi memiliki beberapa versi data, semua versi data digunakan untuk perbandingan. Jika satu versi data dalam kolom referensi memenuhi kondisi filter, baris tersebut dikembalikan.

sub_filters

Node anak dapat berupa SingleColumnValueFilter atau CompositeColumnValueFilter.

Operator logika yang berbeda dari node dalam memerlukan jumlah node anak yang berbeda yang dapat dilampirkan.

  • Jika operator logika dari node dalam adalah NOT, hanya satu node anak yang dapat dilampirkan.

  • Jika operator logika dari node dalam adalah AND atau OR, beberapa node anak dapat dilampirkan.

Contoh

Gunakan SingleColumnValueFilter untuk menyaring data

Contoh kode berikut menunjukkan cara membaca satu baris data dari tabel dan mengembalikan baris tersebut jika nilai kolom Col0 adalah 0.

$request = [
    'table_name' => 'MyTable',
    'primary_key' => [ // Tentukan primary key. 
        ['PK0', 123],
        ['PK1', 'abc']
    ],
    'max_versions' => 1,                     // Setel parameter ini ke 1 untuk membaca data versi terbaru. 
    'columns_to_get' => ['Col0']             // Tentukan kolom yang ingin Anda baca. 
    
    // Tentukan filter untuk mengembalikan baris jika nilai kolom Col0 adalah 0. 
    'column_filter' => [
        'column_name' => 'col0',
        'value' => 0,
        'comparator' => ComparatorTypeConst::CONST_EQUAL,
        'pass_if_missing' => false                         / Jika kolom Col0 tidak ada dalam baris, baris tersebut tidak dikembalikan. 
        'latest_version_only' => true                      // Tentukan bahwa hanya versi terbaru yang digunakan untuk perbandingan. 
    ]
];
$response = $otsClient->getRow ($request); 

Gunakan CompositeColumnValueFilter untuk menyaring data

Contoh kode berikut menunjukkan cara membaca satu baris data dari tabel dan mengembalikan baris tersebut jika nilai kolom Col0 adalah 0 dan nilai kolom Col1 kurang dari 100.

// Atur kondisi composite1 menjadi (Col0 == 0) AND (Col1 > 100). 
    $composite1 = [
        'logical_operator' => LogicalOperatorConst::CONST_AND,
        'sub_filters' => [
            [
                'column_name' => 'Col0',
                'value' => 0,
                'comparator' => ComparatorTypeConst::CONST_EQUAL
            ],
            [
                'column_name' => 'Col1',
                'value' => 100,
                'comparator' => ComparatorTypeConst::CONST_GREATER_THAN
            ]
        ]
    ];
    // Atur kondisi composite2 menjadi ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10). 
    $composite2 = [
        'logical_operator' => LogicalOperatorConst::CONST_OR,
        'sub_filters' => [
            $composite1,
            [
                'column_name' => 'Col2',
                'value' => 10,
                'comparator' => ComparatorTypeConst::CONST_LESS_EQUAL
            ]
        ]
    ];  
                    

Referensi

  • Jika aplikasi perlu menggunakan kolom atribut yang berbeda sebagai kondisi kueri, Anda dapat menentukan kolom atribut ini sebagai kolom primary key dari indeks sekunder untuk mempercepat kueri data. Untuk informasi lebih lanjut, lihat Indeks Sekunder.

  • Jika bisnis Anda memerlukan kueri multi-dimensi dan analisis data, Anda dapat membuat indeks pencarian dan menentukan kolom atribut yang diperlukan sebagai bidang dari indeks pencarian. Kemudian, Anda dapat menanyakan dan menganalisis data menggunakan indeks pencarian. Sebagai contoh, Anda dapat menggunakan indeks pencarian untuk melakukan kueri berdasarkan kolom non-primary key, kueri Boolean, dan kueri fuzzy. Anda juga dapat menggunakan indeks pencarian untuk mendapatkan nilai maksimum dan minimum, mengumpulkan statistik jumlah baris, dan mengelompokkan hasil kueri. Untuk informasi lebih lanjut, lihat Indeks Pencarian.

  • Anda dapat menggunakan fitur kueri SQL untuk menanyakan dan menganalisis data dalam tabel. Untuk informasi lebih lanjut, lihat Kueri Data.