全部产品
Search
文档中心

Tablestore:Agregasi

更新时间:Jul 06, 2025

Anda dapat menggunakan operasi agregasi untuk mendapatkan nilai minimum, maksimum, jumlah, rata-rata, serta jumlah total dan jumlah unik baris. Operasi ini juga memungkinkan pengelompokan hasil berdasarkan nilai kolom, rentang, lokasi geografis, filter, histogram, atau histogram tanggal, serta mendukung kueri bersarang. Beberapa operasi agregasi dapat digunakan untuk kueri yang lebih kompleks.

Informasi latar belakang

Tabel berikut menjelaskan metode agregasi yang tersedia.

Metode

Deskripsi

Nilai minimum

Metode agregasi yang dapat digunakan untuk mengembalikan nilai minimum dari sebuah kolom. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL MIN.

Nilai maksimum

Metode agregasi yang dapat digunakan untuk mengembalikan nilai maksimum dari sebuah kolom. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL MAX.

Jumlah

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah semua nilai untuk kolom numerik. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL SUM.

Nilai rata-rata

Metode agregasi yang dapat digunakan untuk mengembalikan rata-rata semua nilai untuk kolom numerik. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL AVG.

Jumlah

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah total nilai untuk kolom tertentu atau jumlah total baris dalam indeks pencarian. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL COUNT.

Jumlah unik

Metode agregasi yang dapat digunakan untuk mengembalikan jumlah nilai unik untuk sebuah kolom. Metode ini dapat digunakan dengan cara yang mirip dengan fungsi SQL COUNT(DISTINCT).

Pengelompokan berdasarkan nilai kolom

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan nilai kolom. Nilai yang sama dikelompokkan bersama. Nilai identik setiap kelompok dan jumlah nilai identik di setiap kelompok dikembalikan.

Catatan

Jumlah yang dihitung mungkin berbeda dari jumlah sebenarnya jika jumlah nilai dalam kelompok sangat besar.

Pengelompokan berdasarkan beberapa kolom

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan beberapa kolom. Anda dapat menggunakan token untuk melakukan paging.

Pengelompokan berdasarkan rentang

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan rentang nilai sebuah kolom. Nilai kolom yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan.

Pengelompokan berdasarkan lokasi geografis

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil kueri dalam jarak yang berada dalam rentang tertentu dikelompokkan bersama. Jumlah nilai dalam setiap rentang dikembalikan.

Pengelompokan berdasarkan filter

Metode agregasi yang dapat digunakan untuk menyaring hasil kueri dan mengelompokkannya bersama untuk mendapatkan jumlah hasil yang sesuai dengan setiap filter. Hasil dikembalikan dalam urutan filter yang ditentukan.

Kueri berdasarkan histogram

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai kolom yang berada dalam rentang yang sama dikelompokkan bersama. Rentang nilai setiap kelompok dan jumlah nilai dalam setiap kelompok dikembalikan.

Kueri berdasarkan histogram tanggal

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan interval tanggal tertentu. Nilai kolom yang berada dalam rentang yang sama dikelompokkan bersama. Rentang nilai setiap kelompok dan jumlah nilai dalam setiap kelompok dikembalikan.

Bersarang

GroupBy mendukung bersarang. Anda dapat melakukan operasi sub-agregasi menggunakan GroupBy.

Beberapa agregasi

Anda dapat melakukan beberapa operasi agregasi.

Catatan

Jika Anda melakukan beberapa operasi agregasi kompleks secara bersamaan, waktu yang dibutuhkan mungkin cukup lama.

Prasyarat

Nilai minimum

Metode agregasi ini mengembalikan nilai minimum dari sebuah kolom, mirip dengan fungsi SQL MIN.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG, DOUBLE, dan DATE yang didukung.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    /**
     * Harga setiap produk tercantum dalam tabel produk. Kueri harga minimum produk yang diproduksi di Zhejiang.
     * Pernyataan SQL setara: SELECT min(column_price) FROM product where place_of_production="Zhejiang";
     */
    func min(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewMinAggregation("min_agg_1", "column_price").Missing(0.00)))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.Min("min_agg_1") // Dapatkan hasil operasi agregasi bernama min_agg_1.
        if err != nil {
            panic(err)
        }
        if agg1.HasValue() { // Periksa apakah hasil operasi agregasi bernama min_agg_1 berisi nilai.
            fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
        }
    }

Nilai maksimum

Metode agregasi ini mengembalikan nilai maksimum dari sebuah kolom, mirip dengan fungsi SQL MAX.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG, DOUBLE, dan DATE yang didukung.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    /**
     * Harga setiap produk tercantum dalam tabel produk. Kueri harga maksimum produk yang diproduksi di Zhejiang.
     * Pernyataan SQL setara: SELECT max(column_price) FROM product where place_of_production = "Zhejiang Province".
     */
    func max(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewMaxAggregation("max_agg_1", "column_price").Missing(0.00)))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.Max("max_agg_1") // Dapatkan hasil operasi agregasi bernama max_agg_1.
        if err != nil {
            panic(err)
        }
        if agg1.HasValue() { // Periksa apakah hasil operasi agregasi bernama max_agg_1 berisi nilai.
            fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
        }
    }

Jumlah

Metode agregasi ini mengembalikan jumlah semua nilai numerik dalam kolom tertentu, mirip dengan fungsi SQL SUM.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG dan DOUBLE yang didukung.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan, yang diterapkan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    /**
     * Penjualan setiap produk tercantum dalam tabel produk. Kueri total jumlah produk yang terjual yang diproduksi di Zhejiang. Jika penjualan suatu produk kosong, 10 digunakan sebagai nilai default.
     * Pernyataan SQL setara: SELECT sum(column_price) FROM product where place_of_production = "Zhejiang".
     */
    func sum(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewSumAggregation("sum_agg_1", "column_price").Missing(0.00)))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.Sum("sum_agg_1")  // Dapatkan hasil operasi agregasi bernama sum_agg_1.
        if err != nil {
            panic(err)
        }
        fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
    }

