(57)【特許請求の範囲】
【請求項１】
コンピュータが管理するデータ以外のデータに関する外部テーブルを少なくとも一つ含む集計対象テーブルのデータを集計するプログラムであって、
日時項目を含む複数の項目を有する前記外部テーブルの集計単位とする前記日時項目以外の特定の項目と、前記特定の項目毎に所定の粒度の日時項目単位で集計値が記憶される集計値リストとを、前記特定の項目をインデックスとして用いて該特定の項目の集計値リストを特定可能に１対１で対応付ける処理を行い、
前記外部テーブルに記憶されたデータを集計する際に、前記特定の項目をインデックスとして用いて特定される前記集計値リストの前記集計値を更新する、
処理を前記コンピュータに実行させる集計プログラム。
【請求項２】
前記集計対象テーブルは前記日時項目を含む複数の項目を有し、前記コンピュータが管理するデータに関する内部テーブルを含み、
前記内部テーブルに記憶されたデータに対し、前記特定の項目毎に所定の粒度の日時項目単位で集計値を算出した後に、前記特定の項目と前記集計値リストとを、前記特定の項目をインデックスとして用いて該特定の項目の集計値リストを特定可能に１対１で対応付ける処理を行う、
請求項１記載の集計プログラム。
【請求項３】
前記特定の項目を入力とした場合に、前記特定の項目毎に異なる値を出力するハッシュ関数から出力されたハッシュ値を前記インデックスとして用いて該特定の項目の集計値リストを特定可能に、前記特定の項目と前記集計値リストとを１対１で対応付ける処理を行う、
請求項１又は請求項２記載の集計プログラム。
【請求項４】
前記集計値リストは、前記日時項目の順番で前記集計値が記憶され、
前記特定の項目をインデックスとして用いて特定される前記集計値リストの前記集計値を更新する際に、前記集計値リストにおける前記所定の粒度毎の前記日時項目を特定する関数を用いて、更新対象とする前記集計値を特定する、
請求項１から請求項３の何れか１項記載の集計プログラム。
【請求項５】
自装置が管理するデータ以外のデータに関する外部テーブルを少なくとも一つ含む集計対象テーブルのデータを集計する集計装置であって、
日時項目を含む複数の項目を有する前記外部テーブルの集計単位とする前記日時項目以外の特定の項目と、前記特定の項目毎に所定の粒度の日時項目単位で集計値が記憶される集計値リストとを、前記特定の項目をインデックスとして用いて該特定の項目の集計値リストを特定可能に１対１で対応付ける処理を行う処理部と、
前記外部テーブルに記憶されたデータを集計する際に、前記特定の項目をインデックスとして用いて特定される前記集計値リストの前記集計値を更新する集計部と、
を含む集計装置。
【請求項６】
コンピュータが管理するデータ以外のデータに関する外部テーブルを少なくとも一つ含む集計対象テーブルのデータを集計する集計方法であって、
日時項目を含む複数の項目を有する前記外部テーブルの集計単位とする前記日時項目以外の特定の項目と、前記特定の項目毎に所定の粒度の日時項目単位で集計値が記憶される集計値リストとを、前記特定の項目をインデックスとして用いて該特定の項目の集計値リストを特定可能に１対１で対応付ける処理を行い、
前記外部テーブルに記憶されたデータを集計する際に、前記特定の項目をインデックスとして用いて特定される前記集計値リストの前記集計値を更新する、
処理を前記コンピュータに実行させる集計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集計プログラム、集計装置、及び集計方法に関する。
【背景技術】
【０００２】
従来、複数の項目を含むデータを取り込んで、項目毎に集計する技術が知られている。【０００３】
また、データウェアハウス等の外部に蓄積されたデータをロードする際に、データに対して集計処理等の処理を行いつつデータをロードする技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１９５６８０号公報
【特許文献２】特表２０１２−５２６３１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、近年、データの分析等のために、複数のデータベース各々が含むテーブルに記憶されたデータを集計することが行われている。この集計において、例えば、複数のデータベースのうちの１つのデータベースを集計処理の実行対象のデータベースとして、各データベースのテーブルに記憶されたデータを集計する集計処理を行うことが考えられる。なお、以下では、コンピュータが管理するデータに関するテーブル、具体的には、実行対象とするデータベース自身がデータを記憶しているテーブルを「内部テーブル」という。【０００６】
そして、この場合、複数のデータベースのうちの集計処理が実行されるデータベース以外のデータベースのテーブルは、例えば、集計処理が実行されるデータベースのテーブルとして仮想化し、仮想化したテーブルに対して集計処理が行われる。なお、以下では、コンピュータが管理するデータ以外のデータに関するテーブルを「外部テーブル」という。外部テーブルは、具体的には、例えば、集計処理が実行されるデータベース以外のデータベースのテーブルを、集計処理が実行されるデータベースのテーブルとして仮想化したテーブルである。【０００７】
内部テーブルに対しては、例えば日付等の集計単位とする列に、集計処理が実行されるデータベースを管理するシステムの機能により、Ｂ木索引等の索引（インデックス）を付与することで、データの集計処理を高速化することができる。【０００８】
これに対し、外部テーブルに対しては、集計処理が実行されるデータベースを管理するシステムの機能により索引を付与することができないため、データの集計処理が比較的低速になってしまう。一方、集計処理が実行されるデータベース以外のデータベースのテーブルを集計処理が実行されるデータベースにロードして内部テーブルとすることで、該テーブルに対してインデックスを付与することができる。しかしながら、このロード処理には比較的時間がかかってしまい、ロード処理に集計処理を加えた全体の処理としては比較的低速になってしまう。【０００９】
本発明は、一つの側面として、外部テーブルに記憶されたデータを高速に集計することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、一つの側面として、コンピュータが管理するデータ以外のデータに関する外部テーブルを少なくとも一つ含む集計対象テーブルのデータを集計する。この集計において、日時項目を含む複数の項目を有する前記外部テーブルの集計単位とする前記日時項目以外の特定の項目と、前記特定の項目毎に所定の粒度の日時項目単位で集計値が記憶される集計値リストとを、１対１で対応付ける処理を行う。この処理において、前記特定の項目をインデックスとして用いて該特定の項目の集計値リストを特定可能に１対１で対応付ける。そして、前記外部テーブルに記憶されたデータを集計する際に、前記特定の項目をインデックスとして用いて特定される前記集計値リストの前記集計値を更新する。
【発明の効果】
【００１１】
一つの側面として、外部テーブルに記憶されたデータを高速に集計することができる、という効果を有する。
【図面の簡単な説明】
【００１２】
【図１】外部テーブルに記憶されたデータの集計処理を説明するための図である。
【図２】実施形態に係る集計システムの概略構成を示すブロック図である。
【図３】実施形態に係る集計装置の機能ブロック図である。
【図４】内部テーブルの一例を示す図である。
【図５】外部テーブルの一例を示す図である。
【図６】集計定義の一例を示す図である。
【図７】内部集計テーブルの一例を示す図である。
【図８】集計値リストの一例を示す図である。
【図９】メタデータの一例を示す図である。
【図１０】ハッシュテーブルの一例を示す図である。
【図１１】集計対象のレコードの特定処理を説明するための図である。
【図１２】実施形態に係る集計装置として機能するコンピュータの概略構成を示すブロック図である。
【図１３】実施形態に係る集計処理の一例を示すフローチャートである。
【図１４】集計値リストの拡張処理の一例を説明するための図である。
【図１５】集計値リストの拡張処理の一例を説明するための図である。
【図１６】変形例に係るハッシュテーブルの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の実施形態の一例を詳細に説明する。
【００１４】
まず、実施形態の詳細を説明する前に、図１を参照して、外部テーブルに記憶されたデータの集計処理の問題点について説明する。なお、ここでは、錯綜を回避するために、内部テーブル及び外部テーブルに記憶されるデータの項目（列）が同じで、内部テーブルに記憶されたデータに対して集計処理を行った後に、外部テーブルに記憶されたデータに対して集計処理を行う場合について説明する。また、以下では、複数のデータベース（ＤＢ）のうち、集計処理が実行されるデータベースを「内部ＤＢ」といい、内部ＤＢ以外のデータベースを「外部ＤＢ」という。
【００１５】
図１に示すように、内部ＤＢ１０は、内部テーブル１１、及び外部ＤＢ１３Ａのテーブル１４Ａを内部ＤＢ１０のテーブルとして仮想化した外部テーブル１２Ａを含む。また、内部ＤＢ１０は、外部ＤＢ１３Ｂのテーブル１４Ｂを内部ＤＢ１０のテーブルとして仮想化した外部テーブル１２Ｂを含む。なお、内部テーブル１１及びテーブル１４Ａ、１４Ｂには、日時、店舗、商品、及び売上が記憶される。日時には日付が西暦の年月日の形式で記憶され、店舗には店舗名が記憶され、商品には商品名が記憶され、売上には売上金額が記憶される。
【００１６】
まず、例えば、内部テーブル１１に記憶された各レコードの売上が、店舗及び商品の組み合わせ毎に、１ヶ月単位で積算されて集計され（図１中の１）、集計テーブル１６が得られる。集計テーブル１６の丸め日時は、内部テーブル１１の日時を集計単位（ここでは１ヶ月単位）で丸めた（すなわち、年月日の日を切り捨てた）情報である。すなわち、例えば、店舗名が「東京」の店舗における「りんご」の「２０１５年４月」の売上の集計値（合計）が「１００」であることを表している。
【００１７】
次に、外部テーブル１２Ａからレコード１７が読み出され（図１中の２）、集計テーブル１６の対応するレコードの集計値にレコード１７の売上が加算される（図１中の３）ことで、外部テーブル１２Ａに記憶されたデータの集計処理が行われる。この集計処理において、集計テーブル１６におけるレコード１７に対応するレコードを探索する必要がある。この探索処理では、集計テーブル１６におけるレコード１７に対応するレコードを探索する際に、集計テーブル１６の全レコードからレコード１７の店舗及び商品の組み合わせが一致するレコードを探索することとなる（図１中の３−１）。
【００１８】
さらに、この探索処理では、店舗及び商品の組み合わせの探索に加え、レコード１７の日時を集計単位で丸めて得られた日時に一致する丸め日時が記憶された集計テーブル１６のレコードを探索することとなる（図１中の３−２）。これらの店舗及び商品の組み合わせの探索並びに丸め日時の探索の各々の計算量はＯ（１）を超えたものとなり、比較的時間がかかってしまう。
【００１９】
そこで、本実施形態では、外部テーブルに記憶されたデータを集計する際に、集計単位とする特定の項目をインデックスとして用いて集計することで、集計処理の高速化を図る。
【００２０】
次に、図２を参照して、本実施形態に係る集計システム２０の構成を説明する。図２に示すように、集計システム２０は、集計装置２１、及び外部装置２２Ａ、２２Ｂを含む。集計装置２１、及び外部装置２２Ａ、２２Ｂ各々の一例としては、サーバコンピュータが挙げられる。
【００２１】
外部装置２２Ａの所定の記憶領域には外部ＤＢ２４Ａが記憶される。外部ＤＢ２４Ａは、集計装置２１により集計されるデータが記憶されるテーブル２６Ａを含む。外部装置２２Ｂの所定の記憶領域には外部ＤＢ２４Ｂが記憶される。外部ＤＢ２４Ｂは、集計装置２１により集計されるデータが記憶されるテーブル２６Ｂを含む。そして、集計装置２１、及び外部装置２２Ａ、２２Ｂの各々は、ネットワーク２８に接続され、互いにデータの送受信が可能とされている。
【００２２】
次に、図３を参照して、本実施形態に係る集計装置２１の機能的な構成を説明する。集計装置２１は、処理部３０及び集計部３２を含む。また、集計装置２１の所定の記憶領域には、内部ＤＢ４０、集計定義４６、内部集計テーブル４８、集計値リスト５０、メタデータ５２、及びハッシュテーブル５４が記憶される。内部ＤＢ４０は、内部テーブル４２、及び外部テーブル４４Ａ、４４Ｂを含む。
【００２３】
図４に、内部テーブル４２の一例を示す。図４に示すように、内部テーブル４２には、売上日時、売上店舗、売上商品、及び売上額が記憶される。売上日時には、商品を販売した日時を示す項目として、年月日を示す８桁の数字列が記憶される。また、売上店舗には、商品を販売した店舗を示す情報が記憶され、売上商品には、販売した商品を示す情報が記憶される。また、売上額には、売上日時に記憶された数字列が示す年月日に、売上店舗に記憶された情報が示す店舗において、売上商品に記憶された情報が示す商品について計上された売上金額の合計値が記憶される。
【００２４】
また、内部テーブル４２のデータの実体は、内部ＤＢ４０の表領域に記憶される。そして、内部テーブル４２の売上日時、売上店舗、及び売上商品の各項目に対して、Relational DataBase Management System（ＲＤＢＭＳ）等の内部ＤＢを管理するシステムの機能で、索引が作成されている。なお、錯綜を回避するために、以下では、内部ＤＢ４０を管理するシステムの機能で作成された索引を「ＤＢ索引」という。
【００２５】
図５に、外部テーブル４４Ａの一例を示す。図５に示すように、外部テーブル４４Ａには、日時、店舗、商品、及び売上が記憶される。日時には、内部テーブル４２の売上日時と同様の情報が記憶され、店舗には、内部テーブル４２の売上店舗と同様の情報が記憶される。また、商品には、内部テーブル４２の売上商品と同様の情報が記憶され、売上には、内部テーブル４２の売上額と同様の情報が記憶される。
【００２６】
また、外部テーブル４４Ａは、外部ＤＢ２４Ａのテーブル２６Ａを内部ＤＢ４０のテーブルとして仮想化したテーブルである。すなわち、外部テーブル４４Ａのデータの実体は、内部ＤＢ４０が記憶されている記憶領域以外の集計装置２１の所定の記憶領域、又は外部装置２２Ａの所定の記憶領域等に、汎用的なデータ形式で記憶される。従って、外部テーブル４４Ａの各項目にはＤＢ索引は作成されていない。
【００２７】
外部テーブル４４Ｂは、外部ＤＢ２４Ｂのテーブル２６Ｂを内部ＤＢ４０のテーブルとして仮想化したテーブルであること以外は、外部テーブル４４Ａと同様のテーブルであり、外部テーブル４４Ａと同様の情報が記憶される。なお、以下では、外部テーブル４４Ａ、４４Ｂを区別せずに総称する場合には、符号の末尾のアルファベットを省略する。
【００２８】
集計定義４６には、データの集計に用いるパラメータ名、及びパラメータ名に対応する値が記憶される。図６に、集計定義４６の一例を示す。図６に示すように、集計定義４６には、集計対象とするテーブル毎のパラメータとして、集計対象テーブル、ディメンションカラム１〜Ｎ、メジャー、及び日時カラムが記憶される。また、集計定義４６には、集計対象とするテーブルに共通のパラメータとして、日時集計単位及び集計方法が記憶される。
【００２９】
集計対象テーブルには、集計対象とするテーブルのテーブル名が記憶される。図６の例では、内部テーブル４２のテーブル名が「売上＿ｉｎｎｅｒ」であり、外部テーブル４４Ａのテーブル名が「売上Ａ＿ｏｕｔｅｒ」であることを示している。このように、本実施形態では、テーブル名の末尾の文字列で、テーブルが内部テーブル及び外部テーブルの何れのテーブルであるかを判別可能となっている。すなわち、本実施形態では、テーブル名の末尾が「＿ｉｎｎｅｒ」であるテーブルは内部テーブルであると判別可能であり、テーブル名の末尾が「＿ｏｕｔｅｒ」であるテーブルは外部テーブルであると判別可能である。
【００３０】
ディメンションカラム１〜Ｎには、後述する日時カラム以外の集計単位（すなわち、集計グループ）とする項目の列名が記憶される。なお、ディメンションカラムの数（すなわち、Ｎの値）は、集計単位とする日時カラム以外の項目の数（本実施形態では、２）以上の所定数であれば特に限定されない。
【００３１】
メジャーには、集計値の算出対象とする項目の列名が記憶される。日時カラムには、日時を示す項目の列名が記憶される。日時集計単位には、日時の集計単位とする情報として、日時を丸める際の粒度が記憶され、集計方法には、メジャーに記憶された項目の集計値の算出方法が記憶される。なお、メジャーは、集計値の算出対象とする項目の列名に限定されず、例えば、売上単価×売上個数等の数式でもよい。また、日時集計単位は、１ヶ月単位に限定されず、１ヶ月単位以外の複数月単位、及び年単位等の他の単位でもよい。また、集計方法は、合計（ＳＵＭ）に限定されず、平均等の他の方法でもよい。
【００３２】
すなわち、図６の例では、内部テーブル４２については、「売上店舗」及び「売上商品」の組み合わせの各々について、１ヶ月単位の「売上額」の合計値が集計値として算出される。また、外部テーブル４４については、「店舗」及び「商品」の組み合わせの各々について、１ヶ月単位の「売上」の合計値が集計値として算出される。
【００３３】
処理部３０は、内部テーブル４２を、売上日時以外の特定の項目毎に所定の粒度の日時項目単位で集計値を算出する。本実施形態では、処理部３０は、集計定義４６に従って、内部テーブル４２について、「売上店舗」及び「売上商品」の組み合わせ毎に、「売上額」を１ヶ月単位で集計し、内部集計テーブル４８を生成する。図７に、内部集計テーブル４８の一例を示す。図７に示すように、内部集計テーブル４８には、丸め日時、ｄｉｍ１、ｄｉｍ２、集計値、及び母数が記憶される。
【００３４】
丸め日時には、内部テーブル４２の「売上日時」を、集計定義４６の「日時集計単位」で丸めた（すなわち、日を切り捨てた）値が記憶される。また、ｄｉｍ１及びｄｉｍ２各々には、内部テーブル４２に対応する集計定義４６の「ディメンションカラム１」及び「ディメンションカラム２」各々の項目の値が記憶される。集計値には、ｄｉｍ１及びｄｉｍ２の組み合わせ毎に、丸め日時単位で、内部テーブル４２の「売上額」を積算して得られる合計値が記憶される。母数には、集計値の算出に用いられたレコードの母数が記憶される。
【００３５】
図７の例では、内部テーブル４２には、例えば、売上日時が２０１５０５０１から２０１５０５３１までの間に、売上店舗が東京で、売上商品がりんごのレコードが１０個あり、このレコードの売上額の合計値が５００であることを示している。なお、処理部３０による内部集計テーブル４８の生成処理については、内部テーブル４２に対してＳＥＬＥＣＴ文等のStructured Query Language（ＳＱＬ）を用いて行えばよいため、ここでの詳細な説明を省略する。
【００３６】
また、処理部３０は、内部集計テーブル４８を生成した後に、上記特定の項目毎に上記所定の粒度の日時項目単位での集計値が記憶される集計値リスト５０を生成する。本実施形態では、処理部３０は、ｄｉｍ１及びｄｉｍ２の組み合わせ毎に、丸め日時の昇順に、集計値及び母数を集計値リスト５０に記憶する。
【００３７】
さらに、処理部３０は、全ての集計値リスト５０で共通のメタデータ５２を生成する。本実施形態では、処理部３０は、メタデータ５２に、集計対象としたデータの丸め日時の最小値（以下、「最小丸め日時」という）及び最大値（以下、「最大丸め日時」という）を各々記憶する。なお、本実施形態では、処理部３０は、各集計値リスト５０を生成する際に、各集計値リスト５０の丸め日時の最小値及び最大値が異なる場合、及び丸め日時が連続しない場合は、集計値及び母数が各々０のレコードを挿入する。これにより、処理部３０は、各集計値リスト５０を生成する際に、最小丸め日時、最大丸め日時、及びレコード数が同一となるように各集計値リスト５０を生成する。
【００３８】
図８に、集計値リスト５０の一例を示し、図９に、メタデータ５２の一例を示す。図８及び図９の例では、例えば、東京店舗における２０１５年５月のりんごの売上額の集計値が１００で、集計値の算出に用いたレコード数が１０であることを示している。また、図８に示すように、本実施形態では、集計値リスト５０は、配列の形式で記憶される。
【００３９】
また、処理部３０は、上記特定の項目と集計値リスト５０とを、特定の項目をインデックスとして用いて該特定の項目の集計値リスト５０を特定可能に１対１で対応付ける処理を行う。本実施形態では、処理部３０は、ｄｉｍ１及びｄｉｍ２を入力とした場合に、ｄｉｍ１及びｄｉｍ２の組み合わせ毎に異なる値を出力するハッシュ関数を用いて、ｄｉｍ１及びｄｉｍ２と、集計値リスト５０とを１対１で対応付ける。具体的には、処理部３０は、ｄｉｍ１及びｄｉｍ２の組み合わせ毎に、ハッシュ関数を用いて得られたハッシュ値を、テーブルの各要素を指し示す記憶領域のアドレスとしたハッシュテーブル５４を生成する。そして、処理部３０は、ハッシュテーブル５４の各要素に、各要素に対応するｄｉｍ１及びｄｉｍ２の組み合わせの集計値リスト５０の記憶領域の先頭アドレスを記憶する。
【００４０】
図１０に、ハッシュテーブル５４の一例を示す。図１０に示すように、ハッシュテーブル５４には、各集計値リスト５０の先頭アドレスが配列の形式で記憶される。また、ハッシュテーブル５４の各要素には、各要素に対応するハッシュ値を索引（インデックス）としてアクセスすることができる。従って、本実施形態では、ｄｉｍ１及びｄｉｍ２の組み合わせをハッシュ関数に入力して得られたハッシュ値から、この組み合わせに対応する集計値リストをＯ（１）の計算量で特定することができる。なお、以下では、ハッシュテーブル５４のインデックスを、「ハッシュインデックス」という。
【００４１】
本実施形態に係る集計部３２は、外部テーブル４４に記憶されたデータを集計する際に、上記特定の項目をインデックスとして用いて集計値リスト５０の集計値を更新する。また、集計部３２は、集計値を更新する際に、集計値リストにおける上記所定の粒度毎の日時項目を特定する関数を用いて、更新対象とする集計値を特定する。
【００４２】
一例として図１１に示すように、本実施形態では、集計部３２は、集計定義４６の集計対象テーブルの値に従い、外部テーブル４４から１件ずつレコードを順次読み出す。また、集計部３２は、集計定義４６のディメンションカラム１〜Ｎの値に従い、読み出したレコードの店舗及び商品を前述したハッシュ関数に入力してハッシュ値を得る（図１１中の１）。そして、集計部３２は、得られたハッシュ値をハッシュインデックスとして用いて、読み出したレコードの店舗及び商品の組み合わせに対応するハッシュテーブル５４の要素を読み出す。これにより、集計部３２は、該組み合わせに対応する集計値リスト５０の先頭アドレスを特定する（図１１中の２）。
【００４３】
一方、集計部３２は、読み出したレコードの日時を、集計定義４６の日時集計単位に従って、丸めることで丸め日時を算出する（図１１中の３）。また、集計部３２は、メタデータ５２から最小丸め日時を読み出す。また、集計部３２は、集計値リスト５０の集計値の算出対象とする丸め日時を特定する日時特定関数に、算出した丸め日時及び読み出した最小丸め日時を入力する。そして、集計部３２は、日時特定関数の出力値を、集計値リスト５０の要素にアクセスするためのインデックスとして得る（図１１中の４）。
【００４４】
本実施形態では、日時特定関数として、入力された丸め日時から入力された最小丸め日時を減算した値を出力する関数を適用している。本実施形態では、集計値リスト５０が配列の形式で記憶され、集計値及び母数が集計値リスト５０に丸め日時の昇順に記憶されているため、上記の日時特定関数を用いることで、集計値リスト５０における集計値の算出対象とする要素にアクセスすることができる。
【００４５】
そして、集計部３２は、ハッシュインデックスを用いて特定した集計値リスト５０における、日時特定関数を用いて特定した要素に記憶された集計値に、読み出したレコードの売上を加算し、母数に１を加算する（図１１中の５）。
【００４６】
なお、例えば、集計値及び母数を集計値リスト５０に丸め日時の降順に記憶した場合は、日時特定関数として、入力された最大丸め日時から入力された丸め日時を減算した値を出力する関数を適用することができる。
【００４７】
集計装置２１は、例えば図１２に示すコンピュータ８０で実現することができる。コンピュータ８０は、Central Processing Unit（ＣＰＵ）８１、一時記憶領域としてのメモリ８２、及び不揮発性の記憶部８３を備える。また、コンピュータ８０は、表示装置及び入力装置等の入出力装置８４を備える。また、コンピュータ８０は、記録媒体８８に対するデータの読み込みと書き込みとを制御するＲｅａｄ／Ｗｒｉｔｅ（Ｒ／Ｗ）部８５、及びネットワークに接続されるネットワークＩ／Ｆ８６を備える。ＣＰＵ８１、メモリ８２、記憶部８３、入出力装置８４、Ｒ／Ｗ部８５、及びネットワークＩ／Ｆ８６は、バス８７を介して互いに接続される。
【００４８】
記憶部８３は、Hard Disk Drive（ＨＤＤ）、Solid State Drive（ＳＳＤ）、フラッシュメモリ等によって実現することができる。記憶媒体としての記憶部８３には、コンピュータ８０を集計装置２１として機能させるための集計処理プログラム９０が記憶される。集計処理プログラム９０は、処理プロセス９１及び集計プロセス９２を有する。また、記憶部８３は、内部ＤＢ４０及び集計定義４６が記憶される情報記憶領域９３を有する。また、メモリ８２は、内部集計テーブル４８、集計値リスト５０、メタデータ５２、及びハッシュテーブル５４が記憶される情報記憶領域９４を有する。なお、内部集計テーブル４８、集計値リスト５０、メタデータ５２、及びハッシュテーブル５４は、内部ＤＢ４０に記憶されてもよいし、記憶部８３の内部ＤＢ４０とは異なる記憶領域に記憶されてもよい。
【００４９】
ＣＰＵ８１は、集計処理プログラム９０を記憶部８３から読み出してメモリ８２に展開し、集計処理プログラム９０が有するプロセスを実行する。ＣＰＵ８１は、処理プロセス９１を実行することで、図３に示す処理部３０として動作する。ＣＰＵ８１は、集計プロセス９２を実行することで、図３に示す集計部３２として動作する。これにより、集計処理プログラム９０を実行したコンピュータ８０が、集計装置２１として機能することになる。
【００５０】
また、集計処理プログラム９０により実現される機能は、例えば半導体集積回路、より詳しくはApplication Specific Integrated Circuit（ＡＳＩＣ）等で実現することも可能である。
【００５１】
次に、本実施形態に係る集計装置２１の作用を説明する。集計装置２１が集計処理プログラム９０を実行することで、図１３に示す集計処理を実行する。図１３に示す集計処理は、例えばユーザによって実行開始の指示が入力された場合、又は１日１回等の定期的なタイミング等に、ＣＰＵ８１により実行が開始される。
【００５２】
図１３に示す集計処理のステップ１００で、処理部３０は、記憶部８３に記憶された集計定義４６の集計対象テーブルに、末尾が「＿ｉｎｎｅｒ」であるテーブルが存在するか否かを判定する。これにより、処理部３０は、集計対象とするテーブルに内部テーブル４２が存在するか否かを判定する。この判定が肯定判定となった場合は、処理はステップ１０２に移行し、否定判定となった場合は、処理はステップ１１０に移行する。
【００５３】
ステップ１０２で、処理部３０は、前述したように、集計定義４６に従って内部テーブル４２に記憶されたデータを集計し、内部集計テーブル４８を生成する。次のステップ１０４で、処理部３０は、ステップ１０２で生成された内部集計テーブル４８のｄｉｍ１及びｄｉｍ２の組み合わせ毎に集計値リスト５０を生成する。そして、処理部３０は、各集計値リスト５０に、内部集計テーブル４８の対応する集計値及び母数を、内部集計テーブル４８の丸め日時の昇順に記憶する。
【００５４】
次のステップ１０６で、処理部３０は、ステップ１０２で生成された内部集計テーブル４８の丸め日時の最小値及び最大値を記憶したメタデータ５２を生成する。次のステップ１０８で、処理部３０は、前述したように、ｄｉｍ１及びｄｉｍ２の組み合わせ毎に、ハッシュ関数を用いて得られたハッシュ値を、テーブルの各要素を指し示す記憶領域のアドレスとしたハッシュテーブル５４を生成する。そして、処理部３０は、ハッシュテーブル５４の各要素に、各要素に対応するｄｉｍ１及びｄｉｍ２の組み合わせの集計値リスト５０の記憶領域の先頭アドレスを記憶する。
【００５５】
以下に示すステップ１１０からステップ１３８までの処理は、集計定義４６に含まれる各外部テーブル４４を処理対象として実行される。なお、集計装置２１がステップ１１０からステップ１３８までの処理を繰り返し実行する際は、それまでに処理対象としていない外部テーブル４４を処理対象とする。また、以下に示すステップ１１０からステップ１３６までの処理は、処理対象とする外部テーブル４４に記憶された各レコードを１件ずつ順番に先頭から読み出して繰り返し実行される。
【００５６】
ステップ１１０で、集計部３２は、外部テーブル４４からレコードを１件読み出す。次のステップ１１２で、集計部３２は、集計定義４６に従って、ステップ１１０で読み出されたレコードの店舗及び商品をハッシュ関数に入力して、ハッシュ関数から出力されたハッシュ値を取得する。
【００５７】
次のステップ１１４で、集計部３２は、ステップ１１２で取得されたハッシュ値をハッシュインデックスとして用いて、ステップ１０８で生成されたハッシュテーブル５４の要素にアクセス可能か否かを判定する。この判定が肯定判定となった場合は、処理はステップ１１６に移行し、否定判定となった場合は、処理はステップ１１８に移行する。
【００５８】
ステップ１１６で、集計部３２は、ステップ１１２で取得されたハッシュ値をハッシュインデックスとして用いて、ステップ１０８で生成されたハッシュテーブル５４の要素を取得する。これにより、集計部３２は、ステップ１１０で読み出されたレコードの店舗及び商品の組み合わせに対応する集計値リスト５０の記憶領域の先頭アドレスを取得する。
【００５９】
一方、ステップ１１８で、処理部３０は、ステップ１１０で読み出されたレコードの売上を集計値とし、母数を１としたレコードを記憶した集計値リスト５０を生成する。なお、本ステップ１１８の初回実行時にメタデータ５２が存在しない場合、処理部３０は、最小丸め日時及び最大丸め日時をステップ１１０で読み出されたレコードの日時を丸めて得られた丸め日時としたメタデータ５２を生成する。次のステップ１２０で、処理部３０は、ステップ１１２で取得されたハッシュ値でアクセス可能なハッシュテーブル５４の要素に、ステップ１１８で生成された集計値リスト５０の記憶領域の先頭アドレスを記憶することで、ハッシュテーブル５４を更新する。
【００６０】
ステップ１２２で、集計部３２は、ステップ１１０で読み出されたレコードの日時を、集計定義４６の日時集計単位で丸めることで丸め日時を算出する。そして、集計部３２は、算出した丸め日時が、メタデータ５２の最小丸め日時より小さいか否かを判定する。この判定が肯定判定となった場合は、処理はステップ１２４に移行し、否定判定となった場合は、処理はステップ１２８に移行する。
【００６１】
ステップ１２４で、集計部３２は、各集計値リスト５０を拡張する。具体的には、集計部３２は、集計値リスト５０の先頭から、最小丸め日時と丸め日時との差の数だけ、集計値及び母数を各々０としたレコードを挿入する。図１４に示すように、例えば集計値リスト５０に２０１５年５月〜２０１５年１２月の集計値及び母数が昇順に記憶され、ステップ１２２で算出された丸め日時が「２０１５０４」の場合、集計部３２は以下の処理で集計値リスト５０を拡張する。すなわち、この場合、処理部３０は、集計値リスト５０の先頭に、集計値及び母数を各々０としたレコードを１つ挿入する。
【００６２】
次のステップ１２６で、集計部３２は、メタデータ５２の最小丸め日時を、ステップ１２２で算出された丸め日時に更新する。
【００６３】
一方、ステップ１２８で、集計部３２は、ステップ１２２で算出された丸め日時が、メタデータ５２の最大丸め日時より大きいか否かを判定する。この判定が肯定判定となった場合は、処理はステップ１３０に移行し、否定判定となった場合は、処理はステップ１３４に移行する。
【００６４】
ステップ１３０で、集計部３２は、各集計値リスト５０を拡張する。具体的には、集計部３２は、集計値リスト５０の末尾に、丸め日時と最大丸め日時との差の数だけ、集計値及び母数を各々０としたレコードを挿入する。図１５に示すように、例えば集計値リスト５０に２０１５年５月〜２０１５年１２月の集計値及び母数が昇順に記憶され、ステップ１２２で算出された丸め日時が「２０１６０２」の場合、集計部３２は以下の処理で集計値リスト５０を拡張する。すなわち、この場合、処理部３０は、集計値リスト５０の末尾に、集計値及び母数を各々０としたレコードを２つ挿入する。
【００６５】
次のステップ１３２で、集計部３２は、メタデータ５２の最大丸め日時を、ステップ１２２で算出された丸め日時に更新する。
【００６６】
ステップ１３４で、集計部３２は、ステップ１２２で算出された丸め日時、及びメタデータ５２の最小丸め日時を、前述した日時特定関数に入力して、日時特定関数の出力値を取得する。次のステップ１３６で、集計部３２は、ステップ１１２で取得されたハッシュ値をハッシュインデックスとして用いて、集計値の更新対象とする集計値リスト５０を特定する。また、集計部３２は、特定した集計値リスト５０の集計値の更新対象とする要素を、日時特定関数の出力値を用いて特定する。そして、集計部３２は、特定した要素に記憶された集計値に、ステップ１１０で読み出されたレコードの売上を加算し、母数に１を加算する。
【００６７】
ステップ１３８で、集計部３２は、上記ステップ１１０からステップ１３６までの処理を、処理対象とする外部テーブル４４の全レコードについて実行したか否かを判定する。この判定が否定判定となった場合は、処理はステップ１１０に戻り、肯定判定となった場合は、処理はステップ１４０に移行する。
【００６８】
ステップ１４０で、集計部３２は、上記ステップ１１０からステップ１３８までの処理を、集計定義４６に含まれる全ての外部テーブル４４について実行したか否かを判定する。この判定が否定判定となった場合は、処理はステップ１１０に戻り、肯定判定となった場合は、本集計処理は終了する。
【００６９】
上記の集計処理で得られた集計値リスト５０は、例えば時系列分析等のデータ分析に用いられる。
【００７０】
以上説明したように、本実施形態によれば、集計単位とする日時項目（例えば、日時）以外の特定の項目（例えば、店舗及び商品）と、特定の項目毎に所定の粒度（例えば、月単位）の日時項目単位で集計値が記憶される集計値リスト５０とを１対１で対応付ける。そして、外部テーブル４４に記憶されたデータを集計する際に、特定の項目をインデックスとして用いて集計値リスト５０の集計値を更新する。これにより、外部テーブル４４に記憶されたデータを高速に集計することができる。
【００７１】
また、本実施形態によれば、内部テーブル４２に記憶されたデータに対し、特定の項目毎に所定の粒度の日時項目単位で集計値を算出した後に、特定の項目と集計値リスト５０とを１対１で対応付ける。従って、ＤＢインデックスを用いて比較的高速に集計可能な内部テーブル４２を用いて集計値リスト５０を生成した後に、外部テーブル４４に記憶されたデータを集計することとなる。これにより、外部テーブル４４に記憶されたデータを内部テーブル４２に記憶されたデータよりも先に集計する場合に比較して、外部テーブル４４に記憶されたデータを高速に集計することができる。
【００７２】
また、本実施形態によれば、特定の項目を入力とした場合に、特定の項目毎に異なる値を出力するハッシュ関数を用いて、特定の項目と集計値リスト５０とを１対１で対応付ける。これにより、集計値リスト５０を特定する処理の計算量を低減することができる結果、外部テーブル４４に記憶されたデータを高速に集計することができる。
【００７３】
また、本実施形態によれば、集計値リスト５０は、日時項目の順番（例えば、昇順）で集計値が記憶される。そして、本実施形態によれば、特定の項目をインデックスとして用いて集計値リスト５０の集計値を更新する際に、集計値リスト５０における所定の粒度毎の日時項目を特定する日時特定関数を用いて、集計値を更新する。これにより、集計値リスト５０の集計値の更新対象とする要素を特定する処理の計算量を低減することができる結果、外部テーブル４４に記憶されたデータを高速に集計することができる。
【００７４】
なお、上記実施形態では、集計対象とするテーブルとして、内部テーブル４２及び外部テーブル４４を適用した場合について説明したが、これに限定されない。例えば、集計対象とするテーブルとして、外部テーブル４４のみを適用する形態としてもよい。
【００７５】
また、上記実施形態では、ハッシュ関数及びハッシュテーブル５４を用いて、店舗及び商品の組み合わせに対応する集計値リスト５０を特定する場合について説明したが、これに限定されない。例えば、店舗及び商品と対応する集計値リスト５０の記憶領域とを１対１で対応付けるリストファイル等を用いて、店舗及び商品の組み合わせに対応する集計値リスト５０を特定する形態としてもよい。
【００７６】
また、上記実施形態では、集計単位とする項目の組み合わせに対して１つのハッシュテーブル５４を生成する場合について説明したが、これに限定されない。例えば、集計単位とする項目毎に個別にハッシュテーブル５４を生成する形態としてもよい。この形態例におけるハッシュテーブル５４の一例を図１６に示す。
【００７７】
図１６の例では、１からＮ−１（ここではＮ＝２）番目までのハッシュテーブル５４の要素には、次のハッシュテーブル５４の記憶領域の先頭アドレスが記憶される。また、Ｎ番目のハッシュテーブル５４には、集計単位とする項目の組み合わせに対応する集計値リスト５０の記憶領域の先頭アドレスが記憶される。
【００７８】
この場合、例えば、集計部３２は、ｄｉｍ１を入力とするハッシュ関数の出力値を用いて、ｄｉｍ１に対応するハッシュテーブル５４Ａの要素に記憶されたアドレスを取得する。また、集計部３２は、ｄｉｍ２を入力とするハッシュ関数の出力値を用いて、取得したアドレスで特定されるハッシュテーブル５４Ｂの要素に記憶されたアドレスを取得する。そして、集計部３２は、取得したアドレスを用いて、ｄｉｍ１及びｄｉｍ２の組み合わせに対応する集計値リスト５０を特定する。この形態例では、上記実施形態と比較して、集計値リスト５０の特定処理の計算量が増えるものの、集計単位とする項目毎にハッシュテーブル５４の作成及び自動拡張等が制御できるため、メモリリソースを効率的に利用することができる。
【００７９】
また、上記実施の形態では、集計単位とする日時項目以外の特定の項目として、２つの項目（上記実施の形態では店舗及び商品）の組み合わせを適用した場合について説明したが、これに限定されない。集計単位とする日時項目以外の特定の項目として、１つの項目を適用する形態としてもよいし、３つ以上の項目の組み合わせを適用する形態としてもよい。
【００８０】
また、上記実施形態では、集計処理プログラム９０が記憶部８３に予め記憶（インストール）されている態様を説明したが、これに限定されない。集計処理プログラム９０は、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ、メモリカード等の記録媒体に記録された形態で提供することも可能である。
【符号の説明】
【００８１】
２０  集計システム
２１  集計装置
２２Ａ、２２Ｂ  外部装置
２４Ａ、２４Ｂ  外部ＤＢ
２６Ａ  テーブル
２６Ｂ  テーブル
３０  処理部
３２  集計部
４０  内部ＤＢ
４２  内部テーブル
４４Ａ、４４Ｂ  外部テーブル
４６  集計定義
４８  内部集計テーブル
５０  集計値リスト
５２  メタデータ
５４  ハッシュテーブル
８０  コンピュータ
８１  ＣＰＵ
８２  メモリ
８３  記憶部
８８  記録媒体
９０  集計処理プログラム
【図１】
0006702425.tif 000002
【図２】
0006702425.tif 000003
【図３】
0006702425.tif 000004
【図４】
0006702425.tif 000005
【図５】
0006702425.tif 000006
【図６】
0006702425.tif 000007
【図７】
0006702425.tif 000008
【図８】
0006702425.tif 000009
【図９】
0006702425.tif 000010
【図１０】
0006702425.tif 000011
【図１１】
0006702425.tif 000012
【図１２】
0006702425.tif 000013
【図１３】
0006702425.tif 000014
【図１４】
0006702425.tif 000015
【図１５】
0006702425.tif 000016
【図１６】
0006702425.tif 000017