"キー及びデータ値から構成されるデータを複数含むデータセットに対する分析処理を複数の計算機が並列実行する計算機システムであって、前記各計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記のプロセッサに接続される記憶装置と、前記プロセッサに接続されるネットワークインタフェースとを有し、前記各計算機は、所定のキー範囲毎に前記データセットを分割した分割領域の分割位置を示すキーである分割位置キーを管理する分割情報を、前記データセット毎に保持し、前記各データセットの前記分割情報に含まれるすべての前記分割位置キーは同一であり、前記複数の計算機が有する記憶領域上には、前記データセットを格納するファイルシステムが構成され、前記計算機システムは、前記分析処理を実行する場合に、前記分割領域毎に複数のタスクを生成し、前記生成されたタスクを前記各計算機に割り当てて、前記各データセットの分割領域に含まれる前記データを結合して前記分析処理を実行し、前記ファイルシステムに新規データセットが格納された場合に、前記新規データセットが格納された後の各分割領域のデータサイズに基づいて、所定の閾値より大きいデータサイズの前記分割領域である対象領域が存在するか否かを判定し、前記対象領域が存在すると判定された場合、前記対象領域を複数の新たな分割領域に分割することを特徴とする計算機システム。前記ファイルシステムに新規データセットを格納する場合に、前記新規データセットのキー分布を解析し、前記解析結果に基づいて、既存の前記データセットの分割情報に含まれるすべての前記分割位置キーと同一となるように、前記新規データセットの前記分割情報を生成することを特徴とする請求項1に記載の計算機システム。前記対象領域が分割された後に、前記既存のデータセットの分割情報における前記分割位置キーを更新することを特徴とする請求項2に記載の計算機システム。前記対象領域が存在するか否かを判定する場合に、すべての前記データセットの前記分割領域のデータサイズを合計して、前記計算機システムにおける前記分割領域のデータサイズである第1のデータサイズを算出し、前記算出された第1のデータサイズが、前記所定の閾値より大きい前記分割領域が存在するか否か判定し、前記対象領域を分割する場合に、前記すべてのデータセットの前記対象領域のデータサイズを合計することによって、前記計算機システムにおける前記対象領域のデータサイズである第2のデータサイズを算出し、前記所定の閾値、及び前記算出された第2のデータサイズに基づいて、前記対象領域の分割数を算出し、前記算出された分割数に基づいて、前記対象領域における新たな分割位置キーを決定し、前記既存のデータセットの分割情報の前記分割位置キーを更新する場合に、前記既存のデータセットの分割情報から、前記対象領域に対応する情報を削除し、前記決定された分割位置キーと前記新たな分割領域とを対応づけた情報を追加し、前記新データセットの分割情報を生成する場合に、前記更新された既存のデータセットの分割情報における前記分割キーと同一となるように前記新規データセットの分割情報を生成することを特徴とする請求項3に記載の計算機システム。前記対象領域を分割する場合に、前記対象領域のデータサイズを前記算出された分割数で除算して第3のデータサイズを算出し、前記算出された第3のデータサイズに対応する前記データにおける前記キーを、前記分割位置キーとして決定することを特徴とする請求項4に記載の計算機システム。前記所定の閾値は、前記新たな分割領域が割り当てられるタスクの処理時間が予め設定された許容時間以下となるデータサイズであることを特徴とする請求項4に記載の計算機システム。前記データは、複数の項目毎のデータ値を含み、前記第1のデータサイズを算出する場合に、前記分割領域における全ての項目のデータサイズを合計することによって、前記第1のデータサイズを算出することを特徴とする請求項4に記載の計算機システム。前記新規データセットのキー分布を解析する場合に、前記既存のデータセットの分割情報に含まれる前記分割位置キーのいずれかに一致する分割位置キーで前記新規データセットを分割して複数の処理用分割領域を生成し、前記生成された処理用分割領域毎に、前記新規データセットのキー分布を解析するためのタスクを生成して、当該タスクを並列に実行することを特徴とする請求項2に記載の計算機システム。キー及びデータ値から構成されるデータを複数含むデータセットに対する分析処理を複数の計算機が並列実行する計算機システムにおけるデータ管理方法であって、前記各計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続される記憶装置と、前記プロセッサに接続されるネットワークインタフェースとを有し、前記各計算機は、所定のキー範囲毎に当該データセットを分割した分割領域の分割位置を示すキーである分割位置キーを管理する分割情報を、前記データセット毎に保持し、前記各データセットの前記分割情報に含まれる全てのすべての前記分割位置キーは同一であり、前記複数の計算機が有する記憶領域上には、前記データセットを格納するファイルシステムが構成され、前記方法は、少なくとも一つの前記計算機が、前記分析処理を実行する場合に、前記分割領域毎に複数のタスクを生成する第1のステップと、前記タスクを生成した前記計算機が、前記生成されたタスクを前記各計算機に割り当てて、前記各データセットの分割領域に含まれる前記データを結合して前記分析処理を実行させる第2のステップと、を含み、少なくとも一つの前記計算機が、前記ファイルシステムに新規データセットが格納された場合に、前記新規データセットが格納された後の各分割領域のデータサイズに基づいて、所定の閾値より大きいデータサイズの前記分割領域である対象領域が存在するか否かを判定する第3のステップと、前述した判定処理を実行した前記計算機が、前記対象領域が存在すると判定された場合、前記対象領域を複数の新たな分割領域に分割する第4のステップと、を含むことを特徴とするデータ管理方法。前記第3のステップは、前記新規データセットのキー分布を解析する第5のステップと、前記解析結果に基づいて、既存の前記データセットの分割情報に含まれるすべての前記分割位置キーと同一となるように、前記新規データセットの前記分割情報を生成する第6のステップと、を含むことを特徴とする請求項9に記載のデータ管理方法。前記第4のステップは、前記対象領域が分割された後に、前記既存のデータセットの分割情報における前記分割位置キーを更新する第7のステップを含むことを特徴とする請求項10に記載のデータ管理方法。前記第3のステップは、すべての前記データセットの前記分割領域のデータサイズを合計して、前記計算機システムにおける前記分割領域のデータサイズである第1のデータサイズを算出する第8のステップと、前記算出された第1のデータサイズが、前記所定の閾値より大きい前記分割領域が存在するか否か判定する第9のステップと、を含み、前記第4のステップは、前記すべてのデータセットの前記対象領域のデータサイズを合計することによって、前記計算機システムにおける前記対象領域のデータサイズである第2のデータサイズを算出する第10のステップと、前記所定の閾値、及び前記算出された第2のデータサイズに基づいて、前記対象領域の分割数を算出する第11のステップと、前記算出された分割数に基づいて、前記対象領域における新たな分割位置キーを決定する第12のステップと、を含み、前記第7のステップは、前記既存のデータセットの分割情報から、前記対象領域に対応する情報を削除し、前記決定された分割位置キーと前記新たな分割領域とを対応づけた情報を追加する第13のステップを含み、前記第6のステップは、前記更新された既存のデータセットの分割情報における前記分割キーと同一となるように前記新規データセットの分割情報を生成する第14のステップを含むことを特徴とする請求項11に記載のデータ管理方法。前記第12のステップは、前記対象領域のデータサイズを前記算出された分割数で除算して第3のデータサイズを算出するステップと、前記算出された第3のデータサイズに対応する前記データにおける前記キーを、前記分割位置キーとして決定するステップと、を含むことを特徴とする請求項12に記載のデータ管理方法。前記所定の閾値は、前記新たな分割領域が割り当てられるタスクの処理時間が予め設定された許容時間以下となるデータサイズであることを特徴とする請求項12に記載のデータ管理方法。前記データは、複数の項目毎のデータ値を含み、前記第8のステップでは、前記分割領域における全ての項目のデータサイズを合計することによって、前記第1のデータサイズを算出することを特徴とする請求項12に記載のデータ管理方法。前記第5のステップは、前記既存のデータセットの分割情報に含まれる前記分割位置キーのいずれかに一致する分割位置キーで前記新規データセットを分割して複数の処理用分割領域を生成するステップと、前記生成された処理用分割領域毎に、前記新規データセットのキー分布を解析するためのタスクを生成して、当該タスクを前記各計算機上で並列に実行させるステップと、を含むことを特徴とする請求項10に記載のデータ管理方法。データ分析システムでは、周期的に取得されたデータを蓄積し、必要に応じて蓄積されたデータを組み合わせて分析処理を実行する。ここで、図を用いてデータ分析システムによって処理されるデータの一例を示す。図20は、従来のデータ分析システムにおいて処理されるデータの一例を示す説明図である。図21は、従来のデータにおけるスキーマの一例を示す説明図である。図22Aから図22Cは、従来の分析処理において処理されるデータの一例を示す説明図である。図20に示す例では、ユーザの移動履歴を表す。具体的には、ユーザを識別するユーザID、ユーザの位置を特定する座標情報である位置X及び位置Y、並びに、ユーザが当該位置に移動した時間であるタイムスタンプから構成されるデータである。図20に示すようなデータに対する分析処理では、例えば、図21に示すようにスキーマに基づいてデータが変換される。さらに、変換されたデータは、図22Aに示すようにユーザID毎にグループ化され、集計等の分析処理が実行される。しかし、分析処理時に図20に示すようなデータを図22Aに示すようなデータに変換する処理に時間がかかるため、本データ分析システムでは、分析処理を効率化するため、予め図22Aに示すようなデータに変換されたデータが蓄積され、蓄積されたデータを用いて分析処理が実行される。なお、本明細書では、1以上レコードから構成されるデータをデータセットと記載する。また、図20に示すようなデータセットを素データと記載し、図21に示すような構造のデータを構造化データと記載する。蓄積処理では、図20に示す形式のデータが周期的例えば月単位に収集され、図22Aの形式のデータに変換された後、データ分析システムに蓄積される。このため、複数のデータを集計して、1年間のデータに対する分析処理、及び各年度の特定の月に対する分析処理を実行する場合には、図22Aに示す形式のデータを複数結合する必要がある。例えば、データ分析システムは、図22A及び図22Bに示すような2つデータを結合して、図22Cに示すようなデータになる。ここで、同一のユーザIDの行データレコードをマージしていることから、データベースにおける結合ジョインと同等の処理を行う必要がある。さらに、前述した例では結合対象となるデータは2つだけではなく、多数の表を結合する場合がある。また、周期的に蓄積されるデータは、データ毎にサイズ分布が異なる場合がある。例えば、月ごとのサービスの利用回数が異なるユーザのデータでは、各月のデータのサイズ分布の違いが発生する。特許文献1には、表を区分するときに区分する位置分割位置を決定する方法は記載されていない。一般に表を均等に区分するには表に含まれるキーの分布情報が必要になる。キーの分布情報を取得する場合に、表全体をスキャンする方法では処理完了までに時間がかかる。キーの分布情報を取得する他の方法としては、特許文献2に記載されたインデックスを用いる方法がある。インデックスは表には、すべてのキー値が含まれるため、インデックスをスキャンすることによってキーの分布情報を取得することができる。インデックスは表と比べてデータサイズが小さいため、処理時間を短くできる。しかし、多数の表を結合する場合には、表の数だけインデックスをスキャンする必要があり、処理時間が長くなる。また、対象とするデータが大量である場合、表の作成時にインデックスを作成する処理、及び、表の更新時にインデックスを更新する処理に時間がかかるという課題がある。これに対して、インデックスを利用せず、特許文献3に記載の方法を用いることが考えられる。すなわち、あらかじめ複数の分割領域に分割された表を管理しておき、各表の分割領域同士を対応させて、分割領域毎に並列にマージ結合処理を実行する方法を用いることが考えられる。しかし、一般に表の分割位置は表毎に異なるため、分割領域を対応させることができない。たとえ、すべての表の分割位置が一致するようにしていてもデータ更新時に各分割領域にデータサイズの偏りが発生するという別の課題がある。すなわち、周期的に蓄積されるデータ毎にデータサイズ分布が異なるため、予め固定された分割位置では、データの組み合わせによって各分割領域のデータサイズに偏りが発生する。したがって、並列して結合処理を実行する場合に処理量のばらつきが発生し、効率的に並列処理ができないという課題がある。本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、キー及びデータ値から構成されるデータを複数含むデータセットに対する分析処理を複数の計算機が並列実行する計算機システムであって、前記各計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記のプロセッサに接続される記憶装置と、前記プロセッサに接続されるネットワークインタフェースとを有し、前記各計算機は、所定のキー範囲毎に前記データセットを分割した分割領域の分割位置を示すキーである分割位置キーを管理する分割情報を、前記データセット毎に保持し、前記各データセットの前記分割情報に含まれるすべての前記分割位置キーは同一であり、前記複数の計算機が有する記憶領域上には、前記データセットを格納するファイルシステムが構成され、前記計算機システムは、前記分析処理を実行する場合に、前記分割領域毎に複数のタスクを生成し、前記生成されたタスクを前記各計算機に割り当てて、前記各データセットの分割領域に含まれる前記データを結合して前記分析処理を実行し、前記ファイルシステムに新規データセットが格納された場合に、前記新規データセットが格納された後の各分割領域のデータサイズに基づいて、所定の閾値より大きいデータサイズの前記分割領域である対象領域が存在するか否かを判定し、前記対象領域が存在すると判定された場合、前記対象領域を複数の新たな分割領域に分割することを特徴とする。本発明の代表的な一形態によれば、インデックスを作成することなく、データセット間の結合処理を並列実行できる。また、新規データセットが追加された場合に、分割領域ごとのデータ量のばらつきを抑えることができるため結合処理を実行するタスク間の処理量の平準化できる。[第1の実施形態]以下、本発明の第1の実施形態を説明する。図1は、本発明の第1の実施形態におけるデータ分析システムのシステム構成を説明するブロック図である。データ分析システムは、クライアントノード10、マスタノード20及びスレーブノード30から構成され、ネットワーク40を介して各ノードが相互に接続される。なお、ネットワーク40は、SAN、LAN及びWANなどが考えられるが、各ノードが通信できるものであればどのようなものであってもよい。また、各ノードが直接接続されてもよい。ここでノードとは計算機を示す。以降、計算機をノードと記載する。クライアントノード10は、データ分析システムの利用者が利用するノードである。利用者は、クライアントノード10を用いてマスタノード20及びスレーブノード30等に各種指示を送信する。マスタノード20は、データ分析システム全体を管理するノードである。スレーブノード30は、マスタノード20から送信される指示にしたがって、各処理タスクを実行するノードである。なお、本データ分析システムは、並列分散処理システムの一種であり、スレーブノード30の数を増やすことによって、システムの処理性能を向上することができる。なお、クライアントノード10、マスタノード20及びスレーブノード30のハードウェア構成は同一のものであり、詳細については図2を用いて後述する。各ノードには、HDD等の記憶装置11、21、31が接続される。各記憶装置11、21、31には、OS等の各ノードが備える機能を実現するためのプログラムが格納される。各プログラムは、CPU図2参照によって記憶装置11、21、31から読み出され、CPU図2参照によって実行される。図2は、本発明の第1の実施形態におけるノードのハードウェア構成を説明するブロック図である。図2ではクライアントノード10を例に説明するが、マスタノード20及びスレーブノード30も同一のハードウェア構成である。クライアントノード10は、CPU101、ネットワークI/F102、入出力I/F103、メモリ104、及びディスクI/F105を備え、内部バス等を介して各構成が互いに接続される。CPU101は、メモリ104に格納されるプログラムを実行する。メモリ104は、CPU101によって実行されるプログラム及び当該プログラムを実行するために必要な情報を格納する。なお、メモリ104に格納されるプログラムは、記憶装置11に格納されていてもよい。この場合、CPU101によって、記憶装置11からメモリ104上に読み出される。ネットワークI/F102は、ネットワーク40を介して他のノードと接続するためのインタフェースである。ディスクI/F105は、記憶装置11と接続するためのインタフェースである。入出力I/F103は、キーボード106、マウス107及びディスプレイ108などの入出力装置を接続するためのインタフェースである。利用者は、入出力装置を用いてデータ分析システムに指示を送信し、また、分析結果を確認する。なお、マスタノード20及びスレーブノード30は、キーボード106、マウス107及びディスプレイ108を備えていなくてもよい。次に、マスタノード20及びスレーブノード30のソフトウェア構成を説明する。図3Aは、本発明の第1の実施形態におけるマスタノード20のソフトウェア構成を説明するブロック図である。マスタノード20は、データ管理部21、処理管理部22及びファイルサーバマスタ23を備える。データ管理部21、処理管理部22及びファイルサーバマスタ23は、メモリ104上に格納されるプログラムであり、CPU101によって実行される。以下、プログラムを主体として処理を説明する場合には、CPU101によって当該プログラムが実行されているものとする。データ管理部21は、データ分析システムが処理するデータを管理する。データ管理部21は、データ管理テーブルT100、分割テーブルT200及びキーサイズテーブルT400を含む。データ管理テーブルT100は、データ分析システムが処理するデータセットの管理情報を格納する。データ管理テーブルT100の詳細については、図4を用いて後述する。ここで、データセットとは、複数のレコードから構成されるデータを示す。分割テーブルT200は、データセットを分割した分割領域の管理情報を格納する。ここで分割領域とは、所定のキー範囲ごとにデータセットが分割されたレコード群を表す。分割テーブルT200の詳細については、図5を用いて後述する。キーサイズテーブルT400は、データセットにおける各分割領域のデータサイズの管理情報を格納する。一つのデータセットに対して一つのキーサイズテーブルT400が対応する。また、データ分析システム全体のデータセットのデータサイズを管理するキーサイズテーブルT400も含まれる。キーサイズテーブルT400の詳細については、図7を用いて後述する。処理管理部22は、各スレーブノード30上で分散して実行される並列処理を管理する。処理管理部22は、並列実行される処理タスクを生成するプログラムを管理するプログラムリポジトリ24を含む。つまり、処理管理部22は、プログラムリポジトリ24から各スレーブノード30において実行すべきタスクを生成し、生成されたタスクの実行をスレーブノード30に指示する。ファイルサーバマスタ23は、実際のデータを格納するファイルを管理する。なお、マスタノード20が備えるソフトウェア構成は、ハードウェアを用いて実現してもよい。図3Bは、本発明の第1の実施形態におけるスレーブノード30のソフトウェア構成を説明するブロック図である。スレーブノード30は、処理実行部31及びファイルサーバスレーブ32を備える。処理実行部31及びファイルサーバスレーブ32は、メモリ104上に格納されるプログラムであり、CPU101によって実行される。以下、プログラムを主体として処理を説明する場合には、CPU101によって当該プログラムが実行されているものとする。処理実行部31は、マスタノード20の処理管理部22から処理タスクの実行指示を受け付け、所定の処理タスクを実行する。つまり、処理実行部31は、受け付けた処理タスクの実行指示に基づいて、当該処理タスクを実行するためのプロセスを生成する。生成されたプロセスが実行されることによって、各スレーブノード30上で複数のタスクが実行され、並列分散処理が実現される。本実施形態の処理実行部31は、前述したタスクを実行するデータ追加部Map33及びデータ追加部Reduce34を含む。データ追加部Map33は、入力された素データ図20参照からレコード単位のデータを読み出し、key範囲毎にデータ追加部Reduce34に、読み出された素データを出力する。なお、データ追加部Reduce34は、処理を担当するkey範囲が予め設定されている。データ追加部Map33は、パーティションテーブルT300を含む。データ追加部Map33は、パーティションテーブルT300に基づいて、読み出されたデータを出力するデータ追加部Reduce34を特定する。なお、パーティションテーブルT300については、図7A及び図7Bを用いて後述する。データ追加部Reduce34は、入力された素データを所定の形式、すなわち、構造化データ図21参照に変換し、さらに、当該構造化データを分散ファイルシステムに出力する。データ追加部Reduce34は、キーサイズテーブルT400を含む。キーサイズテーブルT400は、データ管理部21に含まれるキーサイズテーブルT400と同一のものである。ただし、キーサイズテーブルT400には、データ追加部Reduce34が担当するkey範囲の分割領域に関する管理情報のみが格納される。ファイルサーバスレーブ32は、分散配置されるファイルを管理する。ファイルサーバマスタ23は、ファイルのメタデータディレクトリ構造、サイズ、更新日時等を管理し、ファイルサーバスレーブ32と連携して一つのファイルシステムを提供する機能を備える。データ追加部Map33及びデータ追加部Reduce34は、ファイルサーバマスタ23にアクセスすることによって、ファイルシステム上のファイルを利用し、各種タスクを実行する。すなわち、データ追加部Map33及びデータ追加部Reduce34は、同一のファイルシステムにアクセスすることができる。なお、スレーブノード30が備えるソフトウェア構成は、ハードウェアを用いて実現してもよい。次にデータ管理部21に含まれる各テーブルの詳細について説明する。図4は、本発明の第1の実施形態におけるデータ管理テーブルT100の一例を示す説明図である。データ管理テーブルT100は、データIDT101及び分割テーブル名T102を含む。データIDT101は、データセットの識別子を格納する。分割テーブル名T102は、データセットに対応する分割テーブルT200の名称を格納する。データ管理テーブルT100の各エントリは、本データ分析システムが管理する1つのデータセットに対応する。また、当該データセットは、通常のデータベースにおける1つのテーブルリレーションに対応する。図5A及び図5Bは、本発明の第1の実施形態における分割テーブルT200の一例を示す説明図である。図5Aは、分割テーブル名T102がlog01.partであるデータセットの分割テーブルT200の一例を示す。図5Bは、分割テーブル名T102がlog02.partである分割テーブルT200の一例を示す。分割テーブルT200は、本データ分析システムが処理する各データセットの分割方法を示す管理情報を格納する。分割テーブルT200は、分割テーブル名T201、データファイル名T202、keyT203及びオフセットT204を含む。分割テーブル名T201は、分割テーブルT200の名称を格納する。分割テーブル名T201は、分割テーブル名T102と同一のものである。データファイル名T202は、分割領域に対応するデータを格納するファイルの名称を格納する。keyT203は、分割領域のkey範囲を示すkeyの値、すなわち、データセットの分割位置を表すkeyの値を格納する。keyT203には、分割領域における終了地点を表すkeyの値が格納される。オフセットT204は、データセットにおける分割位置の値に対応するオフセットを格納する。オフセットT204には、keyT203に対応するkeyのオフセットが格納される。なお、データファイル名T202が異なる場合には、データが格納されるファイルが異なるため、対応するエントリのオフセットは0から改めてカウントされる。分割領域の開始位置は、1つ前のエントリのkeyT203及びオフセットT204に対応する。そして、最初の分割領域の開始位置を表すkeyと、最後の分割領域の終了位置を表すkeyは定義されないため、これらは分割テーブルT200には記載されない。各分割テーブルT200の各エントリは、本データ分析システムが管理する1つの分割領域に対応する。例えば、図4に示すデータ管理テーブルT100の1つ目のエントリは、分割テーブル名T101がlog01.partであり、図5Aに示す分割テーブルT200に対応する。図5Aに示す分割テーブルT200の1つ目のエントリが最初の分割領域に対応する。1つ目のエントリは、データファイル名T202がlog01/001.datであるファイルに、当該分割領域のデータが格納されていることを示す。また、1つ目のエントリのkeyT203が034aであることから、最初の分割領域のkey範囲は034a未満であることを示す。また、1つ目のエントリのオフセットT204が280であることから、ファイル上のオフセットが0~279の範囲に最初の分割領域のデータが格納されていることを示す。また、図5Aに示す分割テーブルT200の2つ目のエントリは、対応する分割領域のkey範囲は034a以上かつ172d未満であり、データファイル名T202がlog01/002.datであることを示す。また、データファイル名T202が1つ目のエントリと異なるため、オフセットは0からカウントされる。したがって、オフセットが0~218の範囲に対応する分割領域のデータが格納されることを示す。また、図5Aに示す分割テーブルT200の3つ目のエントリは、対応する分割領域のkey範囲は172d以上かつ328b未満であり、データファイル名T202がlog01/002.datであることを示す。また、データファイル名T202が2つ目のエントリと一致するため、ファイル上のオフセットが219~455の範囲に対応する分割領域のデータが格納されることを示す。また、図4に示すデータ管理テーブルT100の2つ目のエントリは、分割テーブル名T101がlog02.partであり、図5Bに示す分割テーブルT200に対応する。図5Bに示す分割テーブルT200に格納される各エントリのデータファイル名T202及びオフセットT204は、図5Aに示す分割テーブルT200の各エントリと異なる。しかし、両分割テーブルT200の分割位置を表すkeyT203は共に一致する。本実施形態では、結合する可能性があるデータセットにおける分割領域の分割位置、すなわち、keyT203は必ず一致するように管理される。これによって、2つ以上のデータセットの結合処理を並列化することができる。すなわち、結合対象となるデータセットの分割テーブルT200のkeyT203が同一のエントリを対応付けることが可能となり、分割領域毎に結合処理を並列して実行することが可能となる。ファイルには、図22Aに示したように1つのkeyと1つ以上の値とから構成されるレコードが複数含まれる。また、各ファイルは、keyに基づいてソートされた形式で、分散ファイルシステムに格納される。これによって、分割領域毎に結合処理を行う場合に、同一のkeyをつき合わせてマージ結合することが可能となる。また、異なる分割領域のデータを格納するファイルは同一であってもよい。例えば、図5Aでは、2つ目のエントリと3つ目のエントリとは、同一のファイルである。ただし、それぞれのエントリのkey範囲が異なっている。前述のように図5Aでは、ファイルの数は3つであるが、分割領域の数は4つであり、それぞれ異なる。後述するように、ファイルの数は、本データ分析システムにおけるデータ追加処理の並列度に一致する。一方、分割領域の数は、データの分析処理の並列度に依存する。したがって、ファイルの数と分割領域の数とは、それぞれ異なった処理に依存するため、両者には依存関係はなく、どのように決めてもよい。図6は、本発明の第1の実施形態におけるパーティションテーブルT300の一例を示す説明図である。パーティションテーブルT300は、新たに追加されるデータセット素データを分割して、タスクを実行するデータ追加部Reduce34に、当該データを振り分ける際に用いられる情報を格納する。パーティションテーブルT300は、keyT301及び宛先T302を含む。keyT301は、入力されたデータセットの分割位置を表すkeyの値を格納する。宛先T302は、分割されたデータセットの処理を担当するデータ追加部Reduce34の位置を示す宛先情報を格納する。図6に示す例では、IPアドレス及びポートを含む宛先情報によってノード及び当該データ追加部Reduce34が指定される。図7A及び図7Bは、本発明の第1の実施形態におけるにキーサイズテーブルT400の一例を示す説明図である。キーサイズテーブルT400は、分割領域のデータサイズを格納する。キーサイズテーブルT400は、keyT401及びサイズT402を含む。keyT401は、keyT203と同一のものである。サイズT402は、keyT401を分割位置とする分割領域のデータサイズを格納する。なお、サイズT402は、結合処理の対象となる分割領域のデータサイズの合計値が格納される。キーサイズテーブルT400は、後述する結合処理及び分析処理、並びに、データ追加処理の実行時に動的に生成される。次に、データの結合処理及び分析処理について説明する。図8は、本発明の第1の実施形態におけるデータの結合処理及び分析処理を説明するフローチャートである。結合処理は、必ず分析処理と共に実行される。すなわち、結合処理によって1レコード分のデータが結合された後、当該データに対して分析処理が実行される。結合処理及び分析処理は、利用者からの指示を受信したデータ管理部21によって実行される。なお、利用者からの指示には、結合対象であるデータセットのデータIDが含まれる。まず、マスタノード20は、処理対象となるデータセットに対応するキーサイズテーブルT400を作成するステップS101。具体的には、以下のような処理が実行される。データ管理部21は、利用者から送信された指示に含まれるデータIDに基づいて、データ管理テーブルT100を検索し、対応するエントリから分割テーブル名T102を取得する。次に、データ管理部21は、取得された分割テーブル名T102に対応する分割テーブルT200を取得する。データ管理部21は、取得された分割テーブルT200に基づいて、分割領域毎の分割位置を示すkeyの値を特定し、また、結合対象であるデータセットのデータサイズを算出する。さらに、データ管理部21は、前述の処理結果に基づいて、キーサイズテーブルT400を作成する。例えば、データIDT101がlog01及びlog02であるデータセットを結合する場合、対応する分割テーブルT200はそれぞれ図5A及び図5Bとなる。このとき、データ管理部21は、前述した処理を実行することによって、分割領域毎に2つのデータセットのデータサイズを足し合わせ、図7Aに示すようなキーサイズテーブルT400を作成する。次に、マスタノード20は、結合処理及び分析処理の組からなるタスクを複数生成し、生成された各タスクを各スレーブノード30に割り当てることによって当該タスクを起動するステップS102。具体的には、処理管理部22が、プログラムリポジトリ24から処理に必要なプログラムを読み出し、利用者によって指定された並列数分のタスクを生成する。さらに、処理管理部22が、生成されたタスクを各スレーブノード30上で実行させる。なお、当該並列数がステップS101において作成されたキーサイズテーブルT400のエントリ数よりも小さい場合、当該エントリ数を並列数とし、エントリ数分のタスクをスレーブノード30上で実行させる。次に、マスタノード20は、各タスクに分割領域を割り当てるステップS103。具体的には、データ管理部21は、ステップS101において作成されたキーサイズテーブルT400の各エントリに対応する分割領域を、ステップS102において生成された各タスクに割り当てる。なお、データ管理部21は、キーサイズテーブルT400のサイズT402に基づいて、データサイズが均等になるように、各タスクに分割領域を割り当てる。前述した分割領域の割り当て方法としては、例えば、データ管理部21が、キーサイズテーブルT400のエントリをサイズT402に基づいてソートし、データサイズが大きなエントリから順に、割り当てられたデータサイズが小さいタスクへ割り当てる方法が考えられる。データ管理部21は、分割領域の割り当てが終了した後、タスクが割り当てられたスレーブノード30に対して、結合すべきファイルのデータファイル名及びオフセット位置を送信する。例えば、図7AのキーサイズテーブルT400の1つ目のエントリに対応する分割領域が割り当てられたタスクの場合、対応する分割テーブルT200のエントリは、図5A及び図5Bのそれぞれ1つ目のエントリである。したがって、データ管理部21は、データファイル名、開始位置、終了位置=log01/001.dat,0,280、log02/001.dat,0,200を、当該タスクが割り当てられたスレーブノード30に送信する。次に、マスタノード20は、タスクが割り当てられた各スレーブノード30に対してタスクの実行指示を送信し、処理を終了するステップS104。具体的には、データ管理部21は、タスクを割り当てた各スレーブノード30にタスクの実行指示を送信する。マスタノード20から指示を受信したスレーブノード30は、ファイルサーバマスタ23にアクセスし、データ管理部21から受信したデータファイル名及びオフセット位置に基づいて、指定されたファイルを、指定されたオフセット位置から読み出す。各スレーブノード30は、読み出された各ファイルのkeyをつき合わせ、結合処理を実行する。さらに、スレーブノード30は、同一のスレーブノード30において、実行中の分析処理のタスクに1レコードずつ結合処理の結果を出力する。例えば、図5A及び図5Bに対応するデータセットに対する分析処理では、4つの分割領域毎にタスクが生成され、各タスクによって前述した結合処理が実行される。このとき、データセット毎に分割位置が異なると、重複するキー範囲について処理が実行されてしまうため並列処理が実現できない。しかし、本実施形態では、各データセットの分割位置が同一であるため、各データセットの分割領域における結合処理を並列実行できる。以上が、データの結合処理及び分析処理の説明である。次にデータ追加処理について説明する。データ追加処理は、データ管理テーブルT100及び分割テーブルT200が作成されているデータセット、すなわち、分散ファイルシステムに既存のデータセットが格納されている場合に、新規データセットを追加するための処理である。通常、データセット毎に各分割領域のデータサイズが異なる。そのため、分割位置を修正せずに各データセットの分割領域を結合すると、分割領域間のデータサイズのばらつきが発生する。この結果、分析処理を実行するタスクの処理量にばらつきが発生し、並列処理の効率が低下する。本発明では、前述した課題を解決するため、データ追加処理時に後述する処理を実行することによって、分割領域を再分割し、各分割領域のデータサイズを平準化する。具体的には、新規データセットが追加された後、結合対象となり得る全データセットを結合させた場合の各分割領域のデータサイズが所定の基準値以下になるように分割位置が制御される。これによって、全データセット利用時に並列実行される分析処理のタスク間における処理量の差を平準化させることができる。なお、一部のデータセットを結合する場合には、各分割領域のデータサイズは基準値以下になり、分析処理のタスク間の処理量の差は平準化される。分割領域を再分割することによって、結合処理及び分析処理のタスク制御のオーバーヘッドが発生した場合に、割り当てられている分割領域が小さくなった場合には、当該分割領域が割り当てられるタスクに複数の分割領域が割り当てられ、1つのタスクが実行する処理量を増やすことができる。なお、前述した所定の基準値は、タスクの処理量の差に影響することから、許容されるタスクの処理量の差に基づき決定することが望ましい。当該基準値を小さくしすぎると分割領域の数が増えるため、データ追加処理のオーバーヘッドが増える。一方、当該基準値を大きくしすぎるとタスク間の処理量の差が大きくなり、並列処理の効率が下がる。したがって、1つのタスクが所定のデータ量を処理するときの実行時間が、タスク間の処理時間の差として許容される時間以下になるようなデータ量を所定の基準値とすればよい。データ追加処理で追加されるデータは、図20に示すような形式で入力される。データ追加処理では、図22A示すような形式のデータをユーザIDでグループ化された形式に変換され、分散ファイルシステムに格納される。以下、図20の形式のデータセットを素データと記載し、図21の形式のデータを構造化データと記載する。以下、図9を用いて具体的に処理について説明する。図9は、本発明の第1の実施形態におけるデータ追加処理を説明するフローチャートである。利用者が、ファイルサーバマスタ23及びファイルサーバスレーブ32によって実現される分散ファイルシステムに対して、素データを入力することによってデータ追加処理が実行される。まず、データ管理部21は、入力された素データをサンプリングし、keyの出現頻度を解析するステップS201。具体的には、データ管理部21は、素データに含まれるレコードをランダムにサンプリングする。データ管理部21は、読み出されたレコードの最初のフィールドをkeyとするkeyの一覧を作成する。なお、素データは1レコードが1行の形式のデータから構成されるため、データ管理部21は、改行コードを検出することによって1レコード分のデータを読み出すことができる。精度を向上するためにサンプリング数を増やす場合には、データ管理部21は、サンプリング処理を並列実行してもよい。この場合、データ管理部21は、素データをデータサイズが等しくなるように複数個に分割し、分割された素データ毎にサンプリング処理が実行される。具体的には、データ管理部21は、サンプリング処理の実行タスクを各スレーブノード30に割り当て、さらに、当該実行タスクに分割された素データを割り当てる。データ管理部21は、各スレーブノード30の処理実行部31からサンプリング処理の結果を受信し、すべてのスレーブノード30から受信したサンプリング処理の結果を集計してkeyの一覧を作成する。次に、データ管理部21は、作成されたkeyの一覧に基づいて、素データの分割位置となるkeyの値を決定するステップS202。当該分割処理は、後述するステップS204における入力された素データを出力するための分割処理であり、分割テーブルT200における分割処理とは異なる処理である。ただし、ステップS204の処理では、既存の分割位置は変更されない。したがって、素データの分割位置は、既存のデータセットの分割テーブルT200の分割位置に一致させる必要がある。具体的には、以下のような処理が実行される。データ管理部21は、分割テーブルT200を参照し、既存の全データセットの分割位置を含むキーサイズテーブルT400を作成する。例えば、図7Aに示すようなキーサイズテーブルT400が作成される。ただし、この時点では、サイズT402には値は格納されていない。データ管理部21は、サンプリングされたkey毎に対応する分割領域を特定し、キーサイズテーブルT400の対応するエントリのサイズT402に、keyに対応するデータのデータサイズをインクリメントする。以上のような処理によって、データ管理部21は、サンプリングされたkeyの分布を求めることができる。例えば、サンプリングされたkeyが125dである場合、当該keyは、034a以上かつ172d未満であるため、keyT401が172dであるエントリのサイズT402にkeyが125dであるデータのデータサイズがインクリメントされる。データ管理部21は、keyの分布を求めた後、利用者によって指定された並列数と分割領域の数とが一致するように、キーサイズテーブルT400の隣り合う分割領域をマージする。このとき、マージ後の各分割領域のデータサイズが均等になることが望ましい。例えば、利用者によって指定された並列数が2の場合、keyの分布が図7Bに示すようなキーサイズテーブルT400は4つの分割領域があるため、マージして2つの分割領域にする必要がある。そこで、データ管理部21は、keyT401が034aのエントリと172dのエントリとを1つの分割領域としてマージし、keyT401が328bのエントリと空欄のエントリとを1つの分割領域としてマージする。マージ処理が終了した後、データ管理部21は、マージ結果をパーティションテーブルT300のkeyT301に格納する。なお、前述したマージ処理において、キーサイズテーブルT400のエントリ数が、利用者によって指定された並列数以上の場合、マージ処理は実行されず、当該エントリ数が並列数となる。以上がステップS202における処理である。次に、データ管理部21は、分析処理において結合対象となる可能性がある全データセットのデータサイズを算出するステップS203。さらに、データ管理部21は、算出結果に基づいて、キーサイズテーブルT400を作成する。具体的には、以下のような処理が実行される。データ管理部21は、データ管理テーブルT100を参照して、各データセットの分割テーブル名T102を取得する。さらに、データ管理部21は、取得された分割テーブル名T102に基づいて、対応する分割テーブルT200の一覧を取得する。なお、結合対象となり得る各データセットの分割テーブルT200における分割位置は一致している。したがって、分析処理において分割領域の結合を並列実行できる。データ管理部21は、取得された分割テーブルT200のkeyT203を含むキーサイズテーブルT400を作成する。さらに、データ管理部21は、分割テーブルT200毎に各分割領域のデータサイズを算出し、作成されたキーサイズテーブルT400のサイズT402に、算出されたデータサイズを加算する。取得されたすべての分割テーブルT200に対して同様の処理を実行することによって、分散ファイルシステム上に存在するすべての既存のデータセットに関するキーサイズテーブルT400を作成できる。例えば、図5A及び図5Bに示す分割テーブルT200に対して前述した処理を実行することによって、図7Aに示すようなキーサイズテーブルT400が作成される。以上がステップS203における処理である。次に、データ管理部21は、ステップS202におけるマージ結果を表すパーティションテーブルT300に基づいて、素データに対するグルーピング処理を実行するステップS204。ここで、グルーピング処理とは、素データに含まれるレコードをkey図20に示す例ではユーザID毎に集約する処理である。グルーピング処理では、データ管理部21、データ追加部Map33及びデータ追加部Reduce34が連携して処理を実行する。データ追加部Map33及びデータ追加部Reduce34は、データ管理部21からの指示にしたがって、それぞれ並列処理を実行する。なお、パーティションテーブルT300のエントリ数が、タスクを割り当てるデータ追加部Reduce34の並列度となる。一方、タスクを割り当てるデータ追加部Map33の並列度は、パーティションテーブルT300のエントリ数とは無関係であり、利用者によって指定される。以下、データ追加部Map33をMapタスクと記載し、データ追加部Reduce34に割り当てるタスクをReduceタスクとも記載する。具体的には以下のような処理が実行される。データ管理部21は、利用者によって指定された並列数にしたがって、データサイズが一定となるように素データを分割する。さらに、データ管理部21は、素データを分割して生成された分割領域の各分割位置であるオフセット位置、及び当該分割領域のデータサイズを算出する。なお、オフセット位置はレコード境界に一致するように素データの一部をスキャンして調整される。データ管理部21は、処理管理部22と連携して、利用者によって指定された並列数分のMapタスクを生成し、生成されたMapタスクを各データ追加部Map33に割り当てる。このとき、各データ追加部Map33には、分割領域のオフセット位置、分割領域のデータサイズ、及び素データのファイル名が送信される。さらに、データ管理部21は、処理管理部22連携して、パーティションテーブルT300のエントリ数分のReduceタスクを生成する。また、データ管理部21は、パーティションテーブルT300の各エントリをデータ追加部Reduce34と対応づける。データ管理部21は、対応づけられた各データ追加部Reduce34に、keyT301に対応するkey範囲の分割領域を処理するためのReduceタスクを割り当てる。さらに、データ管理部21は、ステップS202において作成されたキーサイズテーブルT400のうち、送信されたkey範囲に対応するエントリをデータ追加部Reduce34送信する。例えば、図6に示すパーティションテーブルT300の最初のエントリのkey範囲は、172d未満であるため、対応するキーサイズテーブルT400のエントリは、図7Aの一つ目のエントリ及び2つ目のエントリである。したがって、データ管理部21は、一つ目のエントリ及び2つ目のエントリを対応するデータ追加部Reduce34に送信する。さらに、データ管理部21は、データ追加部Reduce34の宛先情報アドレス:ポート番号を取得し、パーティションテーブルT300の対応するエントリの宛先T302に取得された宛先情報を格納する。パーティションテーブルT300が作成された後、処理管理部22は、すべてのデータ追加部Map33に完成したパーティションテーブルT300を送信する。以上がステップS204における処理である。なお、ステップS204におけるデータ追加部Map33及びデータ追加部Reduce34は、グルーピング処理が実行された後、データの出力処理を実行する。グルーピング処理の詳細については図10を用いて後述し、また、データの出力処理の詳細については図11を用いて後述する。データ管理部21は、分割テーブルT200を更新し、処理を終了するステップS205。具体的には、データ管理部21は、各データ追加部Reduce34から受信した分割テーブルT200に基づいて、自身が管理する分割テーブルT200を更新する。なお、受信した分割テーブルT200は、データ追加部Reduce34が後述する処理図10及び図11参照が実行された後のテーブルである。データ追加部Reduce34は、一部のkey範囲のデータセットのみを処理する。本実施形態では、一つのデータ追加部Reduce34によって更新された分割テーブルT200に基づいて、データ分析システムにおけるすべての分割テーブルT200が更新される点に特徴がある。また、データ管理部21は、各データ追加部Reduce34から受信した、入力された素データの分割テーブルT200を1つにマージし、マージされたテーブルを入力された素データの分割テーブルT200として管理する。これは、key範囲毎に、各データ追加部Reduce34において素データに対する処理が並列実行されていたため、各処理結果を集約する処理である。さらに、データ管理部21は、素データの分割テーブルT200に対応するエントリをデータ管理テーブルT100に追加する。次に、ステップS204におけるグルーピング処理の詳細について説明する。図10は、本発明の第1の実施形態におけるグルーピング処理の詳細を説明するフローチャートである。スレーブノード30は、入力された素データに対してソート処理を実行するステップS301。具体的には以下の処理が実行される。データ追加部Map33は、素データから1つずつレコードを読み出す。データ追加部Map33は、読み出されたレコードのkeyに基づいて、パーティションテーブルT300からデータ追加部Reduce34の宛先情報を取得する。すなわち、読み出されたレコードを処理するデータ追加部Reduce34が特定される。データ追加部Map33は、宛先毎に読み出された各レコードを分類する。以下、宛先ごとに分類されたレコード群をセグメントと記載する。データ追加部Map33は、自身が担当する分割された素データに含まれるすべてのレコードを読み出した後、各セグメントに含まれるレコードをkeyに基づいてソートする。以上がステップS301における処理である。次に、スレーブノード30は、ソートされたセグメントをデータ追加部Reduce34に送信するステップS302。具体的には、データ追加部Map33が、ステップS301において取得された宛先情報に対応するデータ追加部Reduce34に、ソートされたセグメントを送信する。各データ追加部Reduce34は、各スレーブノード30のデータ追加部Map33から送信されるセグメントを受信する。データ追加部Map33からセグメントを受信したスレーブノード30は、keyに基づいて受信したセグメントをマージし、処理を終了するステップS303。具体的には、データ追加部Reduce34が、受信したすべてのセグメントを順に読み出し、keyが同一のセグメント同士をマージして結合する。さらに、データ追加部Reduce34は、マージされたセグメントに含まれるレコードを、図10に示すような構造化データに変換する。前述した処理によって、複数のレコードが、keyが同一の1つのレコードに集約される。次に、ステップS204において、データ追加部Reduce34が実行するデータ出力処理について説明する。図11は、本発明の第1の実施形態におけるデータ出力処理を説明するフローチャートである。まず、データ出力処理の概要について説明する。データ追加部Reduce34は、データ出力処理を実行することによって、図22Aに示すような形式の構造化データを分散ファイルシステムへ出力する。並列度の数だけ、データ追加部Reduce34においてタスクが実行される。このとき、データ追加部Reduce34が出力するファイル名はそれぞれ異なる。さらに、本発明では、データ追加部Reduce34は、素データのデータサイズをキーサイズテーブルT400に加算して、素データが追加された後の各分割領域のデータサイズを算出する。データ追加部Reduce34は、データサイズが所定の閾値以上である分割領域が存在する場合、分割領域の分割処理を実行する。データ追加部Reduce34は、分割領域の分割処理が実行された場合、自身が管理する既存のデータセットの分割テーブルT200も更新する。さらに、データ追加部Reduce34は、更新された分割テーブルT200をデータ管理部21に送信する。更新された分割テーブルT200に基づいて、データ管理部21が、分割テーブルT200の更新処理ステップS205を実行する。また、データ追加部Reduce34は、入力された素データの分割テーブルT200を作成し、処理終了後に作成された分割テーブルT200をデータ管理部21に送信する。以下、各処理の詳細について説明する。まず、データ追加部Reduce34は、データ出力処理を開始する前に、ステップS204においてデータ管理部21から受信したキーサイズテーブルT400に含まれるkeyのみが格納されたキーサイズテーブルT400を作成する。ここで、作成されたキーサイズテーブルT400は、素データの所定の分割領域のデータサイズが格納されるテーブルである。以下、作成されたキーサイズテーブルT400を追加用キーサイズテーブルT400とも記載する。なお、追加用キーサイズテーブルT400が作成された時点では、サイズT402の初期値は0に設定される。また、データ管理部21から受信したキーサイズテーブルT400は、データ追加部Reduce34が担当するkey範囲に含まれる分散ファイルシステム上の全データセットのデータサイズを管理するテーブルである。以下、当該キーサイズテーブルT400を全データ用キーサイズテーブルT400と記載する。データ出力処理が開始されると、データ追加部Reduce34は、ステップS303において作成されたレコードを出力し、前回出力されたレコードとは異なる分割領域に含まれるレコードであるか否かを判定するステップS401。具体的には、データ追加部Reduce34は、追加用キーサイズテーブルT400のkeyT402を参照し、出力されたレコードが前回出力されたレコードと異なる分割領域に含まれるか否かを判定する。本実施形態では、keyに基づいてソートされたレコードが順に出力されるため、出力されたレコードが所定のkey範囲、すなわち、所定の分割領域に含まれるか否かを判定できる。なお、最初に出力されるレコードの場合、同一の分割領域に含まれると判定される。異なる分割領域に含まれるレコードであると判定された場合、データ追加部Reduce34は、前回レコードが追加された分割領域のデータサイズの確認処理を実行しステップS405、ステップS402に進む。なお、データサイズの確認処理については、図12を用いて後述する。同一の分割領域に含まれるレコードであると判定された場合、データ追加部Reduce34は、ステップS303において作成されたレコードを分散ファイルシステムに書き込むステップS402。このとき、データ追加部Reduce34は、書き込まれたレコードのkeyの値、レコードが書き込まれたファイル上のオフセット位置、及びレコードのデータサイズを含むレコード統計情報を作成し、作成されたレコード統計情報を保存する。これは、素データのレコード統計情報である。次に、データ追加部Reduce34は、キーサイズテーブルT400を更新するステップS403。具体的には、データ追加部Reduce34は、ステップS402において書き込まれたレコードのkeyが含まれるkey範囲の分割領域を特定する。データ追加部Reduce34は、特定された分割領域に対応するエントリを、追加用キーサイズテーブルT400及び全データキーサイズテーブルT400から検索する。さらに、データ追加部Reduce34は、各キーサイズテーブルT400の対応するエントリのサイズT402に、書き込まれたレコードのデータサイズを加算する。データ追加部Reduce34は、すべてのレコードを出力したか否かを判定するステップS404。すべてのレコードが出力されていないと判定された場合、データ追加部Reduce34は、ステップS401に戻り、同様の処理を実行する。すべてのレコードが出力されたと判定された場合、データ追加部Reduce34は、最後の分割領域に対するデータサイズの確認処理を実行し、処理を終了するステップS406。なお、ステップS406におけるデータサイズの確認処理は、ステップS405と同一の処理である。図12は、本発明の第1の実施形態のおけるデータサイズの確認処理を説明するフローチャートである。データ追加部Reduce34は、ステップS403において更新された全データキーサイズテーブルT400を参照し、対象となる分割領域のデータサイズが所定の基準値より大きいか否かを判定するステップS501。すなわち、素データが追加された分割領域が、所定の基準値より大きいか否かが判定される。ここで、対象となる分割領域とは、前回入力されたレコードが含まれる分割領域である。以下、対象となる分割領域を、対象領域とも記載する。具体的には、データ追加部Reduce34は、全データキーサイズテーブルT400の対応するエントリのサイズT402を参照し、対象領域のデータサイズが所定の基準値より大きいか否かを判定する。対象領域のデータサイズが所定の基準値以下であると判定された場合、データ追加部Reduce34は、ステップS506に進む。対象領域のデータサイズが所定の基準値より大きいと判定された場合、データ追加部Reduce34は、マスタノード20から既存のデータセットの分割テーブルT200を取得するステップS502。ここで、ステップS203においてマスタノード20が取得したすべての分割テーブルT200が取得される。なお、データ追加部Reduce34は、マスタノード20から取得された分割テーブルT200をキャッシュとして保存してもよい。次に、データ追加部Reduce34は、取得された各分割テーブルT200における対象領域の終了位置、すなわち、オフセットを特定するステップS503。具体的には以下のような処理が実行される。データ追加部Reduce34は、対象領域のkeyに基づいて、取得された各分割テーブルT200を参照して、対象領域に対応するエントリを取得する。すなわち、対象領域に対応するデータのデータファイル名T202及びオフセットT204が取得される。なお、当該処理は、ステップS502において取得されたすべての分割テーブルT200に対して実行される。例えば、ステップS501において図13に示すような全データキーサイズテーブルT400であり、最初のエントリに対応する分割領域のデータサイズが所定の基準値より大きい場合、データ追加部Reduce34は、図5A及び図5Bに示す分割テーブルT200の1つ目のエントリから情報を取得する。この場合、図5Aではデータファイル名、オフセット=/log01/001.dat,280となり、図5Bでは/log02/002.dat,200となる。取得されたオフセットが、各分割テーブルT200における対象領域の終了位置となる。なお、対象領域の開始位置は、1つ目のエントリであるため開始位置のオフセットは0である。次に、データ追加部Reduce34は、各既存のデータセットの対象領域に含まれるレコードを解析するステップS504。具体的には、データ追加部Reduce34は、各既存のデータセットの対象領域に含まれるレコードを読み出す。例えば、データIDT101がlog01及びlog02のデータセットがある場合に、log01のデータセットの対象領域からレコードが読み出され、また、log02のデータセットの対象領域からレコードが読み出される。データ追加部Reduce34は、読み出されたレコードのkey、レコードのデータサイズ、及びレコードのファイル上のオフセット位置を含むレコード統計情報を取得する。なお、既存のデータセットは複数存在するため、当該レコードの解析処理をデータセット毎に並列実行してもよい。データ追加部Reduce34は、ステップS402において取得された素データのレコード統計情報と、既存データセットのレコード統計情報とを合わせて、分散ファイルシステム上における全データセットのレコード統計情報とする。次に、データ追加部Reduce34は、作成された全データセットのレコード統計情報に基づいて、再分割する分割位置となるkeyの値を決定するステップS505。具体的には以下のような処理が実行される。データ追加部Reduce34は、全データセットのレコード統計情報に基づいて、対象領域におけるデータサイズを算出する。データ追加部Reduce34は、算出されたデータサイズ及び所定の基準値に基づいて、対象領域における分割数を算出する。次に、データ追加部Reduce34は、対象領域のデータサイズを、算出された分割数で除算して、再分割後の分割領域のデータサイズを算出する。データ追加部Reduce34は、全データセットのレコード統計情報のエントリをkeyでソートした後、レコードのデータサイズの累積値分布を算出する。すなわち、分散ファイルシステムにおける所定のkey範囲に含まれる各レコードのデータサイズの分布が算出される。データ追加部Reduce34は、算出された累積値分布に基づいて、レコードのデータサイズが分割後の分割領域のデータサイズの整数倍になっている地点を再分割の分割位置として決定する。整数倍になっていない場合、当該テータサイズと最も近いレコードが分割位置として決定される。再分割位置のkeyは、データとして存在するkeyを使ってもよいし、データとして存在しないkeyを使ってもよい。データ追加部Reduce34は、全データセットのレコード統計情報を参照して、決定された各key範囲に対応するオフセットを特定する。データ追加部Reduce34は、各分割テーブルT200に再分割後の分割領域に対応するエントリを追加する。また、データ追加部Reduce34は、各分割テーブルT200から再分割前の分割領域に対応するエントリを削除する。例えば、key範囲が034a未満である分割領域が、key範囲が015d未満である分割領域と、key範囲が015d以上かつ034a未満である分割領域との2つの分割領域に分割された場合、図5A及び図5Bに示す分割テーブルT200は、図14A及び図14Bのように変更される。図中の太線で示した部分が変更箇所である。データ追加部Reduce34は、レコード統計情報に基づいて、追加用キーサイズテーブルT400及び全データキーサイズテーブルT400も変更する。例えば、再分割前の全データキーサイズテーブルT400が図13に示すテーブルである場合、図15に示すように変更される。図中の太線で示した部分が変更箇所である。以上がステップS505の処理である。次に、データ追加部Reduce34は、分割テーブルT200を更新するステップS506。具体的には、データ追加部Reduce34は、追加用キーサイズテーブル及び素データのレコード統計情報に基づいて、素データの分割テーブルT200に対応する分割領域のエントリを格納する。すなわち、素データの分割テーブルT200が生成される。なお、再分割処理が実行された場合には、新たに分割された分割領域に対応するエントリが格納される。データ追加部Reduce34は、前述した処理に用いたレコード統計情報を削除し、処理を終了するステップS507。[第2の実施形態]第1の実施形態では、ファイルの内容は1つのファイルに保存されているため分析処理時に不要なデータも読み出される可能性がある。これに対して、第2の実施形態では、データ項目列毎に異なるファイルとして保存する方式を用いる。当該方式を用いることによって、分析処理時に必要な項目のみ読み出すことが可能となる。本発明は、データ項目毎に異なるファイルに保存する格納方式列分割格納方式にも対応することが可能である。以下、第1の実施形態との差異を中心に第2の実施形態について説明する。第2の実施形態では、データ分析システムの構成は第1の実施形態と同一であるため説明を省略する。また、マスタノード20及びスレーブノード30のハードウェア構成及びソフトウェア構成も第1の実施形態と同一であるため説明を省略する。図16は、本発明の第2の実施形態におけるレコードのスキーマを示す説明図である。図17は、本発明の第2の実施形態におけるレコードの一例を示す説明図である。第1の実施形態のレコードに対して、第2の実施形態のレコードにはユーザの年齢が新たに含まれる。レコードの項目は、ユーザID、移動履歴位置X、位置Y、タイムスタンプの履歴、及び年齢の3種類があり、本実施形態ではユーザIDがkeyとして使用される。図18A、図18B及び図18Cは、本発明の第2の実施形態におけるファイルを示す説明図である。図18A、図18B及び図18Cでは、列分割方式を用いて前述したデータがファイルに格納された例を表す。図18A、図18B及び図18Cに示すように、ユーザIDはlog/001.key.dat図18A、移動履歴はlog/001.rec.dat図18B、年齢はlog/001.age.dat図18Cというファイルにそれぞれ格納される。データを読み出すときは、各ファイルの上から順にレコードが1つずつ読み出され、順に結合すれば図17に示したレコード全体を再構成することができる。図18A、図18B及び図18Cに示す例では、ファイルは1セットのみであるが、データが定期的に蓄積されていくことによって、ユーザID、移動履歴、及び年齢に対応するファイルを含むデータセットが増加する。実際の結合処理及び分析処理では並列して実行されるため、前述のファイルが分割された後、各スレーブノード30によって処理が実行される。図19は、本発明の第2の実施形態における分割テーブルT200の一例を示す説明図である。第2の実施形態における分割テーブルT200は、項目毎ユーザID、移動履歴、及び年齢にデータファイル名T202及びオフセットT204を格納する点が第1の実施形態と異なる。また、keyとして使用される項目には、keyT203に分割位置を表すkeyの値が格納される。次に、第2の実施形態における結合処理及び分析処理について第1の実施形態との相違点を中心に説明する。ステップS101では、キーサイズテーブルT400が作成される場合に、データ管理部21が、分割テーブルT200の中で分析処理に用いる項目のオフセットを参照して、各分割領域のサイズを計算する。例えばユーザIDと年齢のみを使用する分析を行う場合は、uidのオフセットとageのオフセットのみを使ってキーサイズテーブルのサイズを求める。このとき、recについてのオフセットは使用されない。これによって、一部の項目のみ利用する場合であっても、各分割領域のデータサイズを正確に算出できる。また、S104では、タスクが割り当てられた各スレーブノード30が、分析処理に用いるファイル数と、分析処理に用いる項目数との積の数分だけ、ファイルが読み出される。データ追加処理についても以下のような相違がある。ステップS203では、データ管理部21が、結合する可能性があるすべてのデータセットの分割テーブルT200の項目毎のオフセットから、既存データセットのキーサイズテーブルT400を作成する。ステップS402では、各レコードをファイル出力するとき、項目毎に別のファイルに出力される。したがって、ステップS402では項目毎に、書き込まれたレコードのkeyの値、書き込まれたファイル上のオフセット、及びデータサイズを含むレコード統計情報が保存される。また、ステップS403では、全項目の分割領域のサイズの和をキーサイズテーブルT400の対応するエントリに加算される。S506では、前述したレコード統計情報及びキーサイズテーブルT400を用いて、項目毎に分割位置のオフセット値を求めて分割テーブルT200を更新する。S504では、データに含まれる全項目に対応するファイルが読み出され、項目毎に、ファイルに書き込まれたレコードのkeyの値、書き込んだファイル上のオフセット位置、及びデータサイズを含むレコード統計情報が保存される。S505では、データ追加部Reduce34が、全項目の分割領域のデータサイズを足し合わせたものを当該データセットのデータサイズとして、分割位置のkeyを決定する。S506では、データ追加部Reduce34が、決定されたkey及びレコード統計情報を用いて、項目毎に分割位置のオフセットを算出し、分割テーブルT200を更新する。第2の実施形態では、3つの項目を処理する場合について説明したが、分割テーブルT200において管理される項目数を変更することによって任意の項目数にすることができる。本発明の一形態によれば、データ分析システムは、各データセットの分割位置が同一であるため分析処理における結合処理を並列に実行することができる。また、新たにデータセットが追加された場合に、タスク間の処理量が均一になるように分割領域を再分割することができる。これによって、タスク間の処理の不均衡を解消し、かつ、結合処理時に分散領域毎にレコードを結合することができる。以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。"