Nilai rata-rata

Metode agregasi ini mengembalikan rata-rata semua nilai numerik dalam kolom tertentu, mirip dengan fungsi SQL AVG.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG, DOUBLE, dan DATE yang didukung.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    /**
     * Penjualan setiap produk tercantum dalam tabel produk. Kueri harga rata-rata produk yang diproduksi di Zhejiang.
     * Pernyataan SQL setara: SELECT avg(column_price) FROM product where place_of_production = "Zhejiang Province".
     */
    func avg(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewAvgAggregation("avg_agg_1", "column_price").Missing(0.00)))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.Avg("avg_agg_1")  // Dapatkan hasil operasi agregasi bernama avg_agg_1.
        if err != nil {
            panic(err)
        }
        if agg1.HasValue() {  // Periksa apakah hasil operasi agregasi bernama agg1 berisi nilai.
            fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
        }
    }

Jumlah

Metode agregasi ini mengembalikan jumlah total baris dalam indeks pencarian atau jumlah total baris yang memenuhi kondisi kueri, mirip dengan fungsi SQL COUNT.

Catatan

Berikut adalah cara untuk menanyakan jumlah total baris:

  • Gunakan fitur count dari agregasi dan tentukan count(*) dalam permintaan.

  • Gunakan fitur kueri untuk mendapatkan jumlah baris yang memenuhi kondisi kueri. Atur setGetTotalCount ke true dalam kueri. Gunakan MatchAllQuery untuk mendapatkan jumlah total baris dalam indeks pencarian.

Anda dapat menggunakan nama kolom sebagai nilai ekspresi count untuk menanyakan jumlah baris yang berisi kolom dalam indeks pencarian. Metode ini cocok untuk skenario yang melibatkan kolom jarang.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data berikut yang didukung: LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE.

  • Contoh

    /**
     * Catatan pelanggaran pedagang dicatat dalam tabel pedagang. Anda dapat menanyakan jumlah pedagang yang berlokasi di Zhejiang dan memiliki catatan pelanggaran. Jika tidak ada catatan pelanggaran untuk pedagang, kolom yang sesuai dengan catatan pelanggaran juga tidak ada untuk pedagang tersebut.
     * Pernyataan SQL setara: SELECT count(column_history) FROM product where place_of_production = "Zhejiang Province".
     */
    func count(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewCountAggregation("count_agg_1", "column_price")))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.Count("count_agg_1") // Dapatkan hasil operasi agregasi bernama count_agg_1.
        if err != nil {
            panic(err)
        }
        fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
    }

Jumlah unik

Metode agregasi ini mengembalikan jumlah nilai unik dalam sebuah kolom, mirip dengan fungsi SQL COUNT(DISTINCT).

Catatan

Jumlah nilai unik merupakan angka perkiraan.

  • Jika jumlah total baris sebelum fitur distinct count digunakan kurang dari 10.000, hasilnya mendekati nilai eksak.

  • Jika jumlah total baris sebelum fitur distinct count digunakan lebih besar dari atau sama dengan 100 juta, tingkat kesalahan sekitar 2%.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data berikut yang didukung: LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan, yang diterapkan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    /**
     * Kueri jumlah provinsi unik dari mana produk diproduksi.
     * Pernyataan SQL setara: SELECT count(distinct column_place) FROM product.
     */
    func distinctCount(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName. // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.TermQuery{"place_of_production", "Zhejiang"}).
                SetLimit(0). // Jika Anda hanya ingin mendapatkan hasil agregasi tanpa data spesifik, Anda dapat mengatur limit ke 0 untuk meningkatkan kinerja kueri.
                Aggregation(search.NewDistinctCountAggregation("distinct_count_agg_1", "column_price").Missing(0.00)))
    
        searchResponse, err := client.Search(searchRequest) // Jalankan pernyataan.
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
        agg1, err := aggResults.DistinctCount("distinct_count_agg_1") // Dapatkan hasil operasi agregasi bernama distinct_count_agg_1.
        if err != nil {
            panic(err)
        }
        fmt.Println(agg1.Value) // Tampilkan hasil agregasi.
    }

Pengelompokan berdasarkan nilai kolom

Metode agregasi ini mengelompokkan hasil kueri berdasarkan nilai kolom. Nilai identik dikelompokkan bersama, dan jumlah nilai dalam setiap kelompok dikembalikan.

Catatan

