すべてのプロダクト
Search
ドキュメントセンター

Tablestore:集計

最終更新日:Dec 28, 2024

最小値、最大値、合計値、平均値、行数、および行の個別カウントを取得するための集計操作を実行できます。 また、フィールド値、範囲、地理的な場所、またはフィルターに基づいて結果をグループ化し、ネストされたクエリを実行するための集計操作を実行することもできます。 複雑なクエリに対して複数の集計操作を実行できます。

手順

次の図は、完全な集計手順を示しています。

fig_agg_pro

サーバーは、クエリ条件を満たすデータをクエリし、リクエストに基づいてデータの集計を実行します。 したがって、集計を必要とするリクエストは、集計を必要としないリクエストよりも複雑です。

背景情報

次の表は、集計方法について説明しています。

方法

説明

最小値

フィールドの最小値を返すために使用できる集計方法。 このメソッドは、SQL MIN関数と同様の方法で使用できます。

最大値

フィールドの最大値を返すために使用できる集計方法。 このメソッドは、SQL MAX関数と同様の方法で使用できます。

合計

数値フィールドのすべての値の合計を返すために使用できる集計方法。 このメソッドは、SQL SUM関数と同様の方法で使用できます。

平均値

数値フィールドのすべての値の平均を返すために使用できる集計方法。 このメソッドは、SQL AVG関数と同様の方法で使用できます。

カウント

指定されたフィールドの値の総数または検索インデックス内の行の総数を返すために使用できる集計方法。 このメソッドは、SQL COUNT関数と同様の方法で使用できます。

個別カウント

フィールドの個別値の数を返すために使用できる集計方法。 このメソッドは、SQL COUNT(DISTINCT)関数と同様の方法で使用できます。

パーセンタイル統計

パーセンタイル値は、データセット内の値の相対位置を示します。 たとえば、システムの日常的なO&M中に各リクエストの応答時間に関する統計情報を収集する場合、p25、p50、p90、p99などのパーセンタイルを使用して応答時間の分布を分析する必要があります。

フィールド値によるグループ化

フィールド値に基づいてクエリ結果をグループ化するために使用できる集計方法。 同じ値はグループ化されます。 各グループの同一値と各グループの同一値の数が返されます。

説明

グループ内の値の数が非常に大きい場合、計算された数は実際の数と異なる場合があります。

範囲によるグループ化

フィールドの値の範囲に基づいてクエリ結果をグループ化するために使用できる集計方法。 指定された範囲内にあるフィールド値はグループ化されます。 各範囲の値の数が返されます。

地理的な場所によるグループ化

地理的な場所から中心点までの距離に基づいてクエリ結果をグループ化するために使用できる集計方法。 指定された範囲内にある距離のクエリ結果はグループ化されます。 各範囲の項目数が返されます。

フィルターによるグループ化

クエリ結果をフィルタリングし、各フィルターに基づいてグループ化して、一致する結果の数を取得するために使用できる集計方法。 結果は、フィルターが指定された順序で返されます。

ヒストグラムによるクエリ

この集計方法は、特定のデータ間隔に基づいてクエリ結果をグループ化するために使用できます。 同じ範囲内にあるフィールド値はグループ化されます。 各グループの値の範囲と各グループの値の数が返されます。

各グループの集計操作の結果から取得された行をクエリする

クエリ結果をグループ化した後、各グループの行をクエリできます。 このメソッドは、MySQLのANY_VALUE(field)と同様の方法で使用できます。

前提条件

最小値

フィールドの最小値を返すために使用できる集計方法。 このメソッドは、SQL MIN関数と同様の方法で使用できます。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作を実行するために使用されるフィールドの名前。 LONG、DOUBLE、およびDATEタイプのみがサポートされています。

    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、およびDATEタイプのみがサポートされています。

    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に値を指定した場合、このパラメーターの値が行のフィールド値として使用されます。

  • 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、およびDATEタイプのみがサポートされています。

    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関数と同様の方法で使用できます。

説明

検索インデックス内の行の総数またはクエリ条件を満たす行の総数をクエリするには、次の方法を使用できます。

  • 集計のカウント機能を使用し、リクエストでcount(*)を指定します。

  • クエリ機能を使用して、クエリ条件を満たす行の数を取得します。 クエリでsetGetTotalCountをtrueに設定します。 MatchAllQueryを使用して、検索インデックス内の行の総数を取得します。

カラムの名前をcount式の値として使用して、検索インデックスにカラムが含まれる行の数をクエリできます。 この方法は、スパースカラムを含むシナリオに適しています。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作を実行するために使用されるフィールドの名前。 LONG、DOUBLE、BOOLEAN、KEYWORD、GEO_POINT、およびDATEタイプのみがサポートされています。

  • 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)関数と同様の方法で使用できます。

説明

