全部产品
Search
文档中心

Tablestore:Aggregasi

更新时间:Jul 02, 2025

Anda dapat melakukan operasi agregasi untuk mendapatkan nilai minimum, maksimum, jumlah, rata-rata, total baris, dan jumlah unik baris. Operasi ini juga memungkinkan pengelompokan hasil berdasarkan nilai bidang, rentang, lokasi geografis, atau filter, serta menjalankan kueri bersarang. Beberapa operasi agregasi dapat digunakan untuk kueri kompleks.

Catatan

Tablestore SDK for Python V5.2.1 atau yang lebih baru mendukung fitur agregasi.

Informasi latar belakang

Tabel berikut menjelaskan metode agregasi.

Metode

Deskripsi

Nilai minimum

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

Nilai maksimum

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

Jumlah

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

Nilai rata-rata

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

Jumlah

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

Jumlah unik

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

Statistik persentil

Nilai persentil menunjukkan posisi relatif suatu nilai dalam dataset. Misalnya, ketika Anda mengumpulkan statistik tentang waktu respons setiap permintaan selama pemeliharaan rutin sistem Anda, Anda harus menganalisis distribusi waktu respons menggunakan persentil seperti p25, p50, p90, dan p99.

Pengelompokan berdasarkan nilai bidang

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan nilai bidang. Nilai yang sama dikelompokkan bersama. Nilai identik dari 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 rentang

Metode agregasi yang dapat digunakan untuk mengelompokkan hasil kueri berdasarkan rentang nilai sebuah bidang. Nilai bidang 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 ditentukan.

Kueri berdasarkan histogram

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

Prasyarat

Nilai minimum

Metode agregasi ini mengembalikan nilai minimum dari sebuah bidang dan dapat digunakan seperti fungsi MIN SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan skor terendah dari orang berusia 18 tahun:

    query = TermQuery('age', 18)
    agg = Min('score', name = 'min')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=0, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Nilai maksimum

Metode agregasi ini mengembalikan nilai maksimum dari sebuah bidang dan dapat digunakan seperti fungsi MAX SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan skor tertinggi dari orang berusia 18 tahun. Secara default, jika seseorang tidak memiliki skor, nilai 0 digunakan sebagai skor dalam agregasi.

    query = TermQuery('age', 18)
    agg = Max('score', missing_value = 0, name = 'max')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=0, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Jumlah

Metode agregasi ini mengembalikan jumlah semua nilai numerik dari sebuah bidang dan dapat digunakan seperti fungsi SUM SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan total skor orang berusia 18 tahun:

    query = TermQuery('age', 18)
    agg = Sum('score', name = 'sum')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Nilai rata-rata

Metode agregasi ini mengembalikan rata-rata semua nilai numerik dari sebuah bidang dan dapat digunakan seperti fungsi AVG SQL.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan skor rata-rata orang berusia 18 tahun:

    query = TermQuery('age', 18)
    agg = Avg('score', name = 'avg')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Jumlah

Metode agregasi ini mengembalikan jumlah total nilai untuk sebuah bidang tertentu atau jumlah total baris dalam indeks pencarian. Metode ini dapat digunakan seperti fungsi COUNT SQL.

Catatan

Anda dapat menggunakan metode berikut untuk mendapatkan jumlah total baris dalam indeks pencarian atau jumlah baris yang memenuhi kondisi kueri:

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

  • Gunakan fitur kueri untuk mendapatkan jumlah baris yang memenuhi kondisi kueri. Setel 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 mendapatkan jumlah baris yang mengandung kolom dalam indeks pencarian. Metode ini cocok untuk skenario dengan kolom jarang.

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan jumlah orang berusia 18 tahun yang memiliki skor:

    
    query = TermQuery('age', 18)
    agg = Count('score', name = 'count')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Jumlah unik

Metode agregasi ini mengembalikan jumlah nilai unik untuk sebuah bidang dan dapat digunakan seperti fungsi COUNT(DISTINCT) SQL.

Catatan

Jumlah nilai unik adalah angka perkiraan.

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

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT, dan DATE yang didukung.

    missing

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    Kode berikut menunjukkan contoh penggunaan agregasi untuk mendapatkan jumlah nama unik orang berusia 18 tahun:

    query = TermQuery('age', 18)
    agg = DistinctCount('name', name = 'distinct_name')
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('{\n"name":"%s",\n"value":%s\n}\n' % (agg_result.name, str(agg_result.value)))

Statistik persentil

Nilai persentil menunjukkan posisi relatif suatu nilai dalam dataset. Misalnya, ketika Anda mengumpulkan statistik tentang waktu respons setiap permintaan selama pemeliharaan rutin sistem, Anda dapat menganalisis distribusi waktu respons menggunakan persentil seperti p25, p50, p90, dan p99.

