(57)【要約】【課題】  データセットの集約演算を、緩和された制約条件のもとで、高速に実行する。【解決手段】  集約装置は、Ｎ（複数）個の原レコードからなる全体データセットを格納するデータ記憶手段に接続され、当該全体データセットをｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して指定された集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを出力する集約前処理手段と、指定されたデータセットに対して指定された集約演算を行って、集約結果を装置外に出力するクエリ実行手段と、全体データセットに対する第１の集約演算命令を受信して、前処理部に第２の集約演算を実行させ、クエリ実行手段に部分集約済みデータセット対して第３の集約演算を実行させるクエリ最適化手段と、を備える。【選択図】      図２
2016130929.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ（複数）個の原レコードからなる全体データセットを格納するデータ記憶手段に接続され、
当該全体データセットをｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して指定された集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを出力する集約前処理手段と、
指定されたデータセットに対して指定された集約演算を行って、集約結果を装置外に出力するクエリ実行手段と、
前記全体データセットに対する第１の集約演算命令を受信して、前記前処理部に第２の集約演算を実行させ、前記クエリ実行手段に前記部分集約済みデータセット対して第３の集約演算を実行させるクエリ最適化手段と、を備える集約装置。
【請求項２】
前記原レコードの各々は、変数Ｙの値を包含し、
前記クエリ最適化手段は、前記全体データセットに対する変数Ｙの値の平均値を求める第１の集約演算命令を受信すると、１）前記前処理部に、各部分集合の原レコード数であるＮＲＯＷＳと、各原レコードの変数Ｙの値の合計であるＰ−ＳＵＭ（Ｙ）と、を求める第２の集約演算を実行させ、２）前記集約部に、各部分集合のＰ−ＳＵＭ（Ｙ）の合計値を各部分集合のＮＲＯＷＳの合計値で除す第３の集約演算を実行させる、請求項１の集約装置。
【請求項３】
前記原レコードの各々は、変数Ｙの値を包含し、
前記クエリ最適化手段は、前記全体データセットに対する変数Ｙの値の分散を求める第１の集約演算命令を受信すると、１）前記前処理部に、各部分集合の原レコード数であるＮＲＯＷＳと、各原レコードの変数Ｙの値の合計であるＰ−ＳＵＭ（Ｙ）と、各原レコードの変数Ｙの値の二乗の合計であるＰ−ＳＵＭ（Ｙ＾２）と、を求める第２の集約演算を実行させ、２）前記集約部に、各部分集合のＰ−ＳＵＭ（Ｙ＾２）の合計値から、各部分集合のＰ−ＳＵＭ（Ｙ）の合計値の２乗を減じた値を、各部分集合のＮＲＯＷＳの合計値で除す第３の集約演算を実行させる、請求項１の集約装置。
【請求項４】
前記原レコードの各々は、変数Ｘの値を包含し、
前記集約前処理手段は、変数Ｘの値をキーに部分集合に属する原レコードをソートして、変数Ｘの値が同一である原レコードのグループごとに第２の集約演算を実行して、変数Ｘの値対応の中間結果を包含する中間レコードを生成し、
前記クエリ実行手段は、変数Ｘの値が同一である中間結果を対象に第３の集約演算を行う、請求項１の集約装置。
【請求項５】
並列演算が可能な並列演算手段に接続され、
前記集約前処理手段は、前記並列演算手段を用いて、ソートと第２の集約演算を並列に実行する、請求項４の集約装置。
【請求項６】
請求項５の集約装置と、
前記並列演算手段と、
前記データ記憶手段と、を包含する集約システム。
【請求項７】
データ記憶手段に格納された、Ｎ（複数）個の原レコードからなる全体データセットに対する第１の集約演算命令を受信して、
当該全体データセットを、ｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して第２の集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを生成し、
前記部分集約済みデータセットに対して第３の集約演算を行って、集約結果を出力する集約方法。
【請求項８】
前記原レコードの各々は、変数Ｙの値を包含し、
前記全体データセットに対する変数Ｙの値の平均値を求める第１の集約演算命令を受信すると、１）各部分集合の原レコード数であるＮＲＯＷＳと、各原レコードの変数Ｙの値の合計であるＰ−ＳＵＭ（Ｙ）と、を求める第２の集約演算を実行し、２）各部分集合のＰ−ＳＵＭ（Ｙ）の合計値を各部分集合のＮＲＯＷＳの合計値で除す第３の集約演算を実行する、請求項７の集約方法。
【請求項９】
前記原レコードの各々は、変数Ｙの値を包含し、
前記全体データセットに対する変数Ｙの値の分散を求める第１の集約演算命令を受信すると、１）各部分集合の原レコード数であるＮＲＯＷＳと、各原レコードの変数Ｙの値の合計であるＰ−ＳＵＭ（Ｙ）と、各原レコードの変数Ｙの値の二乗の合計であるＰ−ＳＵＭ（Ｙ＾２）と、を求める第２の集約演算を実行し、２）各部分集合のＰ−ＳＵＭ（Ｙ＾２）の合計値から、各部分集合のＰ−ＳＵＭ（Ｙ）の合計値の２乗を減じた値を、各部分集合のＮＲＯＷＳの合計値で除す第３の集約演算を実行する、請求項７の集約方法。
【請求項１０】
コンピュータに、請求項７乃至請求項９の集約方法を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集約装置、集約システム、集約方法、および、プログラム、特に、データセットの数値データを集約する集約装置、集約システム、集約方法、および、プログラム関する。
【背景技術】
【０００２】
リレーショナルデータベース管理システムは、データを、列および行から成る表（テーブル）形式で保存する。リレーショナルデータベースの利用者は、データを読み出す際に、クエリ言語、例えばＳＱＬ(Structured Query Language)により、どの表から、どの列を、どういった条件で読み出すかを指定する。
【０００３】
データベース活用の一領域であるＯＬＡＰ（Online Analytic Processing）等では、利用者は、リレーショナルデータベースシステムに蓄積された大量のデータに対し、集約演算と呼ばれる操作を実行する。集約演算は、特定の列(集約キー)の値が等しい行同士をグループ化し、各々グループごとに、そのグループ内で別の列に含まれる値の平均値や合計、標準偏差といった統計情報を算出する演算である。
【０００４】
図１は、集約演算の例を示す図である。本図において、左側の表が入力データである。右側の表は、この入力データに対して、集約キーをＸ列としてＹ列のデータの平均値を求める集約演算を実行した結果を示す。結果の表は、Ｙの平均値をＡＶＧ（Ｙ）列に、当該グループに属す行の数をＣＯＵＮＴ（＊）列に示している。例えば、本図の左側の入力データにおいて、Ｘ列の値が“ccc”である行のグループは３行目と７行目を含み、当該２つの行のＹ列の値は３０と２０である。本図の右側の表の３行目は、このグループの集約演算の結果を示し、ＡＶＧ（Ｙ）列の値が２５、ＣＯＵＮＴ（＊）列の値が２となっている。
【０００５】
リレーショナルデータベース管理システムは、ＯＬＡＰにおける集約演算を、例えば、次のように実行する。まず、リレーショナルデータベース管理システムは、入力データを集約キー値でソートする。その後、当該システムは、ソート済みの入力データの行をチェックして、集約キー値が一つ前の行の値と同じである限り、平均値や合計値を計算し続け、集約キー値の値が変わった時点で、そこまで記録した集約演算結果を出力する。
【０００６】
上述した方法を用いた場合、大規模な入力データの集約演算の計算時間は長くなることが多い。多数の行データの処理が必要になるからである。特に、前処理として入力データのソートが発生するときには、顕著に長い処理時間を要する。ソートのアルゴリズムにもよるが、計算時間は、データ量の増加率よりも大きな比率で増加する。
【０００７】
この問題に対応するため、以下の特許文献に示すような様々な工夫がなされている。
【０００８】
特許文献１は、リレーショナルデータベースにおける最大値、最小値、合計値を求める集約演算を、複数の処理装置で並列に行うシステムを開示する。このシステムは、リレーショナルデータベースを複数の副処理装置に分割して格納する。副処理装置は、並行して、各々に格納された部分の最大値、最小値、合計値を求める集約演算を実行し、その結果を主処理装置に送信する。主処理装置は、全副処理装置から送信された結果に対して、副処理装置と同様な集約演算を行い、最終結果を得る。
【０００９】
特許文献２は、リレーショナルデータベースにおける関数従属性の特性を利用して集約演算を行うべきレコード数を削減するシステムを開示する。
【００１０】
特許文献３は、データベース・ユーザ定義プログラムを高パフォーマンス並列コンピュータ上で実行するシステムを開示する。
【００１１】
特許文献４は、データベースへのデータ格納をデータベースサービスと並行して処理するデータベース管理システムを開示する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平５−２６１０号公報
【特許文献２】国際公開２００７／００２２８１号
【特許文献３】国際公開２００９／０３８９１１号
【特許文献４】特開２００２−１５７１５６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
特許文献１のシステムは、リレーショナルデータベースの集約演算を指示され、各副処理装置、および、主処理装置で、指示された演算を実行する。演算の対象となるデータは変わるが、実行する演算は同じである。最大値、最小値、合計値は、このような方法で計算可能であるが、この仕組みで可能な演算の種類は限られる。
【００１４】
特許文献２の技術は、データの特性に基づいて計算量を減らすものであり、その有効性はデータ特性に制限される。
【００１５】
特許文献３のシステムは、並列実行可能な部分を予めユーザ定義関数として事前定義させなければならない。
【００１６】
本発明は、上述の制限を排除若しくは緩和させるための集約装置、集約システム、集約方法、および、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の１実施形態にかかる集約装置は、Ｎ（複数）個の原レコードからなる全体データセットを格納するデータ記憶手段に接続され、当該全体データセットをｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して指定された集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを出力する集約前処理手段と、指定されたデータセットに対して指定された集約演算を行って、集約結果を装置外に出力するクエリ実行手段と、前記全体データセットに対する第１の集約演算命令を受信して、前記前処理部に第２の集約演算を実行させ、前記クエリ実行手段に前記部分集約済みデータセット対して第３の集約演算を実行させるクエリ最適化手段と、を備える。
【００１８】
本発明の１実施形態にかかる集約方法は、データ記憶手段に格納された、Ｎ（複数）個の原レコードからなる全体データセットに対する第１の集約演算命令を受信して、当該全体データセットを、ｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して第２の集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを生成し、前記部分集約済みデータセットに対して第３の集約演算を行って、集約結果を出力する。
【発明の効果】
【００１９】
本発明にかかる集約装置は、リレーショナルデータベースなどのデータセットに対する、集約演算を、緩和された制約条件のもとで、高速に実行することが出来る。
【図面の簡単な説明】
【００２０】
【図１】図１は、集約演算の例を示す図である。
【図２】図２は、第１の実施の形態の集約システム５０の構成を示す。
【図３】図３は、集約装置１０が実行する集約演算の処理フロー（その１）である。
【図４】図４は、集約装置１０が実行する集約演算の処理フロー（その２）である。
【図５】図５は、集約前処理ステップで行われる部分データセットの集約処理を説明する概念図である。
【図６】図６は、並列演算部３０は、部分データセットの集約を、複数の部分データセットについて、並列して実行する状況を説明する概念図である。
【図７】図７は、第２の実施の形態の集約装置１０の構成を示す。
【発明を実施するための形態】
【００２１】
＜第１の実施の形態＞
本実施の形態の集約システム５０は、リレーショナルデータベース等から読み出した多数の入力レコードに対して問合せ（クエリ）で要求された集約演算を行う際に、ａ）並列プロセッサによる前処理と、ｂ）クエリの変更とを組み合わせて実行する。これにより、集約システム５０は、クエリの応答時間を短縮する。
【００２２】
図２は、第１の実施の形態の集約システム５０の構成を示す。集約システム５０は、集約装置１０と、データ記憶部２０、および、並列演算部３０を包含する。データ記憶部２０、および、並列演算部３０は、集約装置１０に接続されている。
【００２３】
データ記憶部２０は、例えば、リレーショナルデータベースを格納する。集約システム５０は、利用者端末装置（以下、利用者と呼ぶ）からクエリを受信して、当該クエリで要求されたリレーショナルデータベースの集約演算を実行し、実行結果を利用者に送信する。
【００２４】
集約装置１０は、クエリ構文解析部１１、クエリ最適化部１２、クエリ実行部１３、集約前処理部１４、および、通信部１５を包含する。
【００２５】
利用者は、データ記憶部２０に格納されているデータベースへの問い合わせを、通信部１５を通じて集約装置１０へ送出する。集約装置１０が受け取った問い合わせは、次にクエリ構文解析部１１へと送られる。クエリ構文解析部１１は、文字列として渡された問い合わせを内部形式へと変換し、クエリ最適化部１２に送出する。
【００２６】
クエリ実行部１３は、図示しないデータ集約装置、データソート装置、等を有しても良い。データソート装置は、レコードのソートを実行する専用の装置である。データ集約装置は、複数のレコードの集約演算を行う専用装置である。
【００２７】
一般的にリレーショナルデータベースシステムは、多種多様な問い合わせを処理するための実行装置群を備えており、クエリ最適化部１２は、これらの実行装置群を組み合わせて最も効率的に問い合わせを実行するためのクエリ実行計画を作成する。
【００２８】
クエリ実行部１３は、クエリ最適化部１２が作成したクエリ実行計画に基づいて実行装置群を起動し、問合せで要求された演算を行う。最後にクエリ実行部１３は、最終的な処理結果を、通信部１５経由で利用者へと返信する。
【００２９】
図３は、集約装置１０が実行する集約演算の処理フロー（その１）である。図３が示すフローは、通常のリレーショナルデータベースシステムでも実行されていた集約演算と類似したフローである。
【００３０】
このクエリ実行フローは、ディスクスキャン（Ｓ１）、データソート（Ｓ２）、および、データ集約（Ｓ３）の３つの処理ステップから成る。クエリ実行部１３は、クエリ最適化部１２が作成した実行計画に従って、以下のように動作する。
【００３１】
クエリ実行部１３は、ディスクスキャンステップにおいて、データ記憶部２０から入力データを読み出し、データベースのレコードとして主記憶上にロードする。この時、各レコードは、集約キーとなる列、例えばＸ列、および、集約演算の対象となる列、例えばＹ列を含んでいる。レコードの並び順は規定されない。
【００３２】
次に、クエリ実行部１３は、データソートステップにおいて、これらのレコードをＸ列の値をキーとしてソートする。クエリ実行部１３は、このとき、図示されないデータソート装置を用いても良い。クエリ実行部１３は、このデータソートステップで、入力と同じ型のレコードを、集約キーの大小関係の順に並べ替えて出力する。
【００３３】
通常、最速とされるクイックソートを用いた場合でも、クエリ実行部１３は、Ｎ行（Ｎは複数）からなるデータベースのレコードの並び替えに、Ｎｌｏｇ２Ｎ回の比較を行わなければならない。したがって、このソートステップの実行時間は、問合せの応答時間に大きな影響を与える。
【００３４】
データ集約ステップにおいて、クエリ実行部１３は、集約キーでソートされたレコードをソートされた順にチェックする。チェックしたレコードのＸ列の値が、一つ前にチェックしたレコードのＸ列の値と同じである限り、クエリ実行部１３は、集約演算、例えば、Ｙ列の平均値（ＡＶＧ（Ｙ））と行数（ＣＯＵＮＴ（＊））の計算を続ける。Ｘ列の値が、値が次のグループに移ったか終端に達したとき、クエリ実行部１３は、前のグループのＡＶＧ（Ｙ）とＣＯＵＮＴ（＊）の値を出力する。データ集約ステップにおいて、クエリ実行部１３は、図示されないデータ集約装置を用いても良い。
【００３５】
図４は、集約装置１０が実行する集約演算の処理フロー（その２）である。図４に示すフローは、上述したａ）並列プロセッサによる前処理と、ｂ）クエリの変更を包含するフローである。集約装置１０が、図３のフローと図４のフローとを、どのように選択して使い分けるかは後述する。
【００３６】
クエリ最適化部１２は、図４に示すフローの実行計画においても図３ときと同様に、ディスクスキャン（Ｓ１０）、データソート（Ｓ２０）、データ集約（Ｓ３０）のステップを組み込む。但し、クエリ最適化部１２は、図４に示すフローの実行計画には、ディスクスキャン（Ｓ１０）とデータソート（Ｓ２０）の間に集約前処理（Ｓ１５）のステップを挟み込む。
【００３７】
クエリ実行部１３、および、集約前処理部１４は、クエリ最適化部１２が作成した実行計画に従って、以下のように動作する。
【００３８】
まず、クエリ実行部１３は、ディスクスキャンステップ（Ｓ１０）において、データ記憶部２０からＮレコードからなる入力データを読み出す。クエリ実行部１３は、読み出したデータ（全体データセット）を、例えば、集約装置１０の主記憶装置に格納する。
【００３９】
集約前処理ステップ（Ｓ１５）において、集約前処理部１４は、全体データセットを、例えば、一定数ｋ（ｋは複数）レコードごとの部分データセットに分割する。集約前処理部１４は、例えば、並列演算部３０の主記憶サイズに応じて入力データを複数の領域に分割する。分割は、必ずしも同じレコード数ごとに行う必要は無い。
【００４０】
次に、集約前処理部１４は、並列演算部３０を使用して、その部分データセットの集約処理を行う。
【００４１】
ここで、並列演算部３０は、例えば、数百乃至数千レベルの並列演算可能なプロセッサを備え、集約装置１０のクエリ実行部１３よりも十分に大きな計算能力を有している。また、並列演算部３０は、集約装置１０とは独立な主記憶装置を持っているが、その容量は集約装置１０の主記憶装置よりも小さくても良い。並列演算部３０は、その主記憶装置に格納された部分データセットに対しては非常に高速なソートや、集約処理を行う事ができる。
【００４２】
並列演算部３０の並列計算特性を活かしたソート処理は、例えば、Bitonic-SortingやRedix-Sortingが知られている。また、並列演算部３０の並列計算特性を活かした集約処理は、例えば、Parallel Reductionアルゴリズムが知られている。並列演算部３０は、例えば、これらのアルゴリズムを用いる事により、入力データの一部分に対する部分集約処理を高速に実行する。
【００４３】
図５は、集約前処理ステップ（Ｓ１５）で行われる部分データセットの集約処理を説明する概念図である。
【００４４】
集約前処理部１４は、順番に、各部分データセットを並列演算部３０の主記憶装置に格納し、並列演算部３０を起動する。起動された並列演算部３０は、部分データセットのソートと集約処理を行い、集約済みのデータセット（部分集約済みデータセット）を集約前処理部１４に出力する。そして、集約前処理部１４は、部分集約済みデータセットを、受け取ると、クエリ実行部１３に出力する。
【００４５】
図５は、集約前処理部１４が、ｉ行目（ｉはｋの倍数）からｉ+ｋ行目までのレコードからなる部分データセットを、並列演算部３０の主記憶装置に格納し、当該部分データセットのソートと集約を行い、部分集約済みデータセットを出力する様子を示している。
【００４６】
図４のＳ１５で、すべての部分集約済みデータセットが集約前処理部１４からクエリ実行部１３に渡されると、クエリ実行部１３は、すべての部分集約済みデータセットに属するレコード（中間レコード）に対して、データソート（Ｓ２０）とデータ集約（Ｓ３０）を行う。このとき、クエリ実行部１３は、図示されないデータソート装置、および、データ集約装置を用いても良い。
【００４７】
クエリ実行部１３が行うデータソート（Ｓ２０）とデータ集約（Ｓ３０）は、部分集約済みデータセットを対象とする。これにより、クエリ実行部１３に入力されるレコードの数が、図３のフローの場合より大幅に少なくなることが期待される。また、並列演算部３０は、クエリ実行部１３も大幅に処理速度が優れる事が期待できる。さらに、並列演算部３０を使うことで、クエリ実行部１３の負荷を下げる事が出来る。これらの効果により、集約システム５０は、問い合わせ結果を利用者へ返却する際の応答速度を改善できる。
【００４８】
ここで、全体データセットが、部分データセットの集約事前処理（Ｓ１５）と、その結果作成された部分集約済みデータセットの集約（Ｓ２０、Ｓ３０）に分けて集約される意味を説明する。
【００４９】
図１で説明したように、集約演算は、あるグループ化キー値の同じレコード同士で平均値や合計、標準偏差といった値を計算するものである。集約演算の中には、部分データセットの集約（Ｓ１５）の結果を、後で統合する（Ｓ２０、Ｓ３０）事によって、全体データセットを直接集約した場合と等価な結果を得られるものがある。
【００５０】
例えば、全体データセットのグループ化されたレコードの件数を示すＣＯＵＮＴ（＊）は、部分集約済みデータセットの同グループに含まれる行数ＮＲＯＷＳ、すなわち、各部分データセットの同グループ内のレコード数、の合計と等価である。集約装置１０は、全体データセットに対するＣＯＵＮＴ（*）の値として、全部分集約済みデータセットのＮＲＯＷＳの合計値ＳＵＭ（ＮＲＯＷＳ）を出力しても良い。
【００５１】
また、列Ｙの平均値ＡＶＧ（Ｙ）は、部分データセットの集約で集計されたＹの部分合計値Ｐ＿ＳＵＭ（Ｙ）の合計値ＳＵＭ（Ｐ＿ＳＵＭ（Ｙ））を、部分集約済みデータセットに含まれる行数ＮＲＯＷＳの合計値ＳＵＭ（ＮＲＯＷＳ）で除した値と等価である。したがって、集約装置１０は、ＡＶＧ（Ｙ）として、上記の除算結果を出力しても良い。
【００５２】
さらに、列Ｙの分散ＶＡＲＩＡＮＣＥ（Ｙ）は、定義により以下の式（１）で計算される。
2016130929.tif 000003
【００５３】
すなわち、ＶＡＲＩＡＮＣＥ（Ｙ）は、部分集約で集計された、Ｙの二乗の部分合計値Ｐ−ＳＵＭ（Ｙ＾２）の合計値ＳＵＭ（Ｐ＿ＳＵＭ（Ｙ＾２））から、ＳＵＭ（Ｐ＿ＳＵＭ（Ｙ））の２乗を減じた値を、ＳＵＭ（ＮＲＯＷＳ）で除した値と等価である。したがって、集約装置１０は、ＶＡＲＩＡＮＣＥ（Ｙ）として、上記の除算結果を出力しても良い。
【００５４】
この手法を適用する事で、集約装置１０は、行数、平均値、総和、最大値、最小値、分散、標準偏差、共分散、相関係数等の演算を、部分データセットの集約事前処理と、その結果作成された部分集約済みデータセットの集約との組み合わせで実行できる。
【００５５】
すなわち、集約装置１０は、全体データセットに対する第１の集約演算を、各部分データセットに対する第２の集約演算と部分集約済みデータセットに対する第３の集約演算の組み合わせに変換して実行できる。なお、総和、最大値、および、最小値の演算については、第１乃至第３の集約演算は同じであるが、他の値の計算については、第１乃至第３の集約演算はそれぞれ異なった演算となる。
【００５６】
利用者が、問合せを集約装置１０に送信した時、クエリ最適化部１２は、クエリ構文解析部１１が内部形式に変換した後の問い合わせを検査する。
【００５７】
問い合わせが、行数、平均値など、部分集約結果を後で統合して全体の結果を得る事が出来る集約演算を含む場合には、クエリ最適化部１２は、図４に示したフローを実行するクエリ実行計画を生成する。そして、クエリ最適化部１２は、作成したクエリ実行計画を、クエリ実行部１３に送る。
【００５８】
そうでない場合は、クエリ最適化部１２は、図３に示したフローを実行するクエリ実行計画を生成する。
【００５９】
図４に示したフローを実行するクエリ実行計画をクエリ実行部１３に送るとき、クエリ最適化部１２は、クエリの内容を、全体データセットを対象にしたものから、部分集約済みデータセットを対象にしたものに書き換える。
【００６０】
例えば、利用者が入力した問い合わせが、全体データセットに対してグループ化キーをＸ列として、件数ＣＯＵＮＴ（*）、および、列Ｙの平均値ＡＶＧ（Ｙ）を出力するものであったとする。
【００６１】
部分集約済みデータセットのレコードは、グループ対応に、Ｘ、Ｐ＿ＳＵＭ（Ｙ）、および、ＮＲＯＷＳの各データ項目を含む表を含むものとする。この場合、クエリ中のＣＯＵＮＴ（*）は、ＳＵＭ（ＮＲＯＷＳ）に書き換えられる。さらに、クエリ中のＡＶＧ（Ｙ）は、ＳＵＭ（Ｐ＿ＳＵＭ（Ｙ））／ＳＵＭ（ＮＲＯＷＳ）を計算する集約関数に書き換えられる。この集約関数は、例えば、ＡＶＧ＿ＥＸ（ＮＲＯＷＳ，Ｐ＿ＳＵＭ（Ｙ））と表記される。
【００６２】
この結果、クエリ実行部１３のデータ集約装置は、ＣＯＵＮＴ（*）を出力すべきフィールドにＳＵＭ（ＮＲＯＷＳ）を出力する。さらに、クエリ実行部１３のデータ集約装置は、ＡＶＧ（Ｙ）を出力すべきフィールドにＡＶＧ＿ＥＸ（ＮＲＯＷＳ，Ｐ＿ＳＵＭ（Ｙ））を出力する。
【００６３】
このように、クエリ最適化部１２は、クエリ実行部１３内に存在するデータソート装置およびデータ集約装置に与えられる問い合わせを書き換える。これにより、集約前処理部１４が生成する部分集約済みデータセットを使って、元々の問い合わせで要求された結果と数学的に等価な結果をデータソート装置およびデータ集約装置に計算させることが出来る。このため、クエリ実行部１３内に存在するデータソート装置およびデータ集約装置自体は既存技術として存在するものを利用可能である。
【００６４】
なお、クエリ最適化部１２は、クエリ実行計画をクエリ実行部１３に実行させるために、必ずしも、クエリを書き換えなくても良い。クエリ最適化部１２は関数呼び出し等、別のインターフェースを使用して、クエリ実行部１３の動作を制御しても良い。
【００６５】
なお、集約装置１０が集約演算をする対象は、リレーショナルデータベースに限られない。データセット内のレコードが集約キーと集約されるデータを包含すれば、集約装置１０は、当該データセットを集約演算する対象にできる。
【００６６】
ここで、クエリ構文解析部１１、クエリ最適化部１２、クエリ実行部１３、集約前処理部１４、および、通信部１５は、論理回路で構成される。クエリ構文解析部１１、クエリ最適化部１２、クエリ実行部１３、集約前処理部１４、または、通信部１５は、コンピュータでもある、集約装置１０の図示されないプロセッサで実行されるプログラムで実現されても良い。
【００６７】
データ記憶部２０は、ディスク装置、半導体装置等の記憶装置である。データ記憶部２０は、集約装置１０と通信網で接続されたファイルサーバ装置等の情報処理装置であっても良い。
【００６８】
集約装置１０は、リレーショナルデータベースなどのデータセットに対する、集約演算を、高速に実行することが出来る。
【００６９】
第１の理由は、集約前処理部１４が、全体データセットを分割した、各部分データセットの集約を行い、その結果をクエリ実行部１３が統合するからである。一般的に、クエリ実行部１３は（内在するデータソート装置、データ集約装置を含め）、並列実行性能に劣る。本実施の形態の集約装置１０は、クエリ実行部１３が統合処理でデータソートおよびデータ集約するレコードの件数を削減する。
【００７０】
第２の理由は、集約前処理部１４が、各部分データセットの集約を、並列演算部３０を用いて行うからである。並列演算部３０は、並列実行性能において優れるため、集約前処理を高速に実行する事ができる。
【００７１】
集約装置１０は、リレーショナルデータベースなどのデータセットに対する、集約演算を、緩和された制約条件の下で、高速に実行することが出来る。
【００７２】
その理由は、集約前処理部１４とクエリ実行部１３が、クエリで要求された演算を、数学的に等価な結果を出力する、異なる演算の組み合わせでも実行できるからである。したがって、集約装置１０は、総和、最大値、および、最小値の集約演算だけでなく、平均、分散などの集約演算も可能である。
【００７３】
また、集約装置１０は、扱うデータに特別な特性も要求せず、複雑なユーザ定義情報も必要としない。
【００７４】
＜本実施形態の変形例＞
並列演算部３０は、部分データセットの集約を、複数の部分データセットについて、並列して実行しても良い。この場合、１つの部分データセットの集約処理は、必ずしも、並列処理されなくても良い。
【００７５】
図６は、この場合の並列処理の様子を示す概念図である。図６において、並列演算部３０は、ｍ個（ｍは複数）のプロセッサを備えている。各々のプロセッサは、別々の部分データセットの集約を行い、別々の部分集約済みデータセットを出力する。この場合の並列演算部３０は、上述の並列演算部３０より演算コア数が少なくても良い。
【００７６】
＜第２の実施形態＞
図７は、第２の実施の形態の集約装置１０の構成を示す。
【００７７】
集約装置１０は、Ｎ（複数）個の原レコードからなる全体データセットを格納するデータ記憶部２０に接続されている。当該集約装置１０は、クエリ最適化部１２、クエリ実行部１３、および、集約前処理部１４と、を備える。
【００７８】
集約前処理部１４は、当該全体データセットをｎ（Ｎ未満の複数）個の部分集合に分割し、各部分集合に対して指定された集約演算を行って中間結果を含むｎ個の中間レコードからなる部分集約済みデータセットを出力する。クエリ実行部１３は、指定されたデータセットに対して指定された集約演算を行って、集約結果を装置外に出力する。
【００７９】
クエリ最適化部１２は、全体データセットに対する第１の集約演算命令を受信して、前処理部に第２の集約演算を実行させ、クエリ実行手段に部分集約済みデータセット対して第３の集約演算を実行させる。
【００８０】
集約装置１０は、リレーショナルデータベースなどのデータセットに対する、集約演算を、高速に実行することが出来る。
【００８１】
その理由は、集約前処理部１４が、全体データセットを分割した、各部分データセットの集約を行い、その結果をクエリ実行部１３が統合するからである。一般的に、クエリ実行部１３は、並列実行性能に劣る。本実施の形態の集約装置１０は、クエリ実行部１３が統合処理でデータソートおよびデータ集約するレコードの件数を削減する。
【００８２】
集約装置１０は、リレーショナルデータベースなどのデータセットに対する、集約演算を、緩和された制約条件の下で、高速に実行することが出来る。
【００８３】
その理由は、集約前処理部１４とクエリ実行部１３が、クエリで要求された演算を、数学的に等価な結果を出力する、異なる演算の組み合わせでも実行できるからである。したがって、集約装置１０は、総和、最大値、および、最小値の集約演算だけでなく、平均、分散などの集約演算も可能である。
【００８４】
また、集約装置１０は、扱うデータに特別な特性も要求せず、複雑なユーザ定義情報も必要としない。
【産業上の利用可能性】
【００８５】
本発明にかかる集約システム５０は、ＤＷＨ（Data ware House）などデータベースに蓄積された大量のデータを参照し、集計結果を高速に抽出する事が要求される場合に有効である。
【００８６】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００８７】
１０    集約装置
１１    クエリ構文解析部
１２    クエリ最適化部
１３    クエリ実行部
１４    集約前処理部
１５    通信部
２０    データ記憶部
３０    並列演算部
５０    集約システム
【図１】
2016130929.tif 000004
【図２】
2016130929.tif 000005
【図３】
2016130929.tif 000006
【図４】
2016130929.tif 000007
【図５】
2016130929.tif 000008
【図６】
2016130929.tif 000009
【図７】
2016130929.tif 000010