Jumlah yang dihitung mungkin berbeda dari jumlah sebenarnya jika jumlah nilai dalam kelompok sangat besar.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data berikut yang didukung: LONG, DOUBLE, BOOLEAN, KEYWORD, dan DATE.

    Ukuran

    Jumlah kelompok yang ingin Anda kembalikan. Nilai default: 10. Nilai maksimum: 2000. Jika jumlah kelompok melebihi 2.000, hanya 2.000 kelompok pertama yang dikembalikan.

    GroupBySorters

    Aturan pengurutan untuk item dalam kelompok. Secara default, item kelompok diurutkan secara menurun. Jika Anda mengonfigurasi beberapa aturan pengurutan, data diurutkan berdasarkan urutan konfigurasi aturan tersebut. Aturan pengurutan berikut didukung:

    • Urutkan berdasarkan nilai dalam urutan abjad.

    • Urutkan berdasarkan nilai dalam urutan abjad terbalik.

    • Urutkan berdasarkan jumlah baris secara menaik.

    • Urutkan berdasarkan jumlah baris secara menurun.

    • Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara menaik.

    • Urutkan berdasarkan nilai yang diperoleh dari hasil sub-agregasi secara menurun.

    SubAggregation dan SubGroupBy

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

    • Skenario

      Kueri jumlah produk dalam setiap kategori, serta harga maksimum dan minimum produk dalam setiap kategori.

    • Metode

      Kelompokkan hasil kueri berdasarkan kategori produk untuk mendapatkan jumlah produk dalam setiap kategori. Kemudian, lakukan dua operasi sub-agregasi untuk mendapatkan harga maksimum dan minimum produk dalam setiap kategori.

    • Hasil contoh

      • Buah-buahan: 5. Nilai maksimum harga adalah 15. Nilai minimum harga adalah 3.

      • Peralatan mandi: 10. Nilai maksimum harga adalah 98. Nilai minimum harga adalah 1.

      • Perangkat elektronik: 3. Nilai maksimum harga adalah 8.699. Nilai minimum harga adalah 2.300.

      • Produk lainnya: 15. Nilai maksimum harga adalah 1.000. Nilai minimum harga adalah 80.

  • Contoh

    /**
     * Kueri jumlah produk, serta harga maksimum dan minimum produk dalam setiap kategori.
     * Contoh hasil yang dikembalikan: Buah-buahan: 5. Nilai maksimum harga adalah 15, dan nilai minimum harga adalah 3. Peralatan mandi: 10. Nilai maksimum harga adalah 98, dan nilai minimum harga adalah 1. Perangkat elektronik: 3. Nilai maksimum harga adalah 8699, dan nilai minimum harga adalah 2300.
     * Produk lainnya: 15. Nilai maksimum harga adalah 1000, dan nilai minimum harga adalah 80.
     */
    func GroupByField(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
                SetLimit(0).
                GroupBy(search.NewGroupByField("group1", "column_type"). // Kelompokkan produk berdasarkan kategori.
                    SubAggregation(search.NewMinAggregation("min_price", "column_price")). // Kueri harga minimum dalam setiap kategori.
                    SubAggregation(search.NewMaxAggregation("max_price", "column_price")))) // Kueri harga maksimum dalam setiap kategori.
    
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi.
        group, err := groupByResults.GroupByField("group1")
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
    
        for _, item := range group.Items { // Telusuri kelompok yang dikembalikan.
            // Tampilkan nilai setiap kelompok dan jumlah baris dalam setiap kelompok.
            fmt.Println("\tkey: ", item.Key, ", rowCount: ", item.RowCount)
    
            // Tampilkan harga terendah.
            minPrice, _ := item.SubAggregations.Min("min_price")
            if minPrice.HasValue() {
                fmt.Println("\t\tmin_price: ", minPrice.Value)
            }
    
            // Tampilkan harga tertinggi.
            maxPrice, _ := item.SubAggregations.Max("max_price")
            if maxPrice.HasValue() {
                fmt.Println("\t\tmax_price: ", maxPrice.Value)
            }
        }
    }

Pengelompokan berdasarkan beberapa kolom

Metode agregasi ini mengelompokkan hasil kueri berdasarkan beberapa kolom. Anda dapat menggunakan token untuk melakukan paging.

Catatan

