全部产品
Search
文档中心

Tablestore:Gunakan filter

更新时间:Jul 02, 2025

Tablestore menyaring hasil kueri di server sebelum mengembalikan hasil yang telah disaring. Hanya baris yang memenuhi kondisi filter yang dikembalikan.

Prasyarat

Catatan penggunaan

Saat Anda memanggil operasi GetRow, BatchGetRow, atau GetRange untuk menanyakan data, Anda dapat menggunakan filter untuk hanya mengembalikan baris yang memenuhi kondisi filter.

Filter mencakup RelationalCondition dan CompositeCondition.

  • RelationalCondition: Menentukan apakah akan menyaring baris berdasarkan nilai kolom referensi.

  • CompositeCondition: Menentukan apakah akan menyaring baris dengan menggabungkan kondisi filter dari beberapa kolom referensi.

Catatan

Untuk informasi lebih lanjut tentang filter, lihat Konfigurasikan filter.

Batasan

  • Kondisi filter mendukung operator relasional (=, !=, >, >=, <, dan <=) serta operator logika (NOT, AND, dan OR). Kondisi filter dapat mencakup hingga 10 subkondisi.

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

  • Penggunaan filter pada operasi GetRow, BatchGetRow, dan GetRange tidak memengaruhi semantik asli atau batasan operasi ini.

    Saat memanggil operasi GetRange, hingga 5.000 baris atau 4 MB data dapat dipindai secara bersamaan.

    Jika 5.000 baris atau 4 MB yang dipindai tidak sesuai dengan kondisi filter, baris dalam respons akan kosong. Namun, nextStartPrimaryKey mungkin tidak kosong. Dalam hal ini, Anda perlu menggunakan nextStartPrimaryKey untuk melanjutkan membaca data sampai nextStartPrimaryKey kosong.

Parameter

Parameter

Deskripsi

ColumnName

Nama kolom referensi yang digunakan oleh filter.

ColumnValue

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.

PassIfMissing

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

Ketika PassIfMissing diatur ke false, jika kolom referensi tidak ada dalam baris, baris tersebut tidak dikembalikan.

LatestVersionsOnly

Menentukan apakah hanya versi terbaru dari data dalam kolom referensi yang digunakan untuk perbandingan saat kolom referensi berisi data dari beberapa versi. Nilai parameter ini adalah tipe Bool. Nilai defaultnya adalah true. Jika nilai default digunakan, versi terbaru dari data digunakan untuk perbandingan saat kolom referensi berisi data dari beberapa versi.

Jika nilai LatestVersionsOnly diatur ke false, semua versi data dalam kolom referensi digunakan untuk perbandingan. Jika salah satu versi data dalam kolom referensi memenuhi kondisi filter, baris tersebut dikembalikan.

Contoh

Gunakan RelationalCondition untuk menyaring data

Kode contoh berikut menunjukkan cara menggunakan RelationalCondition untuk membaca data dari tabel dan menyaringnya berdasarkan nilai kolom col0.

public void GetRowWithRelationalCondition(OTSClient otsClient)
{
    // Tentukan primary key dari baris. Primary key harus sama dengan primary key yang ditentukan dalam TableMeta saat tabel dibuat. 
    PrimaryKey primaryKey = new PrimaryKey
    {
        { "pk0", new ColumnValue(0) },
        { "pk1", new ColumnValue("abc") }
    };

    var rowQueryCriteria = new SingleRowQueryCriteria(TableName)
    {
        RowPrimaryKey = primaryKey
    };

    // Tentukan bahwa baris dikembalikan ketika nilai col0 adalah 5. 
    var filter = new RelationalCondition("col0",CompareOperator.EQUAL,new ColumnValue(5))
    {
        PassIfMissing = true
    };

    rowQueryCriteria.Filter = filter.ToFilter();
    rowQueryCriteria.AddColumnsToGet("col0");
    rowQueryCriteria.AddColumnsToGet("col1");

    GetRowRequest request = new GetRowRequest(rowQueryCriteria); 

    // Lakukan kueri. 
    GetRowResponse response = otsClient.GetRow(request);
    PrimaryKey primaryKeyRead = response.PrimaryKey;
    AttributeColumns attributesRead = response.Attribute;

    Console.WriteLine("Primary key read: ");
    foreach (KeyValuePair<string, ColumnValue> entry in primaryKeyRead)
    {
        Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
    }

    Console.WriteLine("Attributes read: ");
    foreach (KeyValuePair<string, ColumnValue> entry in attributesRead)
    {
        Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
    }

    Console.WriteLine("Get row with filter succeed.");
}

Gunakan CompositeCondition untuk menyaring data

Kode contoh berikut menunjukkan cara menggunakan CompositeCondition untuk membaca data yang memenuhi kondisi col0==0 OR col1=="ff".

public void GetRowWithCompositeCondition(OTSClient otsClient)
{
    // Tentukan primary key dari baris. Primary key harus sama dengan primary key yang ditentukan dalam TableMeta saat tabel dibuat. 
    PrimaryKey primaryKey = new PrimaryKey
    {
        { "pk0", new ColumnValue(0) },
        { "pk1", new ColumnValue("abc") }
    };

    var rowQueryCriteria = new SingleRowQueryCriteria(TableName)
    {
        RowPrimaryKey = primaryKey
        };

    // Tentukan bahwa baris dikembalikan ketika nilai col0 adalah 5, atau nilai col1 bukan ff. 
    var filter1 = new RelationalCondition("col0",
                                          CompareOperator.EQUAL,
                                          new ColumnValue(5));

    var filter2 = new RelationalCondition("col1", CompareOperator.NOT_EQUAL, new ColumnValue("ff"));

    var filter = new CompositeCondition(LogicOperator.OR);
    filter.AddCondition(filter1);
    filter.AddCondition(filter2);

    rowQueryCriteria.Filter = filter.ToFilter();
    rowQueryCriteria.AddColumnsToGet("col0");
    rowQueryCriteria.AddColumnsToGet("col1");

    GetRowRequest request = new GetRowRequest(rowQueryCriteria); 

    // Lakukan kueri. 
    GetRowResponse response = otsClient.GetRow(request);
    PrimaryKey primaryKeyRead = response.PrimaryKey;
    AttributeColumns attributesRead = response.Attribute;

    Console.WriteLine("Primary key read: ");
    foreach (KeyValuePair<string, ColumnValue> entry in primaryKeyRead)
    {
        Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
    }

    Console.WriteLine("Attributes read: ");
    foreach (KeyValuePair<string, ColumnValue> entry in attributesRead)
    {
        Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
    }

    Console.WriteLine("Get row with filter succeed.");
}

Referensi

  • Jika aplikasi perlu menggunakan kolom atribut berbeda sebagai kondisi kueri untuk menanyakan data, Anda dapat menentukan kolom atribut sebagai kolom primary key dari indeks sekunder. Dengan cara ini, Anda dapat menggunakan indeks sekunder untuk menanyakan data berdasarkan kolom atribut, 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 indeks pencarian. Kemudian, Anda dapat menanyakan dan menganalisis data menggunakan indeks pencarian. Misalnya, Anda dapat menggunakan 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, 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.