All Products
Search
Document Center

Tablestore:Filter

Last Updated:May 12, 2026

Anda dapat menggunakan filter di Tablestore untuk mempersempit hasil kueri di sisi server berdasarkan kondisi tertentu. Topik ini menjelaskan cara menggunakan filter dalam .NET SDK.

Prasyarat

Inisialisasi client Tablestore

Jenis Filter

Tablestore menyediakan dua jenis filter berikut:

  • RelationalCondition: Menentukan apakah nilai satu kolom atribut memenuhi kondisi tertentu.

  • CompositeCondition: Menggabungkan beberapa kondisi untuk menyaring data.

RelationalCondition

public class RelationalCondition : IColumnCondition

Parameter

Parameter

Tipe

Deskripsi

Operator (Wajib)

CompareOperator

Operator relasional. Operator yang didukung meliputi EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, dan LESS_EQUAL.

ColumnName (Wajib)

string

Nama kolom atribut yang akan dievaluasi.

ColumnValue (Wajib)

ColumnValue

Nilai yang akan dibandingkan.

PassIfMissing (Opsional)

bool

Mengontrol apakah baris yang tidak memiliki kolom atribut tertentu dikembalikan atau tidak. Nilai default true mengembalikan baris tersebut.

LatestVersionsOnly (Opsional)

bool

Menentukan apakah hanya versi data terbaru dari kolom atribut yang dievaluasi, meskipun terdapat beberapa versi. Nilai default adalah true.

Contoh

Contoh ini melakukan kueri rentang untuk data baris dengan primary key dalam rentang [row1, row3), lalu menggunakan filter untuk hanya mengembalikan baris di mana kolom atribut col1 bernilai val1.

try
{
    // Setel primary key awal untuk kueri.
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    // Setel primary key akhir untuk kueri. Primary key akhir bersifat eksklusif.
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row3") }
    };
    // Buat filter dengan kondisi: col1 == "val1".
    RelationalCondition relationalCondition = new RelationalCondition("col1", CompareOperator.EQUAL, new ColumnValue("val1"));

    // Panggil metode GetRange untuk membaca data baris.
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, null, relationalCondition);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // Proses respons.
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Biaya CU Baca: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Biaya CU Tulis: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Data Baris: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get Range gagal, pengecualian: {ex.Message}");
}
  • Untuk mengecualikan baris yang tidak memiliki kolom atribut tertentu, atur PassIfMissing ke false.

    relationalCondition.PassIfMissing = false;

CompositeCondition

Anda dapat menggabungkan hingga 32 kondisi.

public class CompositeCondition : IColumnCondition

Parameter

Parameter

Tipe

Deskripsi

LogicOperator (Wajib)

LogicOperator

Operator logika. Operator yang didukung adalah NOT, AND, dan OR.

subConditions (Wajib)

List<IColumnCondition>

Daftar filter yang akan digabungkan menggunakan operator logika. Daftar ini dapat mencakup objek RelationalCondition maupun CompositeCondition.

Contoh

Contoh ini menunjukkan cara melakukan kueri rentang untuk data baris dengan primary key dalam rentang [row1, row3), lalu menggunakan CompositeCondition untuk menyaring hasilnya.

try
{
    // Setel primary key awal untuk kueri.
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row1") }
    };
    // Setel primary key akhir untuk kueri. Primary key akhir bersifat eksklusif.
    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
    {
        { "id", new ColumnValue("row3") }
    };

    // Buat RelationalCondition 1: col1 == "val1".
    RelationalCondition relationalCondition1 = new RelationalCondition("col1", CompareOperator.EQUAL, new ColumnValue("val1"));
    // Buat RelationalCondition 2: col2 == "val2".
    RelationalCondition relationalCondition2 = new RelationalCondition("col2", CompareOperator.EQUAL, new ColumnValue("val2"));
    // Buat CompositeCondition 1: col1 == "val1" OR col2 == "val2".
    CompositeCondition compositeCondition1 = new CompositeCondition(LogicOperator.OR);
    compositeCondition1.AddCondition(relationalCondition1);
    compositeCondition1.AddCondition(relationalCondition2);
    // Buat RelationalCondition 3: col3 == "val3".
    RelationalCondition relationalCondition3 = new RelationalCondition("col3", CompareOperator.EQUAL, new ColumnValue("val3"));
    // Buat CompositeCondition 2, yang menggabungkan kondisi sebelumnya: (col1 == "val1" OR col2 == "val2") AND col3 == "val3".
    CompositeCondition compositeCondition2 = new CompositeCondition(LogicOperator.AND);
    compositeCondition2.AddCondition(compositeCondition1);
    compositeCondition2.AddCondition(relationalCondition3);

    // Panggil metode GetRange untuk membaca data baris.
    GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, null, compositeCondition2);
    GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);

    // Proses respons.
    Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
    Console.WriteLine($"Biaya CU Baca: {getRangeResponse.ConsumedCapacityUnit.Read}");
    Console.WriteLine($"Biaya CU Tulis: {getRangeResponse.ConsumedCapacityUnit.Write}");
    Console.WriteLine("Data Baris: ");
    foreach (Row row in getRangeResponse.RowDataList)
    {
        Console.WriteLine(row);
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Get Range gagal, pengecualian: {ex.Message}");
}

Referensi