Untuk pengelompokan multi-kolom, gunakan parameter groupBy dalam mode bersarang atau parameter GroupByComposite. Informasi tentang perbedaan antara kedua parameter dapat ditemukan di Lampiran: Metode Berbeda untuk Pengelompokan Multi-Kolom.

  • Parameter

    Parameter

    Deskripsi

    GroupByName

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    SourceGroupByList

    Kolom berdasarkan mana Anda ingin mengelompokkan hasil kueri. Anda dapat mengelompokkan hasil kueri hingga 32 kolom dan melakukan operasi agregasi pada kelompok yang dihasilkan. Jenis kelompok berikut didukung:

    Penting
    • Untuk jenis kelompok yang ditentukan dalam parameter SourceGroupByList, Anda hanya dapat mengatur parameter GroupBySorter ke groupKeySort.

    • Secara default, kelompok diurutkan secara menurun.

    • Jika nilai kolom dalam sebuah baris tidak ada, sistem akan mengembalikan NULL.

    • Untuk jenis GroupByField, Anda hanya dapat mengonfigurasi parameter berikut: GroupByName, FieldName, dan GroupBySorter.

    • Untuk jenis GroupByHistogram, Anda hanya dapat mengonfigurasi parameter berikut: GroupByName, FieldName, Interval, dan GroupBySorter.

    • Untuk jenis GroupByDateHistogram, Anda hanya dapat mengonfigurasi parameter berikut: GroupByName, FieldName, Interval, TimeZone, dan GroupBySorter.

    NextToken

    Token paginasi yang digunakan dalam permintaan berikutnya untuk mengambil halaman baru kelompok. Anda dapat memperoleh nilai parameter NextToken dari output operasi GroupByCompositeResult. Parameter NextToken memungkinkan Anda mendapatkan semua hasil pengelompokan.

    Ukuran

    Jumlah kelompok per halaman. Jika jumlah kelompok yang memenuhi persyaratan melebihi nilai parameter Ukuran, Anda harus menggunakan parameter NextToken untuk mendapatkan kelompok di halaman berikutnya.

    Penting

    Jika Anda ingin membatasi jumlah kelompok yang dikembalikan, Anda tidak dapat mengonfigurasi parameter Ukuran dan SuggestedSize secara bersamaan. Dalam kebanyakan kasus, kami sarankan Anda mengonfigurasi parameter Ukuran.

    Dalam skenario di mana Anda ingin menghubungkan Tablestore dengan mesin komputasi berkapasitas tinggi seperti Apache Spark atau PrestoSQL, kami sarankan Anda mengonfigurasi parameter SuggestedSize.

    SuggestedSize

    Jumlah kelompok per halaman yang diharapkan. Anda dapat mengatur nilai lebih besar dari jumlah maksimum kelompok yang diizinkan di sisi server atau -1. Sisi server mengembalikan jumlah kelompok aktual berdasarkan kapasitasnya. Parameter ini berlaku dalam skenario di mana Anda menghubungkan Tablestore dengan mesin komputasi berkapasitas tinggi seperti Apache Spark atau PrestoSQL.

    Jika Anda mengatur parameter ini ke nilai yang lebih besar dari jumlah maksimum kelompok yang diizinkan di sisi server, sistem menyesuaikan nilai ke jumlah maksimum kelompok yang diizinkan di sisi server. Jumlah kelompok sebenarnya yang dikembalikan sama dengan min(suggestedSize, jumlah maksimum kelompok yang diizinkan di sisi server, jumlah total kelompok).

    SubAggList dan SubGroupByList

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

    Penting

    Tipe GroupByComposite tidak didukung dalam parameter SubGroupByList.

  • Contoh

    /**
     * Kelompokkan dan agregat hasil kueri: Kelompokkan hasil kueri dan lakukan operasi agregasi pada kelompok yang dihasilkan berdasarkan parameter seperti groupbyField, groupByHistogram, dan groupByDataHistogram yang dilewatkan ke parameter SourceGroupBy.
     * Kembalikan hasil agregasi dari beberapa kolom dalam struktur datar.
     */
    func GroupByComposite(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
        searchRequest.
            SetTableName(tableName).
            SetIndexName(indexName).
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}).
                SetLimit(0).
                GroupBy(search.NewGroupByComposite("groupByComposite").
                SourceGroupBys(search.NewGroupByField("groupByColLong", "Col_Long"),
                    search.NewGroupByField("groupByColKeyword", "Col_Keyword"),
                    search.NewGroupByField("groupByColDouble", "Col_Double")).
                SetSize(100)))
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v\n", err)
            return
        }
    
        for {
            if searchResponse.GroupByResults.Empty() {
                return
            }
    
            groupByResults := searchResponse.GroupByResults
            group, err := groupByResults.GroupByComposite("groupByComposite")
            if err != nil {
                fmt.Printf("%#v\n", err)
                return
            }
    
            if group == nil {
                return
            }
    
            for _, item := range group.Items {    // Telusuri kelompok yang dikembalikan.
                // Tampilkan nilai setiap kelompok dan jumlah baris dalam setiap kelompok.
                if item.Keys != nil {
                    for i := 0; i < len(item.Keys); i++ {
                        if item.Keys[i] == nil {
                            fmt.Printf(" null ")
                        } else {
                            fmt.Printf(" %v ", *item.Keys[i])
                        }
    
                    }
                    fmt.Printf("\trowCount:%v\n", item.RowCount)
                }
            }
    
            if group.NextToken != nil {
                searchRequest.
                    SetTableName(tableName).
                    SetIndexName(indexName).
                    SetSearchQuery(search.NewSearchQuery().
                        SetQuery(&search.MatchAllQuery{}).
                        SetLimit(0).
                        GroupBy(search.NewGroupByComposite("groupByComposite").
                            SourceGroupBys(search.NewGroupByField("groupByColLong", "Col_Long"),
                                search.NewGroupByField("groupByColKeyword", "Col_Keyword"),
                                search.NewGroupByField("groupByColDouble", "Col_Double")).
                            SetSize(100).
                            SetNextToken(group.NextToken)))
    
                searchResponse, err = client.Search(searchRequest)
                if err != nil {
                    fmt.Printf("%#v\n", err)
                    return
                }
            } else {
                break
            }
        }
    }

Pengelompokan berdasarkan rentang

Metode agregasi ini mengelompokkan hasil kueri berdasarkan rentang nilai sebuah kolom. Nilai dalam rentang tertentu dikelompokkan bersama, dan jumlah nilai dalam setiap rentang dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG dan DOUBLE yang didukung.

    Range(fromInclusive float64, toExclusive float64)

    Rentang nilai yang digunakan untuk pengelompokan.

    Rentang dapat dimulai dari NegInf dan berakhir dengan Inf.

    SubAggregation dan SubGroupBy

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

    Sebagai contoh, setelah Anda mengelompokkan hasil kueri berdasarkan penjualan dan berdasarkan provinsi, Anda dapat memperoleh provinsi yang memiliki proporsi penjualan terbesar dalam rentang tertentu. Untuk melakukannya, Anda perlu menentukan GroupByField dalam GroupByRange.

  • Contoh

    /**
     * Kelompokkan volume penjualan berdasarkan rentang [NegInf, 1000), [1000, 5000), dan [5000, Inf) untuk mendapatkan volume penjualan dalam setiap rentang.
     */
    func GroupByRange(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
                SetLimit(0).
                GroupBy(search.NewGroupByRange("group1", "column_number").
                    Range(search.NegInf, 1000).
                    Range(1000, 5000).
                    Range(5000, search.Inf)))
    
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi.
        group, err := groupByResults.GroupByRange("group1")
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        for _, item := range group.Items { // Telusuri kelompok yang dikembalikan.
            fmt.Println("\t[", item.From, ", ", item.To, "), rowCount: ", item.RowCount) // Tampilkan jumlah baris dalam setiap kelompok.
        }
    }

Pengelompokan berdasarkan lokasi geografis

