全部产品
Search
文档中心

Tablestore:Filter

更新时间:Jul 02, 2025

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.

Catatan

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 tablestore.CT_EQUAL untuk menentukan EQUAL (=), tablestore.CT_NOT_EQUAL untuk menentukan NOT_EQUAL (!=), tablestore.CT_GREATER_THAN untuk menentukan GREATER_THAN (>), tablestore.CT_GREATER_EQUAL untuk menentukan GREATER_EQUAL (>=), tablestore.CT_LESS_THAN untuk menentukan LESS_THAN (<), dan tablestore.CT_LESS_EQUAL untuk menentukan LESS_EQUAL (<=).

LogicOperator

Tidak

Operator logika yang digunakan oleh filter. Untuk informasi tentang operator logika, lihat LogicalOperator.

Operator logika mencakup NOT, AND, dan OR. Di Tablestore, tablestore.LO_NOT menentukan NOT, tablestore.LO_AND menentukan AND, dan tablestore.LO_OR menentukan OR.

FilterIfMissing

Tidak

Menentukan apakah akan mengembalikan baris jika kolom referensi tidak ada di baris tersebut. Tipe: Boolean. Nilai valid:

  • false: Jika kolom referensi tidak ada di baris, baris tersebut dikembalikan. Ini adalah nilai default.

  • true: Jika kolom referensi tidak ada di baris, baris tersebut tidak dikembalikan.

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:

  • true: Jika kolom referensi berisi beberapa versi data, hanya versi terbaru dari data yang digunakan untuk perbandingan. Ini adalah nilai default.

  • false: Jika kolom referensi berisi beberapa versi data, semua versi data digunakan untuk perbandingan. Jika salah satu versi data di kolom referensi memenuhi kondisi filter, baris tersebut dikembalikan.

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.