Tablestore menyaring hasil kueri di server sebelum mengembalikan hasil yang telah disaring. Hanya baris yang memenuhi kondisi filter yang dikembalikan.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
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.
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.