Metode agregasi ini mengelompokkan hasil kueri berdasarkan jarak dari lokasi geografis ke titik pusat. Hasil dalam rentang tertentu dikelompokkan bersama, dan jumlah nilai dalam setiap rentang dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    NamaKolom

    Nama kolom yang digunakan untuk operasi agregasi. Hanya tipe data GEO_POINT yang didukung.

    CenterPoint(latitude float64, longitude float64)

    Garis lintang dan bujur titik pusat.

    latitude menentukan garis lintang titik pusat. longitude menentukan garis bujur titik pusat.

    Range(fromInclusive float64, toExclusive float64)

    Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter.

    Rentang dapat dimulai dari NegInf dan berakhir dengan Inf.

    SubAggregation dan SubGroupBy

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

  • Contoh

    
    /**
     * Kelompokkan pengguna berdasarkan jarak dari lokasi geografis mereka ke Wanda Plaza untuk mendapatkan jumlah pengguna dalam setiap rentang jarak. Rentang jarak adalah [NegInf, 1000), [1000, 5000), dan [5000, Inf). Satuan: meter.
     */
    func GroupByGeoDistance(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
                SetLimit(0).
                GroupBy(search.NewGroupByGeoDistance("group1", "Col_GeoPoint", search.GeoPoint{Lat: 30.137817, Lon:120.08681}).
                    Range(search.NegInf, 1000).
                    Range(1000, 5000).
                    Range(5000, search.Inf)))
    
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi.
        group, err := groupByResults.GroupByGeoDistance("group1")
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        for _, item := range group.Items { // Telusuri kelompok yang dikembalikan.
            fmt.Println("\t[", item.From, ", ", item.To, "), rowCount: ", item.RowCount) // Tampilkan jumlah baris dalam setiap kelompok.
        }
    }

Pengelompokan berdasarkan filter

Metode agregasi ini menyaring hasil kueri dan mengelompokkannya berdasarkan filter tertentu. Jumlah hasil yang sesuai dengan setiap filter dikembalikan dalam urutan filter yang ditentukan.

  • Parameter

    Parameter

    Deskripsi

    Nama

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    Query

    Filter yang dapat digunakan untuk kueri. Hasil dikembalikan dalam urutan kondisi filter yang ditentukan.

    SubAggregation dan SubGroupBy

    Operasi sub-agregasi. Anda dapat melakukan operasi sub-agregasi berdasarkan hasil pengelompokan.

  • Contoh

    /**
     * Tentukan filter berikut untuk mendapatkan jumlah item yang sesuai dengan setiap filter: Penjualan melebihi 100, tempat asal adalah Zhejiang, dan deskripsi berisi Hangzhou.
     */
    func GroupByFilter(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
                SetLimit(0).
                GroupBy(search.NewGroupByFilter("group1").
                    Query(&search.RangeQuery{
                        FieldName: "number",
                        From: 100,
                        IncludeLower: true}).
                    Query(&search.TermQuery{
                        FieldName: "place",
                        Term:      "Zhejiang",
                    }).
                    Query(&search.MatchQuery{
                        FieldName: "description",
                        Text: "Hangzhou",
                    })))
    
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi.
        group, err := groupByResults.GroupByFilter("group1")
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        for _, item := range group.Items { // Telusuri kelompok yang dikembalikan.
            fmt.Println("\trowCount: ", item.RowCount) // Tampilkan jumlah baris dalam setiap kelompok.
        }
    }

Pengelompokan berdasarkan histogram

Metode agregasi ini mengelompokkan hasil kueri berdasarkan interval data tertentu. Nilai dalam rentang yang sama dikelompokkan bersama, dan jumlah nilai dalam setiap kelompok dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    GroupByName

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    Field

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data LONG dan DOUBLE yang didukung.

    Interval

    Interval tanggal yang digunakan untuk mendapatkan hasil agregasi.

    FieldRange[min,max]

    Rentang yang digunakan bersama dengan parameter Interval untuk membatasi jumlah kelompok. Nilai yang dihitung menggunakan rumus (FieldRange.max-FieldRange.min)/interval tidak boleh melebihi 2000.

    MinDocCount

    Jumlah baris minimum. Jika jumlah baris dalam sebuah kelompok kurang dari jumlah baris minimum, hasil agregasi untuk kelompok tersebut tidak dikembalikan.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan, yang diterapkan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

  • Contoh

    func GroupByHistogram(client *tablestore.TableStoreClient, tableName string, indexName string) {
    	searchRequest := &tablestore.SearchRequest{}
    	searchRequest.
    		request.setTableName(tableName); // Tentukan nama tabel data.
    		request.setIndexName(indexName); // Tentukan nama indeks pencarian.
    		SetSearchQuery(search.NewSearchQuery().
    			SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
    			SetLimit(0).
    			GroupBy(search.NewGroupByHistogram("group1", "field_name").
    				SetMinDocCount(1).
    				SetFiledRange(1, 100).
    				SetMissing(3).
    				SetInterval(10)))
    
    	searchResponse, err := client.Search(searchRequest)
    	if err != nil {
    		fmt.Printf("%#v", err)
    		return
    	}
    	groupByResults := searchResponse.GroupByResults    // Dapatkan hasil agregasi.
    	group, err := groupByResults.GroupByHistogram("group1")
    	if err != nil {
    		fmt.Printf("%#v", err)
    		return
    	}
    	for _, item := range group.Items {    // Telusuri kelompok yang dikembalikan.
    		fmt.Println("key:", item.Key.Value, ", rowCount:", item.Value)
    	}
    }

Pengelompokan berdasarkan histogram tanggal

