使用統計彙總功能可以實現求最小值、求最大值、求和、求平均值、統計行數、去重統計行數、按欄位值分組、按範圍分組、按地理位置分組、按過濾條件分組等操作;同時多個統計彙總功能可以組合使用,滿足複雜的查詢需求。

流程

統計彙總的完整執行流程如下圖所示。

fig_agg_pro

統計彙總是在服務端的“查詢”結束後執行,服務端會將“查詢”階段命中的所有文檔根據查詢請求進行統計彙總,因此統計彙總請求相比沒有統計彙總的請求會複雜。

背景資訊

統計彙總的詳細功能請參見下表。
功能說明
最小值

返回一個欄位中的最小值,類似於SQL中的min。

最大值

返回一個欄位中的最大值,類似於SQL中的max。

返回數值欄位的總數,類似於SQL中的sum。

平均值

返回數值欄位的平均值,類似於SQL中的avg。

統計行數返回指定欄位值的數量或者多元索引資料總行數,類似於SQL中的count。
去重統計行數返回指定欄位不同值的數量,類似於SQL中的count(distinct)。
百分位統計

百分位統計常用來統計一組資料的百分位分布情況,例如在日常系統營運中統計每次請求訪問的耗時情況時,需要關注系統請求耗時的P25、P50、P90、P99值等分布情況。

欄位值分組
根據一個欄位的值對查詢結果進行分組,相同的欄位值放到同一分組內,返回每個分組的值和該值對應的個數。
说明 當分組較大時,按欄位值分組可能會存在誤差。
範圍分組

根據一個欄位的範圍對查詢結果進行分組,欄位值在某範圍內放到同一分組內,返回每個範圍中相應的item個數。

地理位置分組

根據距離某一個中心點的範圍對查詢結果進行分組,距離差值在某範圍內放到同一分組內,返回每個範圍中相應的item個數。

過濾條件分組

按照過濾條件對查詢結果進行分組,擷取每個過濾條件匹配到的數量,返回結果的順序和添加過濾條件的順序一致。

長條圖統計

按照指定資料間隔對查詢結果進行分組,欄位值在相同範圍內放到同一分組內,返回每個分組的值和該值對應的個數。

擷取統計彙總分組中的行

對查詢結果進行分組後,擷取每個分組內的一些行資料,可實現和MySQL中ANY_VALUE(field)類似的功能。

前提條件

  • 已初始化Client。具體操作,請參見初始化
  • 已建立資料表並寫入資料。
  • 已在資料表上建立多元索引。具體操作,請參見建立多元索引

最小值

