Tablestore menyaring hasil kueri di server sebelum mengembalikan hanya baris yang memenuhi kondisi filter.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Tabel data telah dibuat dan data telah ditulis ke dalam tabel tersebut.
Metode
Saat menggunakan operasi GetRow, BatchGetRow, atau GetRange untuk menanyakan data, Anda dapat menerapkan filter untuk mengembalikan hanya baris yang memenuhi kondisi tertentu.
Filter mencakup SingleColumnValueFilter dan CompositeColumnValueFilter.
SingleColumnValueFilter: Menentukan apakah baris akan dikembalikan berdasarkan nilai kolom referensi.
CompositeColumnValueFilter: Menentukan apakah baris akan dikembalikan berdasarkan kombinasi kondisi filter dari beberapa kolom referensi.
Untuk informasi lebih lanjut tentang filter, lihat Konfigurasi filter.
Catatan penggunaan
Kondisi filter mendukung operator relasional (=, !=, >, >=, <, <=) serta operator logika (NOT, AND, OR). Kondisi filter dapat mencakup hingga 10 subkondisi.
Kolom referensi yang digunakan oleh filter harus termasuk dalam hasil kueri. Jika kolom tertentu tidak disertakan dalam pembacaan data, filter tidak dapat menanyakan nilai kolom tersebut.
Saat menggunakan operasi GetRange, hingga 5.000 baris atau 4 MB data dapat dipindai dalam satu waktu.
Jika tidak ada data yang sesuai dengan kondisi filter dalam rentang pemindaian, baris yang dikembalikan akan kosong. Namun, NextStartPrimaryKey mungkin tetap memiliki nilai. Jika NextStartPrimaryKey tidak kosong, gunakan nilai parameter ini untuk melanjutkan pemindaian sampai nilai pengembalian NextStartPrimaryKey kosong.
Parameter
Parameter | Diperlukan | Deskripsi |
ColumnName | Ya | Nama kolom referensi yang digunakan oleh filter. |
ColumnValue | Ya | Nilai kolom referensi yang digunakan oleh filter. |
ComparatorType | Ya | 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 (<=). Anda dapat menggunakan |
LogicOperator | Tidak | Operator logika yang digunakan oleh filter. Untuk informasi tentang operator logika, lihat LogicalOperator. Operator logika mencakup NOT, AND, dan OR. Di Tablestore, |
FilterIfMissing | Tidak | Menentukan apakah akan mengembalikan baris jika kolom referensi tidak ada di baris tersebut. Tipe: Boolean. Nilai valid:
|
LatestVersionOnly | Tidak | Menentukan apakah hanya versi terbaru dari data di kolom referensi yang digunakan untuk perbandingan saat kolom referensi berisi beberapa versi data. Tipe: Boolean. Nilai valid:
|
Contoh
Gunakan SingleColumnValueFilter untuk menyaring data
Berikut adalah contoh kode untuk membaca baris dari tabel data. Dalam contoh ini, kolom c1 digunakan sebagai kolom referensi untuk menyaring data, dan versi terbaru dari data dibaca.
func GetRowWithFilter(client *tablestore.TableStoreClient, tableName string) {
fmt.Println("mulai mendapatkan baris")
pk := new(tablestore.PrimaryKey)
pk.AddPrimaryKeyColumn("pk1", "pk1value1")
pk.AddPrimaryKeyColumn("pk2", int64(2))
pk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
// Tetapkan kolom referensi ke kolom c1, nilai kolom referensi ke Zhejiang, dan parameter FilterIfMissing ke false.
condition := tablestore.NewSingleColumnCondition("c1", tablestore.ComparatorType(tablestore.CT_EQUAL), "Zhejiang")
condition.FilterIfMissing = false
criteria := &tablestore.SingleRowQueryCriteria{
TableName: tableName,
PrimaryKey: pk,
MaxVersion: 1,
Filter: condition,
}
getResp, err := client.GetRow(&tablestore.GetRowRequest{SingleRowQueryCriteria: criteria})
if err != nil {
fmt.Println("getrow gagal dengan kesalahan:", err)
} else {
colMap := getResp.GetColumnMap()
if len(colMap.Columns) > 0 {
fmt.Println("panjangnya adalah ", len(colMap.Columns))
fmt.Println("hasil baris col0 adalah ", getResp.Columns[0].ColumnName, getResp.Columns[0].Value)
} else {
fmt.Println("Tidak ada data yang memenuhi kondisi.")
}
}
}Gunakan CompositeColumnValueFilter untuk menyaring data
Berikut adalah contoh kode untuk membaca baris dari tabel data. Dalam contoh ini, kolom c1 dan c2 digunakan sebagai kolom referensi. Baris dikembalikan jika nilai kolom c1 adalah Zhejiang dan nilai kolom c2 adalah Hangzhou.
func GetRowWithCompositeColumnValueFilter(client *tablestore.TableStoreClient, tableName string) {
fmt.Println("mulai mendapatkan baris")
pk := new(tablestore.PrimaryKey)
pk.AddPrimaryKeyColumn("pk1", "pk1value1")
pk.AddPrimaryKeyColumn("pk2", int64(2))
pk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
// Tentukan bahwa kondisi filter terpenuhi ketika nilai kolom c1 adalah Zhejiang dan nilai kolom c2 adalah Hangzhou.
filter := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
filter1 := tablestore.NewSingleColumnCondition("c1", tablestore.CT_EQUAL, "Zhejiang")
filter2 := tablestore.NewSingleColumnCondition("c2", tablestore.CT_EQUAL, "Hangzhou")
filter.AddFilter(filter2)
filter.AddFilter(filter1)
criteria := &tablestore.SingleRowQueryCriteria{
TableName: tableName,
PrimaryKey: pk,
MaxVersion: 1,
Filter: filter,
}
getResp, err := client.GetRow(&tablestore.GetRowRequest{SingleRowQueryCriteria: criteria})
if err != nil {
fmt.Println("getrow gagal dengan kesalahan:", err)
} else {
colMap := getResp.GetColumnMap()
if len(colMap.Columns) > 0 {
fmt.Println("panjangnya adalah ", len(colMap.Columns))
fmt.Println("hasil baris col0 adalah ", getResp.Columns[0].ColumnName, getResp.Columns[0].Value)
} else {
fmt.Println("Tidak ada data yang memenuhi kondisi.")
}
}
}Referensi
Jika aplikasi perlu menggunakan kolom atribut yang berbeda sebagai kondisi kueri untuk menanyakan data, Anda dapat menentukan kolom atribut sebagai kolom kunci utama indeks sekunder. Dengan cara ini, Anda dapat menggunakan indeks sekunder untuk menanyakan data berdasarkan kolom atribut, mempercepat proses kueri. 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. Sebagai contoh, Anda dapat melakukan kueri berdasarkan kolom non-kunci utama, 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.