Metode agregasi ini mengelompokkan hasil kueri berdasarkan interval tanggal tertentu. Nilai dalam rentang yang sama dikelompokkan bersama, dan jumlah nilai dalam setiap kelompok dikembalikan.

  • Parameter

    Parameter

    Deskripsi

    GroupByName

    Nama unik operasi agregasi. Anda dapat menanyakan hasil operasi agregasi tertentu berdasarkan nama ini.

    Field

    Nama kolom yang digunakan untuk melakukan operasi agregasi. Hanya tipe data DATE yang didukung.

    Interval

    Interval tanggal yang digunakan untuk mendapatkan hasil agregasi.

    FieldRange[min,max]

    Rentang yang digunakan bersama dengan parameter Interval untuk membatasi jumlah kelompok. Nilai yang dihitung menggunakan rumus (FieldRange.max-FieldRange.min)/interval tidak boleh melebihi 2000.

    MinDocCount

    Jumlah baris minimum. Jika jumlah baris dalam sebuah kelompok kurang dari jumlah baris minimum, hasil agregasi untuk kelompok tersebut tidak dikembalikan.

    Missing

    Nilai default untuk kolom tempat operasi agregasi dilakukan, yang diterapkan pada baris di mana nilai kolom kosong.

    • Jika Anda tidak menentukan nilai untuk Missing, baris akan diabaikan.

    • Jika Anda menentukan nilai untuk Missing, nilai parameter ini digunakan sebagai nilai kolom baris tersebut.

    TimeZone

    Zona waktu dalam format +hh:mm atau -hh:mm, seperti +08:00 atau -09:00. Parameter ini hanya diperlukan jika kolom bertipe DATE.

    Jika Anda tidak menentukan parameter ini untuk kolom bertipe DATE, offset N jam mungkin terjadi dalam hasil agregasi. Anda dapat menentukan parameter ini untuk menyelesaikan kesalahan ini.

  • Contoh

    func GroupByDateHistogram(client *tablestore.TableStoreClient, tableName string, indexName string) {
    	searchRequest := &tablestore.SearchRequest{}
    	searchRequest.
    		request.setTableName(tableName); // Tentukan nama tabel data.
    		request.setIndexName(indexName); // Tentukan nama indeks pencarian.
    		SetSearchQuery(search.NewSearchQuery().
    			SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
    			SetLimit(0).
    			GroupBy(search.NewGroupByDateHistogram("date_group", "date_field_name").
    				SetMinDocCount(1).
    				SetFiledRange("2017-05-01 10:00", "2017-05-21 13:00:00").
    				SetMissing("2017-05-01 13:01:00").
    				SetInterval(model.DateTimeValue{
    					Value: proto.Int32(1),
    					Unit:  model.DateTimeUnit_DAY.Enum(),
    				})))
    
    	searchResponse, err := client.Search(searchRequest)
    	if err != nil {
    		fmt.Printf("%#v", err)
    		return
    	}
    	groupByResults := searchResponse.GroupByResults    // Dapatkan hasil agregasi.
    	group, err := groupByResults.GroupByDateHistogram("date_group")
    	if err != nil {
    		fmt.Printf("%#v", err)
    		return
    	}
    
    	for _, item := range group.Items {    // Telusuri kelompok yang dikembalikan.
    		fmt.Printf("millisecondTimestamp:%d , rowCount:%d \n", item.Timestamp, item.RowCount)
    	}
    }

Bersarang

GroupBy mendukung pengelompokan bersarang. Anda dapat melakukan sub-agregasi menggunakan GroupBy.

Contoh berikut menunjukkan operasi agregasi dengan dua tingkat bersarang.

  • GroupBy + SubGroupBy: Baris dikelompokkan berdasarkan provinsi dan kota untuk mendapatkan data untuk setiap kota di setiap provinsi.

  • GroupBy + SubAggregation: Baris dikelompokkan berdasarkan provinsi, dan operasi agregasi dilakukan untuk mendapatkan nilai maksimum dari metrik untuk setiap provinsi.

Catatan

Untuk menyeimbangkan performa dan kompleksitas, bersarang dibatasi hingga sejumlah tingkat tertentu. Untuk informasi lebih lanjut, lihat Batas Indeks Pencarian.

Contoh

/**
 * Lakukan agregasi berbasis bersarang.
 * Dua agregasi dan satu atribut GroupByRange ditentukan di level terluar GroupByField.
 */
func NestedSample(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}

    searchRequest.
        SetTableName(tableName). // Tentukan nama tabel data.
        SetIndexName(indexName). // Tentukan nama indeks pencarian.
        SetSearchQuery(search.NewSearchQuery().
            SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
            SetLimit(0).
            GroupBy(search.NewGroupByField("group1", "field1").
                SubAggregation(search.NewMinAggregation("sub_agg1", "sub_field1")).
                SubAggregation(search.NewMaxAggregation("sub_agg2", "sub_field2")).
                SubGroupBy(search.NewGroupByRange("sub_group1", "sub_field3").
                    Range(search.NegInf, 3).
                    Range(3, 5).
                    Range(5, search.Inf))))

    searchResponse, err := client.Search(searchRequest)
    if err != nil {
        fmt.Printf("%#v", err)
        return
    }
    groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi.
    group, err := groupByResults.GroupByField("group1")
    if err != nil {
        fmt.Printf("%#v", err)
        return
    }

    for _, item := range group.Items { // Telusuri kelompok yang dikembalikan.
        // Tampilkan nilai setiap kelompok dan jumlah baris dalam setiap kelompok.
        fmt.Println("\tkey: ", item.Key, ", rowCount: ", item.RowCount)

        // Dapatkan hasil dari operasi agregasi bernama sub_agg1.
        subAgg1, _ := item.SubAggregations.Min("sub_agg1")
        if subAgg1.HasValue() {
            fmt.Println("\t\tsub_agg1: ", subAgg1.Value)
        }

        // Dapatkan hasil dari operasi agregasi bernama sub_agg2.
        subAgg2, _ := item.SubAggregations.Max("sub_agg2")
        if subAgg2.HasValue() {
            fmt.Println("\t\tsub_agg2: ", subAgg2.Value)
        }

        // Dapatkan hasil dari operasi agregasi bernama sub_group1.
        subGroup, _ := item.SubGroupBys.GroupByRange("sub_group1")
        for _, item := range subGroup.Items {
            fmt.Println("\t\t[", item.From, ", ", item.To, "), rowCount: ", item.RowCount)
        }
    }
}