返回一個欄位中的最小值,類似於SQL中的min。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    missing

    當某行資料中的欄位為空白時,欄位值的預設值。

    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "min_test",
                    type: TableStore.AggregationType.AGG_MIN,
                    body: {
                        fieldName: "col_long",
                        missing: 333,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

最大值

返回一個欄位中的最大值,類似於SQL中的max。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    missing

    當某行資料中的欄位為空白時,欄位值的預設值。

    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "max_test",
                    type: TableStore.AggregationType.AGG_MAX,
                    body: {
                        fieldName: "col_long",
                        missing: 333,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

返回數值欄位的總數,類似於SQL中的sum。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    missing

    當某行資料中的欄位為空白時,欄位值的預設值。

    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "sum_test",
                    type: TableStore.AggregationType.AGG_SUM,
                    body: {
                            fieldName: "col_long",
                            missing: 444,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

平均值

返回數值欄位的平均值,類似於SQL中的avg。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    missing

    當某行資料中的欄位為空白時,欄位值的預設值。

    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "avg_test",
                    type: TableStore.AggregationType.AGG_AVG,
                    body: {
                            fieldName: "col_long",
                            missing: 111,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

統計行數

返回指定欄位值的數量或者多元索引資料總行數,類似於SQL中的count。
说明 通過如下方式可以統計多元索引資料總行數或者某個query匹配的行數。
  • 使用統計彙總的count功能,在請求中設定count(*)。
  • 使用query功能的匹配行數,在query中設定setGetTotalCount(true);如果需要統計多元索引資料總行數,則使用MatchAllQuery。

如果需要擷取多元索引資料某列出現的次數,則使用count(列名),可應用於稀疏列的情境。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long、Double、Boolean、Keyword和Geo_point類型。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "count_test",
                    type: TableStore.AggregationType.AGG_COUNT,
                    body: {
                            fieldName: "col_long",
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

去重統計行數

返回指定欄位不同值的數量,類似於SQL中的count(distinct)。
说明 去重統計行數的計算結果是個近似值。
  • 當去重統計行數小於1萬時,計算結果接近精確值。
  • 當去重統計行數達到1億時,計算結果的誤差為2%左右。
  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long、Double、Boolean、Keyword和Geo_point類型。
    missing當某行資料中的欄位為空白時,欄位值的預設值。
    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "AGG_DISTINCT_COUNT_test",
                    type: TableStore.AggregationType.AGG_DISTINCT_COUNT,
                    body: {
                            fieldName: "col_long",
                            missing: 666,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

百分位統計

百分位統計常用來統計一組資料的百分位分布情況,例如在日常系統營運中統計每次請求訪問的耗時情況時,需要關注系統請求耗時的P25、P50、P90、P99值等分布情況。

说明 百分位統計為非精確統計,對不同百分位元值的計算精確度不同,較為極端的百分位元值更加準確,例如1%或99%的百分位元值會比50%的百分位元值準確。
  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    percentiles百分位分布例如50、90、99,可根據需要設定一個或者多個百分位。
    missing當某行資料中的欄位為空白時,欄位值的預設值。
    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        aggs: {
            aggs: [
                {
                    name: "AGG_PERCENTILES_test",
                    type: TableStore.AggregationType.AGG_PERCENTILES,
                    body: {
                            fieldName: "col_long",
                            percentiles: [20, 50, 90, 100],
                            missing: 888,
                    },
                },
            ],
        },
    };
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

欄位值分組

根據一個欄位的值對查詢結果進行分組,相同的欄位值放到同一分組內,返回每個分組的值和該值對應的個數。
说明 當分組較大時,按欄位值分組可能會存在誤差。
  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long、Double、Boolean和Keyword類型。
    sort分組中的item定序,預設按照分組中item的數量降序排序,多個排序則按照添加的順序進行排列。支援的參數如下。
    • 按照值的字典序升序排列
    • 按照值的字典序降序排列
    • 按照行數升序排列
    • 按照行數降序排列
    • 按照子統計彙總結果中值升序排列
    • 按照子統計彙總結果中值降序排列
    size返回的分組數量,預設值為10。最大值為2000。當分組數量超過2000時,只會返回前2000個分組。
    subAggs和subGroupBys子統計彙總,子統計彙總會根據分組內容再進行一次統計彙總分析。
    • 情境

      統計每個類別的商品數量,且統計每個類別價格的最大值和最小值。

    • 方法

      最外層的統計彙總是根據類別進行分組,再添加兩個子統計彙總求價格的最大值和最小值。

    • 結果樣本
      • 水果:5個(其中價格的最大值為15,最小值為3)
      • 洗漱用品:10個(其中價格的最大值為98,最小值為1)
      • 電子裝置:3個(其中價格的最大值為8699,最小值為2300)
      • 其它:15個(其中價格的最大值為1000,最小值為80)
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                {
                    name: "group_by_GROUP_BY_FIELD",
                    type: TableStore.GroupByType.GROUP_BY_FIELD,
                    body: {
                        fieldName: "city",
                        size: 111,
                        sort: {
                            sorters: [
                                {
                                    groupKeySort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                                {
                                    rowCountSort: {
                                        order: TableStore.SortOrder.SORT_ORDER_DESC,
                                    },
                                },
                            ],
                        },
                        subGroupBys: { // 嵌套子GroupBy。
                            groupBys: [
                                {
                                    name: "group_by_GROUP_BY_RANGE",
                                    type: TableStore.GroupByType.GROUP_BY_RANGE,
                                    body: {
                                        fieldName: "age",
                                        ranges: [
                                            {
                                                from: 4,
                                                to: 5,
                                            },
                                            {
                                                from: 6,
                                                to: 7,
                                            },
                                        ],
                                        subAggs: { // 嵌套子Agg。
                                            aggs: [
                                                {
                                                    name: "AGG_COUNT_test",
                                                    type: TableStore.AggregationType.AGG_COUNT,
                                                    body: {
                                                        fieldName: "*",
                                                        missing: 8,
                                                    },
                                                },
                                            ],
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

範圍分組

根據一個欄位的範圍對查詢結果進行分組,欄位值在某範圍內放到同一分組內,返回每個範圍中相應的item個數。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    ranges[from, to)分組的範圍。

    起始值from可以使用最小值Double.MIN_VALUE,結束值to可以使用最大值Double.MAX_VALUE。

    subAggs和subGroupBys子統計彙總,子統計彙總會根據分組內容再進行一次統計彙總分析。

    例如按銷量分組後再按省份分組,即可獲得某個銷量範圍內哪個省比重比較大,實現方法是GroupByRange下添加一個GroupByField。

  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_RANGE",
                    type: TableStore.GroupByType.GROUP_BY_RANGE,
                    body: {
                        fieldName: "col_long",
                        ranges: [
                            {
                                from: 1,
                                to: 5,
                            },
                            {
                                from: 3,
                                to: 20,
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

地理位置分組

根據距離某一個中心點的範圍對查詢結果進行分組,距離差值在某範圍內放到同一分組內,返回每個範圍中相應的item個數。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Geo_point類型。
    origin(lat, lon)起始中心點的經緯度。

    lat是起始中心點緯度,lon是起始中心點經度。

    ranges[from, to)分組的範圍,單位為米。

    起始值from可以使用最小值Double.MIN_VALUE,結束值to可以使用最大值Double.MAX_VALUE。

    subAggs和subGroupBys子統計彙總,子統計彙總會根據分組內容再進行一次統計彙總分析。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_GEO_DISTANCE",
                    type: TableStore.GroupByType.GROUP_BY_GEO_DISTANCE,
                    body: {
                        fieldName: "col_geo",
                        origin: {
                            lat: 50,
                            lon: 60,
                        },
                        ranges: [
                            {
                                from: 1,
                                to: 2,
                            },
                            {
                                from: 3,
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

過濾條件分組

按照過濾條件對查詢結果進行分組,擷取每個過濾條件匹配到的數量,返回結果的順序和添加過濾條件的順序一致。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    filters過濾條件,返回結果的順序和添加過濾條件的順序一致。
    subAggs和subGroupBys子統計彙總,子統計彙總會根據分組內容再進行一次統計彙總分析。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                { 
                    name: "group_by_GROUP_BY_FILTER",
                    type: TableStore.GroupByType.GROUP_BY_FILTER,
                    body: {
                        filters: [
                            {
                                queryType: TableStore.QueryType.MATCH_ALL_QUERY,
                            },
                            {
                                queryType: TableStore.QueryType.WILDCARD_QUERY,
                                query: {
                                    fieldName: "col_keyword",
                                    value: "1*"
                                },
                            },
                        ],
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

長條圖統計

按照指定資料間隔對查詢結果進行分組,欄位值在相同範圍內放到同一分組內,返回每個分組的值和該值對應的個數。

  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    fieldName用於統計彙總的欄位,僅支援Long和Double類型。
    interval統計間隔。
    fieldRange[min,max]統計範圍,與interval參數配合使用限制分組的數量。(fieldRange.max-fieldRange.min)/interval的值不能超過2000。
    minDocCount最小行數。當分組中的行數小於最小行數時,不會返回此分組的統計結果。
    missing當某行資料中的欄位為空白時,欄位值的預設值。
    • 如果未設定missing值,則在統計彙總時會忽略該行。
    • 如果設定了missing值,則使用missing值作為欄位值的預設值參與統計彙總。
  • 樣本
    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: false,
        groupBys: {
            groupBys: [
                 { 
                    name: "group_by_GROUP_BY_HISTOGRAM",
                    type: TableStore.GroupByType.GROUP_BY_HISTOGRAM,
                    body: {
                        fieldName: "col_long",
                        interval: Long.fromNumber(3),
                        missing: Long.fromNumber(123),
                        minDocCount: 5,
                        fieldRange: {
                            min: Long.fromNumber(1),
                            max: Long.fromNumber(999),
                        },
                        sort: {
                            sorters: [
                                {
                                    groupKeySort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                                {
                                    rowCountSort: {
                                        order: TableStore.SortOrder.SORT_ORDER_ASC,
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: {返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });

擷取統計彙總分組中的行

對查詢結果進行分組後,擷取每個分組內的一些行資料,可實現和MySQL中ANY_VALUE(field)類似的功能。

说明 擷取統計彙總分組中的行時,如果多元索引中包含巢狀型別、地理位置類型或者數群組類型的欄位,則返回結果中只會包含主鍵資訊,請手動反查資料表擷取所需欄位。
  • 參數
    參數說明
    name自訂的統計彙總名稱,用於區分不同的統計彙總,可根據此名稱擷取本次統計彙總結果。
    limit每個分組內最多返回的資料行數,預設返回1行資料。
    sort分組內資料的排序方式。
    columnsToGet指定返回的欄位,僅支援多元索引中的欄位,且不支援數組、Date、Geopoint和Nested類型的欄位。

    該參數複用SearchRequest中的columnsToGet參數,在SearchRequest中指定columnsToGet即可。

  • 樣本

    某學校有一個活動報名表,活動報名表中包含學生姓名、班級、班主任、班長等資訊,如果希望按班級進行分組,以查看每個班級的報名情況,同時擷取班級的屬性資訊。等效的SQL語句是select className, ANY_VALUE(teacher), ANY_VALUE(monitor), COUNT(*) as number from table GROUP BY className

    let searchQuery = {
        offset: 0,
        limit: 0,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY,
        },
        getTotalCount: true,
        groupBys: {
            groupBys: [
                {
                    name: "group_by_name_xxx",
                    type: TableStore.GroupByType.GROUP_BY_FIELD,
                    body: {
                        fieldName: "className",
                        size: 200,
                        subAggs: {
                            aggs: [
                                {
                                    name: "top_row_name_xxx",
                                    type: TableStore.AggregationType.AGG_TOP_ROWS,
                                    body: {
                                        limit: 1,
                                        sort: {
                                            sorters: [
                                                {
                                                    fieldSort: {
                                                        fieldName: "teacher",
                                                        order: TableStore.SortOrder.SORT_ORDER_DESC,
                                                    },
                                                },
                                            ],
                                        },
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        },
    };
    
    let params = {
        tableName: tableName,
        indexName: indexName,
        searchQuery: searchQuery,
        columnToGet: { //返回列設定,可設定為RETURN_SPECIFIED(自訂返回列)、RETURN_ALL(返回所有列)、RETURN_ALL_FROM_INDEX(返回多元索引中的所有列)、RETURN_NONE(不返回)。
            returnType: TableStore.ColumnReturnType.RETURN_ALL_FROM_INDEX
        },
        timeoutMs: 30000,
    }
    client.search(params, function (err, data) {
        if (err) {
            console.log('search error:', err.toString());
        } else {
            console.log('search success:', data);
        }
    });