集計操作では、最小値、最大値、合計、平均値、行のカウント、ユニークカウントを取得できます。また、フィールド値、範囲、地理的位置、フィルターによって結果をグループ化したり、ネストされたクエリを実行したりすることもできます。複雑なクエリでは、複数の集計操作を実行できます。
操作手順
次の図に、集計の全手順を示します。

サーバーはクエリ条件を満たすデータをクエリし、リクエストに基づいてデータを集計します。そのため、集計が必要なリクエストは、集計が不要なリクエストよりも処理が複雑になります。
背景情報
次の表では、集計方法について説明します。
|
方法 |
説明 |
|
最小値 |
フィールドの最小値を返す集計方法です。この方法は、SQL MIN 関数と同様に使用できます。 |
|
最大値 |
フィールドの最大値を返す集計方法です。この方法は、SQL MAX 関数と同様に使用できます。 |
|
合計 |
数値フィールドのすべての値の合計を返す集計方法です。この方法は、SQL SUM 関数と同様に使用できます。 |
|
平均値 |
数値フィールドのすべての値の平均を返す集計方法です。この方法は、SQL AVG 関数と同様に使用できます。 |
|
カウント |
指定されたフィールドの値の総数、または検索インデックス内の行の総数を返す集計方法です。この方法は、SQL COUNT 関数と同様に使用できます。 |
|
個別カウント |
フィールドの個別の値の数を返す集計方法です。この方法は、SQL COUNT(DISTINCT) 関数と同様に使用できます。 |
|
パーセンタイル統計 |
パーセンタイル値は、データセット内の値の相対的な位置を示します。たとえば、システムの通常の運用保守中に各リクエストの応答時間に関する統計を収集する場合、p25、p50、p90、p99 などのパーセンタイルを使用して応答時間の分布を分析する必要があります。 |
|
フィールド値によるグループ化 |
フィールド値に基づいてクエリ結果をグループ化する集計方法です。同じ値を持つ結果がグループ化され、各グループで共通の値と、グループ内の結果の数が返されます。 説明
グループ内の結果の数が非常に多い場合、計算された数が実際の数と異なることがあります。 |
|
範囲によるグループ化 |
フィールドの値の範囲に基づいてクエリ結果をグループ化する集計方法です。特定の範囲内のフィールド値を持つ結果がグループ化されます。各範囲の結果の数が返されます。 |
|
地理的位置によるグループ化 |
地理的位置から中心点までの距離に基づいてクエリ結果をグループ化する集計方法です。中心点からの距離が特定の範囲内にあるクエリ結果がグループ化されます。各範囲の結果の数が返されます。 |
|
フィルターによるグループ化 |
クエリ結果をフィルターでグループ化し、各フィルターに一致する結果の数を取得する集計方法です。結果は、フィルターが指定された順序で返されます。 |
|
ヒストグラム集計 |
特定のデータ間隔に基づいてクエリ結果をグループ化する集計方法です。同じデータ間隔内のフィールド値を持つ結果がグループ化されます。各グループの値の範囲と、各グループの結果の数が返されます。 |
|
グループごとの行クエリ |
クエリ結果をグループ化した後、各グループの行をクエリできます。この方法は、MySQL の ANY_VALUE(field) 関数と同様に使用できます。 |
前提条件
-
OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
データテーブルが作成され、データが書き込まれていること。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
-
データテーブルに検索インデックスが作成されていること。詳細については、「検索インデックスの作成」をご参照ください。
最小値
フィールドの最小値を返す集計方法です。このメソッドは、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); } });
SUM
数値フィールドのすべての値の合計を返す集計方法です。このメソッドは、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を使用して、検索インデックス内の行の総数を取得します。
カウント式の値として列名を使用して、検索インデックス内でその列を含む行の数をクエリできます。このメソッドは、スパース列を含むシナリオに適しています。
-
パラメーター
パラメーター
説明
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); } });
パーセンタイル統計
パーセンタイル値は、データセットにおける値の相対的な位置を示します。たとえば、システムの日常の運用保守において各リクエストの応答時間に関する統計を収集する場合、p25、p50、p90、p99 などのパーセンタイルを使用して応答時間の分布を分析する必要があります。
結果の精度を向上させるために、p1 や p99 などの極端なパーセンタイル値を指定することを推奨します。p50 などの他の値の代わりに極端なパーセンタイル値を使用すると、より正確な結果が返されます。
-
パラメーター
パラメーター
説明
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 および subGroupBys
サブ集約オペレーションです。グループ化結果に基づいてサブ集約オペレーションを実行できます。
-
シナリオ
各カテゴリの製品数、および各カテゴリの最大・最小製品価格をクエリします。
-
方法
製品カテゴリ別にクエリ結果をグループ化して、各カテゴリの製品数を取得します。次に、2 つのサブ集約オペレーションを実行して、各カテゴリの最大・最小製品価格を取得します。
-
例:
-
果物:5。最高価格:USD 2、最低価格:USD 0.5。
-
トイレタリー:10。最高価格:USD 13、最低価格:USD 0.1。
-
電子機器:3。最高価格:USD 1,160、最低価格:USD 310。
-
その他の製品:15。最高価格:USD 130、最低価格:USD 11。
-
-
-
例
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 および subGroupBys
サブ集約操作です。グループ化の結果に基づいてサブ集約操作を実行できます。
たとえば、売上高と都道府県でクエリ結果をグループ化した後、指定された範囲で売上高の割合が最も大きい都道府県を取得できます。このクエリを実行するには、通常、GroupByRange の subGroupBys 内に 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 および 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); } });