Beberapa agregasi

Anda dapat melakukan beberapa operasi agregasi secara bersamaan.

Catatan

Jika Anda melakukan beberapa operasi agregasi kompleks secara bersamaan, waktu yang dibutuhkan mungkin cukup lama.

  • Contoh 1

    func MultipleAggregations(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data.
            SetIndexName(indexName). // Tentukan nama indeks pencarian.
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris.
                SetLimit(0).
                Aggregation(search.NewAvgAggregation("agg1", "Col_Long")). // Hitung nilai rata-rata kolom Col_Long.
                Aggregation(search.NewDistinctCountAggregation("agg2", "Col_Long")). // Hitung jumlah nilai unik kolom Col_Long.
                Aggregation(search.NewMaxAggregation("agg3", "Col_Long")). // Kueri nilai maksimum kolom Col_Long.
                Aggregation(search.NewSumAggregation("agg4", "Col_Long")). // Hitung jumlah nilai kolom Col_Long.
                Aggregation(search.NewCountAggregation("agg5", "Col_Long"))) // Hitung jumlah baris yang berisi kolom Col_Long.
    
        // Kembalikan semua kolom.
        searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
            ReturnAll: true,
        })
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi.
    
        // Dapatkan nilai rata-rata dari hasil operasi agregasi.
        agg1, err := aggResults.Avg("agg1") // Dapatkan hasil operasi agregasi bernama agg1.
        if err != nil {
            panic(err)
        }
        if agg1.HasValue() { // Periksa apakah hasil operasi agregasi bernama agg1 berisi nilai.
            fmt.Println("(avg) agg1: ", agg1.Value) // Tampilkan nilai rata-rata kolom Col_Long.
        } else {
            fmt.Println("(avg) agg1: no value") // Tampilkan baris yang tidak memiliki nilai untuk kolom Col_Long.
        }
    
        // Dapatkan jumlah nilai unik dari hasil operasi agregasi.
        agg2, err := aggResults.DistinctCount("agg2") // Dapatkan hasil operasi agregasi bernama agg2.
        if err != nil {
            panic(err)
        }
        fmt.Println("(distinct) agg2: ", agg2.Value) // Tampilkan jumlah nilai unik untuk kolom Col_Long.
    
        // Tampilkan nilai maksimum dari hasil operasi agregasi.
        agg3, err := aggResults.Max("agg3") // Dapatkan hasil operasi agregasi bernama agg3.
        if err != nil {
            panic(err)
        }
        if agg3.HasValue() {
            fmt.Println("(max) agg3: ", agg3.Value) // Tampilkan nilai maksimum untuk kolom Col_Long.
        } else {
            fmt.Println("(max) agg3: no value") // Tampilkan baris yang tidak memiliki nilai untuk kolom Col_Long.
        }
    
        // Dapatkan jumlah dari hasil operasi agregasi.
        agg4, err := aggResults.Sum("agg4") // Dapatkan hasil operasi agregasi bernama agg4.
        if err != nil {
            panic(err)
        }
        fmt.Println("(sum) agg4: ", agg4.Value) // Tampilkan jumlah untuk kolom Col_Long.
    
        // Dapatkan jumlah baris dari hasil operasi agregasi.
        agg5, err := aggResults.Count("agg5") // Dapatkan hasil operasi agregasi bernama agg5.
        if err != nil {
            panic(err)
        }
        fmt.Println("(count) agg6: ", agg5.Value) // Tampilkan jumlah nilai untuk kolom Col_Long.
    }
  • Contoh 2

    func MultipleAggregationsAndGroupBysSample(client *tablestore.TableStoreClient, tableName string, indexName string) {
        searchRequest := &tablestore.SearchRequest{}
    
        searchRequest.
            SetTableName(tableName). // Tentukan nama tabel data. 
            SetIndexName(indexName). // Tentukan nama indeks pencarian. 
            SetSearchQuery(search.NewSearchQuery().
                SetQuery(&search.MatchAllQuery{}). // Cocokkan semua baris. 
                SetLimit(0).
                Aggregation(search.NewAvgAggregation("agg1", "Col_Long")). // Hitung nilai rata-rata dari bidang Col_Long. 
                Aggregation(search.NewDistinctCountAggregation("agg2", "Col_Long")). // Hitung jumlah nilai unik dari bidang Col_Long. 
                Aggregation(search.NewMaxAggregation("agg3", "Col_Long")). // Kueri nilai maksimum dari bidang Col_Long. 
                GroupBy(search.NewGroupByField("group1", "Col_Keyword"). // Kelompokkan baris berdasarkan nilai bidang berdasarkan bidang Col_Keyword. 
                    GroupBySorters([]search.GroupBySorter{}). // Tentukan metode yang digunakan untuk mengurutkan grup yang dikembalikan. 
                    Size(2). // Tentukan bahwa hanya dua grup pertama yang dikembalikan. 
                    SubAggregation(search.NewAvgAggregation("sub_agg1", "Col_Long")). // Lakukan operasi agregasi sub pada setiap grup. 
                    SubGroupBy(search.NewGroupByField("sub_group1", "Col_Keyword2"))). // Lakukan operasi agregasi sub pada setiap grup. 
                GroupBy(search.NewGroupByRange("group2", "Col_Long"). // Kelompokkan baris berdasarkan rentang berdasarkan bidang Col_Long. 
                    Range(search.NegInf, 3). // Grup pertama berisi baris yang nilainya di bidang Col_Long berada dalam rentang (NegInf, 3). 
                    Range(3, 5). // Grup kedua berisi baris yang nilainya di bidang Col_Long berada dalam rentang [3, 5). 
                    Range(5, search.Inf))) // Grup ketiga berisi baris yang nilainya di bidang Col_Long berada dalam rentang [5, Inf). 
    
        // Kembalikan semua kolom. 
        searchResponse, err := client.Search(searchRequest)
        if err != nil {
            fmt.Printf("%#v", err)
            return
        }
    
        aggResults := searchResponse.AggregationResults // Dapatkan hasil agregasi. 
        // Dapatkan nilai rata-rata yang diperoleh dari operasi agregasi. 
        agg1, err := aggResults.Avg("agg1") // Dapatkan hasil operasi agregasi bernama agg1. 
        if err != nil {
            panic(err)
        }
        if agg1.HasValue() { // Periksa apakah hasil operasi agregasi bernama agg1 berisi nilai. 
            fmt.Println("(avg) agg1: ", agg1.Value) // Tampilkan nilai rata-rata dari bidang Col_Long. 
        } else {
            fmt.Println("(avg) agg1: no value") // Tampilkan baris yang tidak memiliki nilai untuk bidang Col_Long. 
        }
    
        // Dapatkan jumlah nilai unik dari hasil operasi agregasi. 
        agg2, err := aggResults.DistinctCount("agg2") // Dapatkan hasil operasi agregasi bernama agg2. 
        if err != nil {
            panic(err)
        }
        fmt.Println("(distinct) agg2: ", agg2.Value) // Tampilkan jumlah nilai unik untuk bidang Col_Long. 
    
        // Tampilkan nilai maksimum yang diperoleh dari operasi agregasi. 
        agg3, err := aggResults.Max("agg3") // Dapatkan hasil operasi agregasi bernama agg3. 
        if err != nil {
            panic(err)
        }
        if agg3.HasValue() {
            fmt.Println("(max) agg3: ", agg3.Value) // Tampilkan nilai maksimum untuk bidang Col_Long. 
        } else {
            fmt.Println("(max) agg3: no value") // Tampilkan baris yang tidak memiliki nilai untuk bidang Col_Long. 
        }
    
        groupByResults := searchResponse.GroupByResults // Dapatkan hasil agregasi. 
        // Dapatkan hasil operasi agregasi GroupByField. 
        group1, err := groupByResults.GroupByField("group1") // Dapatkan hasil operasi agregasi bernama group1. 
        if err != nil {
            panic(err)
        }
        fmt.Println("group1: ")
        for _, item := range group1.Items { // Telusuri semua grup yang dikembalikan. 
            //item
            fmt.Println("\tkey: ", item.Key, ", rowCount: ", item.RowCount) // Tampilkan jumlah baris di setiap grup. 
    
            // Dapatkan nilai rata-rata yang diperoleh dari operasi sub-agregasi. 
            subAgg1, err := item.SubAggregations.Avg("sub_agg1") // Dapatkan hasil operasi sub-agregasi bernama sub_agg1. 
            if err != nil {
                panic(err)
            }
            if subAgg1.HasValue() { // Jika sub_agg1 mendapatkan nilai rata-rata untuk bidang Col_Long, HasValue() disetel ke true. 
                fmt.Println("\t\tsub_agg1: ", subAgg1.Value) // Tampilkan nilai rata-rata untuk bidang Col_Long yang diperoleh dari operasi sub-agregasi. 
            }
    
            // Dapatkan hasil operasi sub-agregasi GroupByField. 
            subGroup1, err := item.SubGroupBys.GroupByField("sub_group1") // Dapatkan hasil operasi sub-agregasi bernama sub_group1. 
            if err != nil {
                panic(err)
            }
            fmt.Println("\t\tsub_group1")
            for _, subItem := range subGroup1.Items { // Telusuri hasil operasi sub-agregasi bernama sub_group1. 
                fmt.Println("\t\t\tkey: ", subItem.Key, ", rowCount: ", subItem.RowCount) // Tampilkan jumlah baris di setiap grup yang diperoleh dari hasil operasi sub-agregasi bernama sub_group1. 
                tablestore.Assert(subItem.SubAggregations.Empty(), "")
                tablestore.Assert(subItem.SubGroupBys.Empty(), "")
            }
        }
    
        // Dapatkan hasil operasi agregasi GroupByRange. 
        group2, err := groupByResults.GroupByRange("group2") // Dapatkan hasil operasi agregasi bernama group2. 
        if err != nil {
            panic(err)
        }
        fmt.Println("group2: ")
        for _, item := range group2.Items { // Telusuri semua grup yang dikembalikan. 
            fmt.Println("\t[", item.From, ", ", item.To, "), rowCount: ", item.RowCount) // Tampilkan jumlah baris di setiap grup. 
        }
    }

Lampiran: Metode berbeda untuk pengelompokan multi-kolom

Untuk pengelompokan multi-kolom, Anda dapat menggunakan parameter groupBy dalam mode bersarang atau parameter GroupByComposite. Tabel berikut menjelaskan perbedaan antara kedua metode.

Fitur

groupBy (bersarang)

Pengelompokan multi-kolom

size

2000

2000

Batasan kolom

Hingga 3 tingkat didukung.

Hingga 32 tingkat didukung.

Paginasi

Tidak didukung

Didukung dengan menggunakan parameter nextToken

Aturan pengurutan baris dalam kelompok

  • Dalam urutan abjad atau urutan abjad terbalik

  • Berdasarkan jumlah baris dalam urutan menaik atau jumlah baris dalam urutan menurun

  • Berdasarkan nilai yang diperoleh dari hasil sub-agregasi dalam urutan menaik atau nilai yang diperoleh dari hasil sub-agregasi dalam urutan menurun

Dalam urutan abjad atau urutan abjad terbalik

Mendukung agregasi

Ya

Ya

Kompatibilitas

Untuk kolom bertipe Date, hasil kueri dikembalikan dalam format yang ditentukan.

Untuk kolom bertipe DATE, hasil kueri dikembalikan sebagai string timestamp.