Catatan
  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    percentiles

    Persentil seperti p50, p90, dan p99. Anda dapat menentukan satu atau lebih persentil.

    missing_value

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing_value, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    query = TermQuery('product', '10010')
    agg = Percentiles('latency', percentiles_list = [50, 90, 95])
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, aggs=[agg]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for agg_result in search_response.agg_results:
        print('percentiles:%s' % agg_result.name)
        for item in agg_result.value:
            print('%s:%s' % (str(item.key), str(item.value)))

Pengelompokan berdasarkan nilai bidang

Metode agregasi ini mengelompokkan hasil kueri berdasarkan nilai bidang. 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

    name

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

    field

    Nama bidang yang digunakan untuk melakukan operasi agregasi. Hanya tipe LONG, DOUBLE, BOOLEAN, KEYWORD, dan DATE yang didukung.

    size

    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.

    group_by_sort

    Aturan pengurutan untuk kelompok. Secara default, kelompok diurutkan berdasarkan jumlah item dalam kelompok secara menurun. Jika Anda mengonfigurasi beberapa aturan pengurutan, kelompok akan diurutkan berdasarkan urutan aturan tersebut dikonfigurasi. Parameter yang 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.

    sub_aggs dan sub_group_bys

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

    • Skenario

      Kueri jumlah produk dalam setiap kategori, serta harga produk maksimum dan minimum 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 produk maksimum dan minimum dalam setiap kategori.

    • Hasil contoh

      • Buah-buahan: 5. Harga maksimum adalah CNY 15. Harga minimum adalah CNY 3.

      • Peralatan mandi: 10. Harga maksimum adalah CNY 98. Harga minimum adalah CNY 1.

      • Perangkat elektronik: 3. Harga maksimum adalah CNY 8.699. Harga minimum adalah CNY 2.300.

      • Produk lainnya: 15. Harga maksimum adalah CNY 1.000. Harga minimum adalah CNY 80.

  • Contoh 1

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan skor dan mendapatkan 10 skor paling umum serta jumlah orang dalam setiap kelompok:

    query = TermQuery('age', 18)
    group_by = GroupByField('score', size = 10)
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=20, group_bys = [group_by]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("key:%s, count:%d" % (item.key, item.row_count))
  • Contoh 2

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan skor dan mendapatkan dua skor paling jarang serta jumlah orang dalam setiap kelompok:

    group_by = GroupByField('score', size = 2, group_by_sort = [RowCountSort(sort_order=SortOrder.ASC)])
    search_response = client.search(table_name, index_name,
                                    SearchQuery(TermQuery('age', 18), limit=100, get_total_count=True, group_bys = [group_by]),
                                    ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("key:%s, count:%d" % (item.key, item.row_count))
  • Contoh 3

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan skor dan mendapatkan dua skor paling umum serta jumlah orang dalam setiap kelompok. Kemudian, urutkan setiap kelompok orang berdasarkan kunci utama dan dapatkan informasi tiga orang teratas dalam setiap kelompok:

    sort = RowCountSort(sort_order = SortOrder.DESC)
    sub_agg = [TopRows(limit=3,sort=Sort([PrimaryKeySort(sort_order=SortOrder.DESC)]), name = 't1')]
    
    group_by = GroupByField('l', size = 2, group_by_sort = [sort], sub_aggs = sub_agg)
    search_response = client.search(table_name, index_name,
                                    SearchQuery(TermQuery('age', 18), limit=100, get_total_count=True, group_bys = [group_by]),
                                    ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("\tkey:%s, count:%d" % (item.key, item.row_count))
            for sub_agg in item.sub_aggs:
                print("\t\tname:%s:" % sub_agg.name)
                for entry in sub_agg.value:
                    print("\t\t\tvalue:%s" % str(entry))
  • Contoh 4

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan skor dan jenis kelamin:

    sort = RowCountSort(sort_order = SortOrder.ASC)
    sub_group = GroupByField('sex', size = 10, group_by_sort = [sort])
    
    group_by = GroupByField('score', size = 10, group_by_sort = [sort], sub_group_bys = [sub_group])
    search_response = client.search(table_name, index_name,
                                    SearchQuery(TermQuery('age', 18), limit=100, get_total_count=True, group_bys = [group_by]),
                                    ColumnsToGet(return_type=ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("\tkey:%s, count:%d" % (item.key, item.row_count))
            for sub_group in item.sub_group_bys:
                print("\t\tname:%s:" % sub_group.name)
                for sub_item in sub_group.items:
                    print("\t\t\tkey:%s, count:%s" % (str(sub_item.key), str(sub_item.row_count)))

Pengelompokan berdasarkan rentang

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    range[double_from, double_to)

    Rentang nilai untuk pengelompokan.

    Rentang nilai dapat dimulai dari Double.MIN_VALUE dan berakhir dengan Double.MAX_VALUE.

    sub_aggs dan sub_group_bys

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

    Misalnya, setelah Anda mengelompokkan hasil kueri berdasarkan volume penjualan dan berdasarkan provinsi, Anda dapat memperoleh provinsi yang memiliki proporsi volume penjualan terbesar dalam rentang tertentu. Anda harus menentukan nilai untuk GroupByField dalam GroupByRange untuk melakukan kueri ini.

  • Contoh

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan rentang skor dan mendapatkan jumlah orang dengan skor dalam interval [80, 90) dan [90, 100):

    query = TermQuery('age', 18)
    group_by = GroupByRange(field_name = 'score', ranges = [(80, 90),(90, 100)])
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=0, group_bys = [group_by]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("range:%.1f~%.1f, count:%d" % (item.range_from, item.range_to, item.row_count))

Pengelompokan berdasarkan lokasi geografis

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

    Nama bidang yang digunakan untuk operasi agregasi. Hanya tipe GEOPOINT yang didukung.

    origin(double lat, double lon)

    Garis lintang dan bujur titik pusat.

    lat menentukan garis lintang titik pusat. lon menentukan garis bujur titik pusat.

    range[double_from, double_to)

    Rentang jarak yang digunakan untuk pengelompokan. Satuan: meter.

    Rentang nilai dapat dimulai dari Double.MIN_VALUE dan berakhir dengan Double.MAX_VALUE.

    sub_aggs dan sub_group_bys

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

  • Contoh

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan jarak geografis dari sekolah mereka ke rumah mereka dan mendapatkan jumlah orang yang tinggal dalam radius satu kilometer dari sekolah dan orang yang tinggal satu hingga dua kilometer dari sekolah: Garis lintang dan bujur sekolah adalah (31,116).

    query = TermQuery('age', 18)
    group_by = GroupByGeoDistance(field_name = 'address', origin=GeoPoint(31, 116), ranges = [(0, 1000), (1000,2000)])
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, group_bys = [group_by]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("range:%.1f~%.1f, count:%d" % (item.range_from, item.range_to, item.row_count))

Pengelompokan berdasarkan filter

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    filter

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

    sub_aggs dan sub_group_bys

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

  • Contoh

    Kode berikut menunjukkan contoh cara mengelompokkan orang berusia 18 tahun berdasarkan filter dan mendapatkan jumlah orang yang mendapat nilai 100 dalam ujian matematika dan yang mendapat nilai 100 dalam ujian bahasa Mandarin:

    query = TermQuery('age', 18)
    filter1 = TermQuery('math', 100)
    filter2 = TermQuery('chinese', 100)
    filters = [filter1, filter2]
    group_by = GroupByFilter(filters)
    
    search_response = client.search(
        table_name, index_name,
        SearchQuery(query, next_token = None, limit=2, group_bys = [group_by]),
        columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        i = 0
        for item in group_by.items:
            print("filter:%s=%s, count:%d" % (str(filters[i].field_name), str(filters[i].column_value), item.row_count))
            i=i+1

Kueri berdasarkan histogram

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

  • Parameter

    Parameter

    Deskripsi

    name

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

    field

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

    interval

    Interval data yang digunakan untuk mendapatkan hasil agregasi.

    field_range[min,max]

    Rentang yang digunakan bersama dengan parameter interval untuk membatasi jumlah kelompok. Nilai yang dihitung menggunakan rumus tidak boleh melebihi 2.000.

    min_doc_count

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

    missing_value

    Nilai default untuk bidang yang digunakan untuk melakukan operasi agregasi pada baris ketika nilai bidang kosong.

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

    • Jika Anda menentukan nilai untuk missing_value, nilai parameter ini digunakan sebagai nilai bidang baris tersebut.

  • Contoh

    query = TermQuery('product', '10010')
    group_by = GroupByHistogram(field_name = 'latency', interval = 100, field_range = FieldRange(0, 10000), missing_value = 0)
    
    search_response = client.search(table_name, index_name,
                                    SearchQuery(query, next_token = None, limit=2, group_bys = [group_by]),
                                    columns_to_get = ColumnsToGet(return_type = ColumnReturnType.ALL_FROM_INDEX))
    
    for group_by in search_response.group_by_results:
        print("name:%s" % group_by.name)
        print("groups:")
        for item in group_by.items:
            print("%s:%s" % (item.key, item.value))