個別値の数は概数です。

  • 個別カウント機能を使用する前の行の総数が10,000未満の場合、計算結果は正確な値に近くなります。

  • 個別カウント機能を使用する前の行の総数が1億以上の場合、エラー率は約2%です。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作を実行するために使用されるフィールドの名前。 LONG、DOUBLE、BOOLEAN、KEYWORD、GEO_POINT、およびDATEタイプのみがサポートされています。

    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);
        }
    });

パーセンタイル統計

パーセンタイル値は、データセット内の値の相対位置を示します。 たとえば、システムの日常的なO&M中に各リクエストの応答時間に関する統計情報を収集する場合、p25、p50、p90、p99などのパーセンタイルを使用して応答時間の分布を分析する必要があります。

説明
  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作を実行するために使用されるフィールドの名前。 LONG、DOUBLE、およびDATEタイプのみがサポートされています。

    percentiles

    p50、p90、p99などのパーセンタイル。 1つ以上のパーセンタイルを指定できます。

    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、およびDATEタイプのみがサポートされています。

    sort

    グループの並べ替えルール。 デフォルトでは、グループはグループ内の項目数に基づいて降順に並べ替えられます。 複数の並べ替えルールを設定した場合、グループはルールが設定された順序で並べ替えられます。 サポートされている並べ替えルール:

    • 値をアルファベット順に並べ替えます。

    • 値をアルファベットの逆順に並べ替えます。

    • 行カウントを昇順に並べ替えます。

    • 行カウントを降順に並べ替えます。

    • サブ集計結果から取得された値を昇順に並べ替えます。

    • サブ集計結果から取得された値を降順に並べ替えます。

    size

    返すグループの数。 デフォルト値:10。 最大値:2000。 グループの数が2,000を超える場合、最初の2,000グループのみが返されます。

    subAggs and subGroupBys

    サブ集計操作。 グループ化結果に基づいてサブ集計操作を実行できます。

    • シナリオ

      各カテゴリの製品数、および各カテゴリの製品の最高価格と最低価格をクエリします。

    • 方法

      製品カテゴリ別にクエリ結果をグループ化して、各カテゴリの製品数を取得します。 次に、2つのサブ集計操作を実行して、各カテゴリの製品の最高価格と最低価格を取得します。

    • 例:

      • 果物:5。 最高価格は15人民元です。 最低価格は3人民元です。

      • トイレタリー:10。 最高価格は98人民元です。 最低価格は1人民元です。

      • 電子機器:3。 最高価格は8,699人民元です。 最低価格は2,300人民元です。

      • その他の製品:15。 最高価格は1,000人民元です。 最低価格は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: { // ネストされたsubGroupBys。
                            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: { // ネストされたサブ集計。
                                            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);
        }
    });

範囲によるグループ化

フィールドの値の範囲に基づいてクエリ結果をグループ化するために使用できる集計方法。 指定された範囲内にあるフィールド値はグループ化されます。 各範囲の値の数が返されます。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作を実行するために使用されるフィールドの名前。 LONGおよびDOUBLEタイプのみがサポートされています。

    ranges[from, to)

    グループ化に使用される値の範囲。

    値の範囲はDouble.MIN_VALUEから始まり、Double.MAX_VALUEで終わることができます。

    subAggs and 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);
        }
    });

地理的な場所によるグループ化

地理的な場所から中心点までの距離に基づいてクエリ結果をグループ化するために使用できる集計方法。 指定された範囲内にある距離のクエリ結果はグループ化されます。 各範囲の項目数が返されます。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    fieldName

    集計操作に使用されるフィールドの名前。 GEOPOINTタイプのみがサポートされています。

    origin(lat, lon)

    中心点の経度と緯度。

    latは中心点の緯度を指定します。 lonは中心点の経度を指定します。

    ranges[from, to)

    グループ化に使用される距離範囲。 単位:メートル。

    値の範囲はDouble.MIN_VALUEから始まり、Double.MAX_VALUEで終わることができます。

    subAggs and 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 and 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パラメーターと共に使用してグループの数を制限する範囲。 式を使用して計算された値は2,000を超えることはできません。

    minDocCount

    行の最小数。 グループ内の行数が行の最小数よりも少ない場合、グループの集計結果は返されません。

    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)と同様の方法で使用できます。

説明

各グループの集計操作の結果から取得された行をクエリする場合、検索インデックスにNESTED、GEOPOINT、またはARRAYフィールドが含まれていると、返される結果にはプライマリキー情報のみが含まれます。 必要なフィールドを取得するには、データテーブルをクエリする必要があります。

  • パラメーター

    パラメーター

    説明

    name

    集計操作の一意の名前。 この名前を使用して、特定の集計操作の結果をクエリできます。

    limit

    各グループに返される行の最大数。 デフォルトでは、1行のデータのみが返されます。

    sort

    グループ内のデータを並べ替えるために使用される並べ替え方法。

    columnsToGet

    返すフィールド。 検索インデックス内のフィールドのみがサポートされています。 ARRAY、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);
        }
    });