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
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 : IColumnConditionContoh
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
PassIfMissingkefalse.relationalCondition.PassIfMissing = false;
CompositeCondition
Anda dapat menggabungkan hingga 32 kondisi.
public class CompositeCondition : IColumnConditionContoh
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}");
}