(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数の情報源からレコードデータを収集し、
収集したレコードデータに対する処理を実行する際に、前記処理についての定義情報を参照して、前記処理が単一のレコードデータから結果データを生成可能である場合は、前記複数の情報源からの収集対象の全レコードデータの到着を待たずに前記処理を開始し、
収集対象の全レコードデータのうちに参照を要するレコードデータが含まれ、前記参照を要するレコードデータにもとづいて前記処理としての変換処理が前記結果データを生成する際に、前記参照を要するレコードデータに未収集のレコードデータが存在する場合であっても、前記変換処理の一部の個別処理の実行を可能とするレコードデータが収集されている場合は、全レコードデータの収集を待たずに、前記個別処理を先行して行うように、前記変換処理を複数の個別処理に分割して実行し、
前記定義情報にもとづいて、収集したレコードデータの中の項目により前記個別処理を実行できるか否かを判断し、前記項目により実行できると判断される前記個別処理を先行して行うように、前記個別処理の実行順序を変えて前記変換処理を実行する、
ことを実行させる情報処理プログラム。
【請求項２】
前記コンピュータに、前記処理において前記参照を要するレコードデータの収集が完了している場合は、前記複数の情報源からの収集対象の全レコードデータの到着を待たずに前記処理を開始することを実行させるための請求項１記載の情報処理プログラム。
【請求項３】
前記コンピュータに、収集対象レコードデータの結合処理を行う場合、
到着済みレコードデータに対して先行して結合処理を行って、仮想レコードデータを生成し、未到着であったレコードデータが到着した後に、当該レコードデータと前記仮想レコードデータとに対して後続の結合処理を行うことを実行させるための請求項１記載の情報処理プログラム。
【請求項４】
前記到着済みレコードデータは、第１のレコードデータ、及び、第２のレコードデータであり、
前記情報処理プログラムは、前記コンピュータに、前記第１のレコードデータが収集中で、前記第２のレコードデータが収集済の場合、前記第１のレコードデータをパイプライン処理で読み込み、前記パイプライン処理で読み込まれた部分から順に前記第２のレコードデータと結合処理することで、前記仮想レコードデータを生成して出力することを実行させるためのものである、請求項３記載の情報処理プログラム。
【請求項５】
前記コンピュータに、前記仮想レコードデータの出力状況と、前記仮想レコードデータに結合すべき第３のレコードデータの収集状況とに応じて、前記パイプライン処理によるレコードデータ読み込みを行う対象レコードデータを変更して、前記仮想レコードデータと、前記第３のレコードデータとの結合処理を行うことを実行させるための請求項４記載の情報処理プログラム。
【請求項６】
前記コンピュータに、
前記仮想レコードデータの出力が完了し、かつ前記第３のレコードデータが収集中の場合は、前記第３のレコードデータに対して前記パイプライン処理によるレコードデータ読み込みを行って、前記仮想レコードデータと前記第３のレコードデータとを結合処理し、
前記仮想レコードデータが出力中であり、かつ、前記第３のレコードデータが収集済であり、かつ、前記第１のレコードデータが収集中である場合は、前記第１のレコードデータに対して前記パイプライン処理によるレコードデータ読み込みを行って、前記仮想レコードデータと前記第３のレコードデータとを結合処理することを実行させるための請求項５記載の情報処理プログラム。
【請求項７】
前記コンピュータに、
前記変換処理として、複数の結合処理と、加工処理とを行う際に、前記定義情報にもとづいて、
収集したレコードデータに対して、実行すべき前記加工処理があるか否かを判断し、
実行すべき前記加工処理がある場合には、該加工処理を、前記結合処理の途中で実行できるか否かを判断し、
前記結合処理の途中での該加工処理を実行不可と判断した場合には、前記結合処理がすべて終了した後に、該加工処理を実行し、
前記結合処理の途中で、該加工処理を実行可能と判断した場合には、前記結合処理の途中に該加工処理を挿入して実行することを実行させるための請求項１記載の情報処理プログラム。
【請求項８】
複数の情報源からレコードデータを収集する収集手段と、
収集したレコードデータに対する処理を実行する際に、前記処理についての定義情報を参照して、前記処理が単一のレコードデータから結果データを生成可能である場合は、前記複数の情報源からの収集対象の全レコードデータの到着を待たずに前記処理を開始し、収集対象の全レコードデータのうちに参照を要するレコードデータが含まれ、前記参照を要するレコードデータにもとづいて前記処理としての変換処理が前記結果データを生成する際に、前記参照を要するレコードデータに未収集のレコードデータが存在する場合であっても、前記変換処理の一部の個別処理の実行を可能とするレコードデータが収集されている場合は、全レコードデータの収集を待たずに、前記個別処理を先行して行うように、前記変換処理を複数の個別処理に分割して実行し、前記定義情報にもとづいて、収集したレコードデータの中の項目により前記個別処理を実行できるか否かを判断し、前記項目により実行できると判断される前記個別処理を先行して行うように、前記個別処理の実行順序を変えて前記変換処理を実行する処理手段と、
を有する情報処理装置。
【請求項９】
情報処理装置が、
複数の情報源からレコードデータを収集し、
収集したレコードデータに対する処理を実行する際に、前記処理についての定義情報を参照して、前記処理が単一のレコードデータから結果データを生成可能である場合は、前記複数の情報源からの収集対象の全レコードデータの到着を待たずに前記処理を開始し、
収集対象の全レコードデータのうちに参照を要するレコードデータが含まれ、前記参照を要するレコードデータにもとづいて前記処理としての変換処理が前記結果データを生成する際に、前記参照を要するレコードデータに未収集のレコードデータが存在する場合であっても、前記変換処理の一部の個別処理の実行を可能とするレコードデータが収集されている場合は、全レコードデータの収集を待たずに、前記個別処理を先行して行うように、前記変換処理を複数の個別処理に分割して実行し、
前記定義情報にもとづいて、収集したレコードデータの中の項目により前記個別処理を実行できるか否かを判断し、前記項目により実行できると判断される前記個別処理を先行して行うように、前記個別処理の実行順序を変えて前記変換処理を実行する、
レコードデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラム、情報処理装置およびレコードデータ処理方法に関する。
【背景技術】
【０００２】
連携先のシステムからレコードデータを集めて一連の処理を行う技術として、例えばＥＴＬ（Extraction Transformation and Loading）がある。
ＥＴＬは、連携先システムからレコードデータを収集・抽出（extract）し、所定の処理（transform）を行い、データベースまたは連携先システムへレコードデータを格納・配布（load）するという一連の動作を行う。
【０００３】
ＥＴＬのシステム形態としては、例えば、日々の業務で発生する売上げなどに関するレコードデータ（ジャーナルデータ）と、顧客や商品に関するレコードデータ（マスタデータ）とを収集して結合するものがある。このようなシステムにより、需要の変化を予測した販売施策や店舗間の在庫融通など、リアルタイムな情報利活用を実現することができる。
【０００４】
なお、ＥＴＬに関する技術として、例えば、後段ジョブオブジェクトの処理関数が、前段ジョブオブジェクトの処理関数が生成する出力データを変数として所定処理を実行し、出力データが未生成段階では出力データが生成されるまで待機する技術がある。
【０００５】
また、例えば、バッチ処理のプロセスメタデータを再編成し、適宜処理が実行可能な情報を保持して、各業務システムで更新情報が発生するタイミングで適宜データ加工プロセスを実行し、プレ集計結果を管理・公開する技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２６５０２９号公報
【特許文献２】特開２０１０−１２２８８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来のＥＴＬは、処理対象のレコードデータがすべて収集されるまで待機し、レコードデータがすべて揃った後で所定の処理を行っている。しかし、各連携先システムからレコードデータが送信されるタイミングは、通常、ランダムであるから、レコードデータが完全に揃ってから所定の処理を行っていると、レコードデータの収集開始から処理開始までに時間がかかることになる。
【０００８】
１つの側面では、本発明は、レコードデータの処理の開始時期を早めることを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、情報処理プログラムが提供される。情報処理プログラムは、コンピュータに、複数の情報源からレコードデータを収集し、収集したレコードデータに対する処理を実行する際に、前記処理についての定義情報を参照して、前記処理が単一のレコードデータから結果データを生成可能である場合は、前記複数の情報源からの収集対象の全レコードデータの到着を待たずに前記処理を開始し、収集対象の全レコードデータのうちに参照を要するレコードデータが含まれ、前記参照を要するレコードデータにもとづいて前記処理としての変換処理が前記結果データを生成する際に、前記参照を要するレコードデータに未収集のレコードデータが存在する場合であっても、前記変換処理の一部の個別処理の実行を可能とするレコードデータが収集されている場合は、全レコードデータの収集を待たずに、前記個別処理を先行して行うように、前記変換処理を複数の個別処理に分割して実行し、前記定義情報にもとづいて、収集したレコードデータの中の項目により前記個別処理を実行できるか否かを判断し、前記項目により実行できると判断される前記個別処理を先行して行うように、前記個別処理の実行順序を変えて前記変換処理を実行する。
【発明の効果】
【００１０】
１側面によれば、レコードデータの処理の開始時期を早めることができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理装置の機能の一例を示す図である。
【図２】第２の実施の形態に係る情報処理装置の機能の一例を示す図である。
【図３】第３の実施の形態のシステム構成例を示す図である。
【図４】第３の実施の形態に用いるサーバのハードウェアの一構成例を示す図である。
【図５】第３の実施の形態に用いるサーバの機能の一例を示すブロック図である。
【図６】ＥＴＬの定義画面の一例を示す図である。
【図７】結合処理対象のデータの一例を示す図である。
【図８】ＥＴＬの動作の一例を示す図である。
【図９】仮想データの一例を示す図である。
【図１０】結果データの一例を示す図である。
【図１１】ＥＴＬの定義画面の一例を示す図である。
【図１２】結合処理対象のデータの一例を示す図である。
【図１３】ＥＴＬの動作の一例を示す図である。
【図１４】結果データの一例を示す図である。
【図１５】ＥＴＬの動作の一例を示す図である。
【図１６】結果データの一例を示す図である。
【図１７】結合処理対象のデータの一例を示す図である。
【図１８】ＥＴＬの動作の一例を示す図である。
【図１９】仮想データの一例を示す図である。
【図２０】結果データの一例を示す図である。
【図２１】全体フロー制御部の動作を示すフローチャートである。
【図２２】変換リストと入力ソースリストの一例を示す図である。
【図２３】変換リストと入力ソースリストの一例を示す図である。
【図２４】プロセス／スレッド制御部の動作を示すフローチャートである。
【図２５】変換順序最適化処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の機能の一例を示す図である。情報処理装置１は、収集手段１ａと、処理手段１ｂを備える。
【００１３】
収集手段１ａは、複数の情報源からレコードデータを収集する。処理手段１ｂは、収集したレコードデータに対する処理を実行する際に、該処理についての定義情報を参照して、該処理が単一のレコードデータから結果データを生成可能である場合は、複数の情報源からの収集対象の全レコードデータの到着を待たずに該処理を開始する。
【００１４】
また、処理手段１ｂは、該処理が結果データを生成する際に、複数のレコードデータの参照を要し、かつ参照を要するレコードデータに未収集のレコードデータが存在する場合は、複数の情報源からの収集対象の全レコードデータの収集完了に応じて該処理を開始する。
【００１５】
図１の例において、収集手段１ａは、レコードデータｒｄ１、ｒｄ２、ｒｄ３を収集対象とし、処理手段１ｂは、定義情報にもとづいて、レコードデータｒｄ１、ｒｄ２、ｒｄ３に対して所定処理を行うものとする。
【００１６】
ここで、状態Ｓｔ１は、該所定処理が単一のレコードデータから結果データを生成可能な場合を示している。この場合、処理手段１ｂは、例えば、レコードデータｒｄ１が収集されれば、他のレコードデータｒｄ２、ｒｄ３の到着を待たずに、該所定処理を実行する。
【００１７】
また、状態Ｓｔ２では、該所定処理が結果データを生成する際に、複数のレコードデータの参照を要し、かつ参照を要するレコードデータに未収集のレコードデータが存在する場合を示している。この場合、処理手段１ｂは、例えば、レコードデータｒｄ１、ｒｄ２、ｒｄ３の参照を要し、かつレコードデータｒｄ３が未収集ならば、全レコードデータｒｄ１、ｒｄ２、ｒｄ３の収集が完了すると、該所定処理を実行する。
【００１８】
さらに、状態Ｓｔ３では、該所定処理において参照を要するレコードデータの収集が完了している場合を示している。この場合、処理手段１ｂは、例えば、参照を要するレコードデータｒｄ１、ｒｄ２の収集が完了しているならば、全レコードデータｒｄ１、ｒｄ２、ｒｄ３の到着を待たずに該所定処理を開始する。
【００１９】
このように、情報処理装置１では、データ処理内容が定義された定義情報を参照して、データ処理の一部の処理の実行可能なデータが収集されていれば、全データの収集を待たずに、該処理を先行して行うので、データ処理の開始時期を早めることができる。
【００２０】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態では、レコードデータの一部の処理の実行可能なデータが収集されていれば、全レコードデータの収集を待たずに、該処理を先行して行うように、レコードデータの処理を複数に分けて実行するものである。なお、以降の説明では、レコードデータは単にデータと呼ぶ。
【００２１】
図２は、第２の実施の形態に係る情報処理装置の機能の一例を示す図である。情報処理装置１−１は、データ収集手段１Ａ、データ変換処理手段１Ｂおよび管理手段１Ｃを備える。データ収集手段１Ａは、図１の収集手段１ａの機能を有し、データ変換処理手段１Ｂは、図１の処理手段１ｂの機能を有する。
【００２２】
データ収集手段１Ａは、複数の情報源からデータを収集する。データ変換処理手段１Ｂは、収集されるデータに対し、データ変換処理の一部の個別処理の実行が可能なデータが収集されていれば、全データの収集を待たずに、個別処理を先行して行うように、データ変換処理を複数の個別処理に分割して実行する。管理手段１Ｃは、データ変換処理を行う際に要する項目が定義された定義情報を管理する。
【００２３】
図２の例において、データｄ１〜ｄ３が収集されるものとし、データｄ１、ｄ２、ｄ３の順に早く収集されるものとする（データｄ１が最も早く、データｄ３が最も遅く収集される）。
【００２４】
この場合、従来のデータ変換処理機能２００では、すべてのデータｄ１、ｄ２、ｄ３が収集済となることを待ってからデータ変換処理を行う。このため、最も遅いデータｄ３が収集済となるまで、データ変換処理を実行できない。
【００２５】
ここで、データ変換処理は、個別処理１Ｂ−１、１Ｂ−２に分けることができ、データｄ１、ｄ２に対しては個別処理１Ｂ−１を実行可能であり、個別処理１Ｂ−１の結果とデータｄ３とで個別処理１Ｂ−２を実行可能であるとする。
【００２６】
このような場合、情報処理装置１−１のデータ変換処理手段１Ｂでは、データ変換処理を個別処理１Ｂ−１、１Ｂ−２に分割し、データｄ１、ｄ２には個別処理１Ｂ−１を先行して実行し、個別処理１Ｂ−１の結果とデータｄ３とに対しては、後続の個別処理１Ｂ−２を実行する。
【００２７】
このように、情報処理装置１−１では、データ変換処理の一部の処理の実行可能なデータが収集されていれば、全データの収集を待たずに、該処理を先行して行うように、データ変換処理を複数に分けて実行する。これにより、データの変換処理の開始時期を早めることができる。
【００２８】
また、データ変換処理手段１Ｂは、管理手段１Ｃで管理される定義情報にもとづいて、収集したデータの中の項目の有無を判断し、項目を含むデータに対する個別処理を先行して行うように、個別処理の実行順序を適応的に変えてデータ変換処理を実行する。これにより、データ変換処理をより高速化することができる。
【００２９】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、複数の連携先システムからジャーナルデータとマスタデータを収集し、収集したデータに対して、上述のようなデータ変換処理を行うものである。
【００３０】
ここで、データ変換処理は、従来では主に夜間バッチ業務において行われていたが、小売り店舗（コンビニエンスストアやスーパーマーケット）等のオンライン化に伴う連携先システムの増加により、近年では日中時間帯において複数回行われるようになってきている。
【００３１】
しかし、各連携先システムから収集するデータは、到着するタイミングがバラバラであり、変換対象のデータが完全に揃ってからデータ結合などの処理を行っていると、処理開始に時間を要してしまう。
【００３２】
このため、第３の実施の形態では、データの収集状況やデータの内容等に応じて、データ変換処理を複数に分割した個別処理の回数および個別処理の実行順番を動的に変更して、ＥＴＬのデータ変換処理を高速化する。
【００３３】
これにより、データ変換処理の開始時期が早まり、開始時期が早まることにより、出力結果を得られる時間も早まるので、処理効率の向上を図ることが可能になる。
図３は、第３の実施の形態のシステム構成例を示す図である。ＥＴＬシステム１０−１は、サーバ１０、連携先システム２０−１〜２０−ｎ、連携先システム２０ａおよびクライアント装置３０を備える。
【００３４】
サーバ１０は、データベース１０ａを備えている。またサーバ１０に対して、連携先システム２０−１〜２０−ｎ、連携先システム２０ａおよびクライアント装置３０が接続している。
【００３５】
サーバ１０は、連携先システム２０−１〜２０−ｎからジャーナルデータおよびマスタデータを収集（PUSH）または抽出（PULL）する処理（Ｅ：Extract）を行う。
そして、サーバ１０は、得られたジャーナルデータおよびマスタデータに対して、所定のデータ変換処理（Ｔ：Transform）を行い、処理結果をデータベース１０ａに格納し、連携先システム２０ａに配布する処理（Ｌ：Load）を行う。また、データベース１０ａに格納されたデータは、クライアント装置３０に送られて、ユーザによってデータ活用される。
【００３６】
図４は、第３の実施の形態に用いるサーバのハードウェアの一構成例を示す図である。サーバ１０は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１の機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３７】
メモリ１０２は、サーバ１０の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３８】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３９】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、サーバ１０の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置を使用することもできる。
【００４０】
グラフィック処理装置１０４には、モニタ２０１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２０１の画面に表示させる。モニタ２０１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００４１】
入力インタフェース１０５には、キーボード２０２とマウス２０３とが接続されている。入力インタフェース１０５は、キーボード２０２やマウス２０３から送られてくる信号をプロセッサ１０１に送信する。なおマウス２０３はポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４２】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２０４に記録されたデータの読み取りを行う。光ディスク２０４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２０４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（Re Writable）などがある。
【００４３】
機器接続インタフェース１０７は、サーバ１０に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２０５やメモリリーダライタ２０６を接続することができる。メモリ装置２０５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２０６は、メモリカード２０７へのデータの書き込み、またはメモリカード２０７からのデータの読み出しを行う装置である。メモリカード２０７は、カード型の記録媒体である。
【００４４】
ネットワークインタフェース１０８は、ネットワーク１１０に接続されている。ネットワークインタフェース１０８は、ネットワーク１１０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４５】
以上のようなハードウェア構成によって、第３の実施の形態の処理機能を実現することができる。なお、第１、第２の実施の形態に示した装置も、図４に示したサーバ１０と同様のハードウェアにより実現することができる。
【００４６】
サーバ１０は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。サーバ１０に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、サーバ１０に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またサーバ１０に実行させるプログラムを、光ディスク２０４、メモリ装置２０５、メモリカード２０７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４７】
図５は、第３の実施の形態に用いるサーバの機能の一例を示すブロック図である。ＥＴＬシステム１０−２は、サーバ１０、連携先システム２０−１〜２０−３、連携先システム２０ａ、２０ｂおよびクライアント装置３０を備える。またサーバ１０に対して、連携先システム２０−１〜２０−３、連携先システム２０ａ、２０ｂおよびクライアント装置３０が接続している。連携先システム２０−１〜２０−３、２０ａ、２０ｂはそれぞれ、データベース２１〜２５を備えている。
【００４８】
サーバ１０は、データ収集処理部１１、データ変換処理部１２、データ配布処理部１３、定義管理部１４、全体フロー制御部１５およびプロセス／スレッド制御部１６を備える。
【００４９】
また、データ変換処理部１２は、データ結合処理部１２ａと、データ加工処理部１２ｂを含む。なお、各ブロックは、個々の機能を実現するためのハードウェア回路（circuit）で構成することも可能である。
【００５０】
データ収集処理部１１は、連携先システム２０−１〜２０−３のデータベース２１〜２３で格納されているデータ（またはファイル）を収集する。
データ結合処理部１２ａは、データ収集処理部１１で収集された（収集途中、収集済のいずれであってもよい）複数のデータのデータ結合処理を行う。
【００５１】
また、データ変換処理として、データ結合処理のみを行う場合には、データ結合処理部１２ａは、データ結合結果をデータ配布処理部１３へ出力する。さらに、データ変換処理として、データ結合の後にデータ加工処理を行う場合には、データ結合処理部１２ａは、データ結合結果をデータ加工処理部１２ｂへ出力する。
【００５２】
データ加工処理部１２ｂは、データ結合処理部１２ａによってデータ結合されたデータに対して、所定の加工処理（演算、集計、ソートなど）を行う。
また、実行したデータ加工処理でデータ変換処理を完了する際は、データ加工処理部１２ｂは、データ加工結果をデータ配布処理部１３へ出力する。
【００５３】
または、データ加工処理後にさらにデータ結合処理を行う場合には、データ加工処理部１２ｂは、データ加工結果をデータ結合処理部１２ａへ出力する。この場合、データ結合処理部１２ａは、データ加工処理部１２ｂにより加工処理されたデータと、データ収集処理部１１で収集された（収集途中、収集済のいずれであってもよい）データとのデータ結合処理を行う。
【００５４】
データ配布処理部１３は、データ変換処理部１２から出力されたデータ変換処理後のデータを内部のデータベースに格納し、連携先システム２０ａ、２０ｂに配布する。またはユーザの要求に応じてクライアント装置３０へ送信する。
【００５５】
定義管理部１４は、クライアント装置３０から指示された定義でメタデータを生成して管理する（メタデータの具体例については図１４、図１７で後述する）。
全体フロー制御部１５は、ＥＴＬの全体フローを制御する。例えば、フローの動的組み立て、またはデータの収集状況の監視、データ変換処理に用いるリストの作成、定義の解析などを行う。
【００５６】
プロセス／スレッド制御部１６は、データ収集処理、データ変換処理およびデータ配布処理が行われる際のプロセス／スレッドを制御する。例えば、プロセス／スレッド処理の割り込み、データ結合処理の複数回実行の有無および回数の設定、データ加工処理の実行順序の変更などの設定制御を動的に行う。
【００５７】
次にサーバ１０におけるＥＴＬの動作について詳しく説明する。なお以降の説明では、１つのジャーナルデータと、２つのマスタデータとの入力ソースがあるものとする。まず、データ加工処理は行わず、複数回に分割したデータ結合処理のみで結果データを出力する場合の動作について説明する。
【００５８】
図６は、ＥＴＬの定義画面の一例を示す図である。クライアント装置３０の画面３１ａは、１つのジャーナルデータと、２つのマスタデータとのデータ結合処理を定義するＧＵＩ（Graphical User Interface）を示している。
【００５９】
アイコンｉ１−１は、ジャーナルデータを表し、アイコンｉ１−２、ｉ１−３それぞれは、マスタデータを表している。アイコンｉ２は、データ結合処理を表し、アイコンｉ５は、データロード（格納、配布）処理を表している。
【００６０】
図７は、結合処理対象のデータの一例を示す図である。ジャーナルデータｊ１は、「商品コード」、「注文数」および「店舗」の項目を有している。図７の例では、ジャーナルデータｊ１は、（商品コード、注文数、店舗）＝（A0001、20、東京）、（A0002、4、大阪）、（B1001、8、大阪）、（B1002、5、大阪）の情報を含む。
【００６１】
また、マスタデータｍ１、ｍ２は、「商品コード」、「商品名」および「値段」の項目を有している。図７の例では、マスタデータｍ１は、（商品コード、商品名、値段）＝（A0001、牛乳、200）、（A0002、コーヒー、120）、（A0003、ジュース、120）の情報を含む。さらに、マスタデータｍ２は、（商品コード、商品名、値段）＝（B1001、パン、80）、（B1002、弁当、400）、（B1003、ラーメン、500）の情報を含む。
【００６２】
図８は、ＥＴＬの動作の一例を示す図である。結合対象のデータに含まれる商品コードをキーにして、データ結合処理後のデータから商品名を取得する例を示している。
〔ステップＳ１〕データ収集処理部１１は、収集すべきデータの到着状況を認識する。図８の例では、データ収集処理部１１は、ジャーナルデータｊ１は収集中、マスタデータｍ１は未到着、マスタデータｍ２は収集済と認識する。
【００６３】
〔ステップＳ２〕プロセス／スレッド制御部１６は、未到着のデータが存在すれば、データ結合処理を複数回に分割設定して、データ結合処理部１２ａに指示する。この例では、３つのデータの内、１つのマスタデータｍ１が未到着になっており、ジャーナルデータｊ１とマスタデータｍ２とでデータ結合を先行して実施できるので、プロセス／スレッド制御部１６は、データ結合処理を２回に分ける。
【００６４】
〔ステップＳ３〕データ結合処理部１２ａは、１回目のデータ結合処理として、収集済のデータと、収集中のデータとを結合対象データにして結合処理を行う。結合した結果は、仮想データ（中間データ）として内部メモリに保存する。
【００６５】
なお、データ結合処理部１２ａは、収集中のデータに関しては、パイプライン処理によるデータ読み込みを行う。収集中のデータをパイプライン処理によって読み込みながら、収集済のデータと読み込んだ先からデータ結合していくことで、データ結合処理の高速化が図られる。
【００６６】
図８の例では、データ結合処理部１２ａは、収集中のジャーナルデータｊ１をパイプライン処理によって読み込みながら、収集済のマスタデータｍ２と結合して仮想データｖ１を生成し、仮想データｖ１を内部メモリに保存する。
【００６７】
図９は、仮想データの一例を示す図である。仮想データｖ１は、「商品コード」、「商品名」および「注文数」の項目を有する。仮想データｖ１は、データ変換処理の途中のデータであり、図９の例では、仮想データｖ１は、（商品コード、商品名、注文数）＝（A0001、−、20）、（A0002、−、4）、（B1001、パン、8）、（B1002、弁当、5）の情報を含んでいる。なお、“−”が示す空き部分は、マスタデータｍ１が未到着のため、該当する項目の情報が未取得であることを表している。
【００６８】
〔ステップＳ４〕データ結合処理部１２ａは、パイプライン処理によって読み込まれる一方のデータと、他方のデータとのデータ結合が行われて、結合結果（仮想データ）の出力が完了するまで、または未到着のデータが収集済になるまで、データ結合処理を待ち合わせる。図８の例では、データ結合処理部１２ａは、仮想データｖ１の出力が完了するか、またはマスタデータｍ１が収集済になるまで、データ結合処理を待機することになる。
【００６９】
〔ステップＳ５〕データ結合処理部１２ａは、仮想データの出力状況と、仮想データに結合すべき他データの収集状況とに応じて、パイプライン処理によるデータ読み込みを行う対象データを変更して、仮想データと、他データとの２回目のデータ結合処理を行う。
【００７０】
図８の例では、データ結合処理部１２ａは、仮想データｖ１の出力状況と、マスタデータｍ１の収集状況とに応じて、パイプライン処理によるデータ読み込みを行う対象データを変更して、仮想データｖ１と、マスタデータｍ１とのデータ結合処理を行う。
【００７１】
具体的には、仮想データｖ１の出力が完了し、かつマスタデータｍ１が収集中の場合は、データ結合処理部１２ａは、マスタデータｍ１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ１とマスタデータｍ１とを結合する。
【００７２】
または、仮想データｖ１が出力中であり、かつマスタデータｍ１が収集済になった場合は、データ結合処理部１２ａは、収集中のジャーナルデータｊ１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ１とマスタデータｍ１とを結合する。
【００７３】
〔ステップＳ６〕データ配布処理部１３は、データ結合処理部１２ａから出力された結果データｒ１−１を配布処理する。
図１０は、結果データの一例を示す図である。結果データｒ１−１は、「商品コード」、「商品名」および「注文数」の項目を有する。結果データｒ１−１は、データ変換処理完了後のデータであり、図１０の例では、（商品コード、商品名、注文数）＝（A0001、牛乳、20）、（A0002、コーヒー、4）、（B1001、パン、8）、（B1002、弁当、5）の情報が含まれている。
【００７４】
ここで、従来では、ジャーナルデータｊ１、マスタデータｍ１、マスタデータｍ２がすべて収集し終わってから、１回のみのデータ結合処理を実施していた。これに対し、サーバ１０では、データ結合処理を複数回に分け、前倒しで結合できるデータから結合処理していく。
【００７５】
すなわち、上記の例では、マスタデータｍ１が未到着の場合、サーバ１０では、データ結合を２回に分け、１回目のデータ結合では、すでに到着している、ジャーナルデータｊ１とマスタデータｍ２を結合する。そして、２回目のデータ結合では、１回目のデータ結合の結果にマスタデータｍ１を結合する。
【００７６】
また、サーバ１０では、一方のデータが収集済であれば、他方のデータが収集中であっても、収集中の他方のデータをパイプライン処理によって読み込みながら、収集済のデータと結合する。
【００７７】
このように、データの収集状況に合わせて、データ結合処理を複数回に分けることで、処理の開始を早くすることが可能になる。また、データの収集状況に応じて読み込み方法（パイプライン処理）を変更するので、データ結合処理全体の速度をより早めることが可能になる。
【００７８】
次に複数回に分割したデータ結合処理を完了した後に、データ加工処理を行って、結果データを出力する場合の動作について説明する。
図１１は、ＥＴＬの定義画面の一例を示す図である。クライアント装置３０の画面３１ｂは、１つのジャーナルデータと、２つのマスタデータとのデータ結合処理と、データ結合処理後のデータ加工処理（演算および集計）とを定義するためのＧＵＩを示している。
【００７９】
図６で上述した画面に対してアイコンｉ３、ｉ４がさらに追加されている。アイコンｉ３は、データ加工処理としての演算処理を表し、アイコンｉ５は、データ加工処理としての集計処理を表している。その他のアイコン表記は図６と同じである。
【００８０】
図１２は、結合処理対象のデータの一例を示す図である。ジャーナルデータｊ１−１は、「商品コード」、「注文数」および「値段」の項目を有している。図１２の例では、ジャーナルデータｊ１−１は、（商品コード、注文数、値段）＝（A0001、20、200）、（A0002、4、120）、（B1001、8、80）、（B1002、5、400）の情報を含む。
【００８１】
また、マスタデータｍ１−１、ｍ２−１は、「商品コード」、「商品名」および「店舗」の項目を有している。図１２の例では、マスタデータｍ１−１は、（商品コード、商品名、店舗）＝（A0001、牛乳、東京）、（A0002、コーヒー、大阪）、（A1003、ジュース、大阪）の情報を含む。さらに、マスタデータｍ２−１は、（商品コード、商品名、店舗）＝（B0001、パン、大阪）、（B0002、弁当、大阪）、（B1003、ラーメン、東京）の情報を含む。
【００８２】
図１３は、ＥＴＬの動作の一例を示す図である。商品コードをキーに商品名、店舗を取得し、合計額と店舗毎の集計を出力する例を示している。
〔ステップＳ１１〕データ収集処理部１１は、データ収集を行い、ジャーナルデータｊ１−１は収集中、マスタデータｍ１−１は未到着、マスタデータｍ２−１は収集済と認識する。
【００８３】
〔ステップＳ１２〕プロセス／スレッド制御部１６は、３つのデータの内、マスタデータｍ１−１が未到着なので、ジャーナルデータｊ１−１とマスタデータｍ２−１とでデータ結合を先行して実施できるように、データ結合処理を２回に分けることをデータ結合処理部１２ａに指示する。
【００８４】
〔ステップＳ１３〕データ結合処理部１２ａは、収集済のマスタデータｍ２−１と、収集中のジャーナルデータｊ１−１とのデータ結合処理を行い、仮想データｖ２−１を生成する。なお、収集中のジャーナルデータｊ１−１は、パイプライン処理によって読み込まれてデータ結合される。
【００８５】
〔ステップＳ１４〕データ結合処理部１２ａは、仮想データｖ２−１の出力が完了するか、マスタデータｍ１−１が収集済になるまで処理を待ち合わせる。
〔ステップＳ１５〕データ結合処理部１２ａは、仮想データｖ２−１の出力が完了し、かつマスタデータｍ１−１が収集中の場合は、データ結合処理部１２ａは、マスタデータｍ１−１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ２−１とマスタデータｍ１−１とを結合する。
【００８６】
または、仮想データｖ２−１が出力中であり、かつマスタデータｍ１−１が収集済になった場合は、データ結合処理部１２ａは、収集中のジャーナルデータｊ１−１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ２−１とマスタデータｍ１−１とを結合する。
【００８７】
〔ステップＳ１６〕データ加工処理部１２ｂは、データ結合処理部１２ａによって２回目にデータ結合された結果である仮想データｖ２−２を受信し、演算処理として、仮想データｖ２−２に対して合計額の算出を行う。
【００８８】
〔ステップＳ１７〕データ加工処理部１２ｂは、仮想データｖ２−２に演算処理を行った結果に対して、さらに集計処理として、店舗毎の集計を行う。
〔ステップＳ１８〕データ配布処理部１３は、データ加工処理部１２ｂから出力された結果データｒ１−２を配布処理する。
【００８９】
図１４は、結果データの一例を示す図である。結果データｒ１−２は、「商品コード」、「商品名」、「注文数」、「値段」、「合計額」、「店舗」および「集計」の項目を有する。
【００９０】
結果データｒ１−２は、図１４の例では、（商品コード、商品名、注文数、値段、合計額、店舗）＝（A0001、牛乳、20、200、4000、東京）、（A0002、コーヒー、4、120、480、大阪）、（B1001、パン、8、80、640、大阪）、（B1002、弁当、5、400、2000、大阪）の情報が含まれている。また、（店舗、集計）＝（東京、4000）、（大阪、3120）となって、店舗毎の集計金額が含まれている。
【００９１】
次にデータ結合処理を複数回に分割し、さらにデータ加工処理を行う際に、定義されたメタデータの内容にもとづき、データ加工処理の実行順番を動的に変更する場合の動作について説明する。まず、メタデータの内容にもとづいて、実行すべきデータ加工処理が、すべてのデータ結合処理を完了した後に行われる場合について説明する。
【００９２】
図１５は、ＥＴＬの動作の一例を示す図である。データ結合した後、合計額でソートする例を示している。なお、入力ソースは、図７と同じ、ジャーナルデータｊ１、マスタデータｍ１、ｍ２とする。
【００９３】
〔ステップＳ２１〕データ収集処理部１１は、収集すべきデータの到着状況を認識する。図１５の例では、データ収集処理部１１は、ジャーナルデータｊ１は収集中、マスタデータｍ１は未到着、マスタデータｍ２は収集済と認識する。
【００９４】
〔ステップＳ２２〕プロセス／スレッド制御部１６は、未到着のデータが存在すれば、データ結合処理を複数回に分割設定し、データ結合処理の回数をデータ結合処理部１２ａに指示する。
【００９５】
図１５の例では、３つのデータの内、１つのマスタデータｍ１が未到着なため、ジャーナルデータｊ１とマスタデータｍ２とでデータ結合を先行して実施できるように、データ結合処理を２回に分けることをデータ結合処理部１２ａに指示する。
【００９６】
〔ステップＳ２３〕プロセス／スレッド制御部１６は、定義管理部１４で管理されているメタデータを参照し、到着したデータに対して、実行すべきデータ加工処理（演算、集計、ソート等）があるか否かを判断する。
【００９７】
プロセス／スレッド制御部１６は、実行すべきデータ加工処理がある場合には、そのデータ加工処理を、複数回に分割したデータ結合処理の途中で実行できるか否かを、メタデータの内容にもとづき判断する。
【００９８】
プロセス／スレッド制御部１６は、複数回のデータ結合処理の途中でデータ加工処理を実行可能と判断した場合、複数回のデータ結合処理の途中に該データ加工処理を挿入することを設定する。この場合、データ加工処理を実行するための情報が揃うデータ結合処理後に、該データ加工処理が実行されるように挿入する。
【００９９】
また、プロセス／スレッド制御部１６は、複数回のデータ結合処理の途中でのデータ加工処理を実行不可と判断した場合は、データ結合処理がすべて終了した後に、該データ加工処理を実行するように設定する。
【０１００】
ステップＳ２３について図１５の例で説明すると、定義管理部１４には、「ソート」を定義するメタデータｍｄ０が管理されている。
プロセス／スレッド制御部１６は、定義管理部１４によって管理されているメタデータｍｄ０を参照して、データ変換処理として「ソート」を実行することを認識する。また、メタデータｍｄ０は、合計額による「ソート」を定義している。
【０１０１】
このため、プロセス／スレッド制御部１６は、合計額でのソートは、すべてのデータが揃わないと実行できないことを認識して、ジャーナルデータｊ１、マスタデータｍ１、ｍ２のデータ結合処理の後で、データ加工処理（ソート）を実行することを認識する。
【０１０２】
〔ステップＳ２４〕データ結合処理部１２ａは、収集済のマスタデータｍ２と、収集中のジャーナルデータｊ１とのデータ結合処理を行い、仮想データｖ１−１を生成する。なお、ジャーナルデータｊ１は、パイプライン処理によって読み込まれてデータ結合される。
【０１０３】
〔ステップＳ２５〕データ結合処理部１２ａは、仮想データｖ１−１の出力が完了するか、マスタデータｍ１が収集済になるまで処理を待ち合わせる。
〔ステップＳ２６〕データ結合処理部１２ａは、仮想データｖ１−１が出力完了し、かつマスタデータｍ１が収集中の場合は、データ結合処理部１２ａは、マスタデータｍ１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ１−１とマスタデータｍ１とを結合する。
【０１０４】
または、仮想データｖ１−１が出力中であり、かつマスタデータｍ１が収集済になった場合は、データ結合処理部１２ａは、収集中のジャーナルデータｊ１に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ１−１とマスタデータｍ１とを結合する。
【０１０５】
〔ステップＳ２７〕データ加工処理部１２ｂは、データ結合処理部１２ａによって２回目にデータ結合された結果である仮想データｖ１−２を受信し、演算処理として、合計額によるソートを行う。
【０１０６】
〔ステップＳ２８〕データ配布処理部１３は、データ加工処理部１２ｂから出力された結果データｒ２−１を配布処理する。
図１６は、結果データの一例を示す図である。結果データｒ２−１は、「商品コード」、「商品名」、「注文数」および「合計額」の項目を有する。図１６の例では、結果データｒ２−１は、（商品コード、商品名、注文数、合計額）＝（A0002、コーヒー、4、480）、（B1001、パン、8、640）、（B1002、弁当、5、2000）、（A0001、牛乳、20、4000）の情報が含まれ、合計額順にソートされている。
【０１０７】
次に、メタデータの内容にもとづき、実行すべきデータ加工処理を、データ結合処理の途中で実行する場合について説明する。
図１７は、結合処理対象のデータの一例を示す図である。ジャーナルデータｊ１−２は、「商品コード」と「注文数」の項目を有している。図１７の例では、ジャーナルデータｊ１−２は、（商品コード、注文数）＝（A0001、8）、（A0002、4）、（A0004、12）の情報を含む。
【０１０８】
また、マスタデータｍ１−２は、「商品コード」、「配送日」および「出荷店」の項目を有している。図１７の例では、マスタデータｍ１−２は、（商品コード、配送日、出荷店）＝（A0001、04/01、大阪）、（A0002、04/03、東京）、（A0003、04/01、大阪）、（A0004、04/01、大阪）の情報を含む。
【０１０９】
さらに、マスタデータｍ２−２は、（商品コード、商品名、値段）＝（A0001、牛乳、200）、（A0002、コーヒー、150）、（A0003、パン、200）、（A0004、弁当、400）の情報を含む。
【０１１０】
図１８は、ＥＴＬの動作の一例を示す図である。商品コードをキーに商品名、出荷店を取得し、合計額と出荷店毎の集計を出力する例を示している。
〔ステップＳ３１〕データ収集処理部１１は、収集すべきデータの到着状況を認識する。図１８の例では、データ収集処理部１１は、ジャーナルデータｊ１−２は収集中、マスタデータｍ１−２は未到着、マスタデータｍ２−２は収集済と認識する。
【０１１１】
〔ステップＳ３２〕プロセス／スレッド制御部１６は、未到着のデータが存在すれば、データ結合処理を複数回に分割設定する。図１８の例では、３つのデータの内、１つのマスタデータｍ１−２が未到着なため、ジャーナルデータｊ１−２とマスタデータｍ２−２とでデータ結合を先行して実施できるように、データ結合処理を２回に分けることをデータ結合処理部１２ａに指示する。
【０１１２】
〔ステップＳ３３〕プロセス／スレッド制御部１６は、定義管理部１４で管理されているメタデータを参照し、収集したデータに対して、実行すべきデータ加工処理（演算、集計、ソート等）があるか否かを判断する。
【０１１３】
プロセス／スレッド制御部１６は、実行すべきデータ加工処理がある場合には、そのデータ加工処理を、複数回に分割したデータ結合処理の途中で実行できるか否かを、メタデータの内容にもとづき判断する。
【０１１４】
プロセス／スレッド制御部１６は、複数回のデータ結合処理の途中でデータ加工処理を実行可能と判断した場合、複数回のデータ結合処理の途中に該データ加工処理を挿入することを設定する。この場合、データ加工処理を実行するための情報が揃うデータ結合処理後に、該データ変換処理が実行されるように挿入することになる。
【０１１５】
また、プロセス／スレッド制御部１６は、複数回のデータ結合処理の途中でのデータ加工処理を実行不可と判断した場合は、データ結合処理がすべて終了した後に、該データ加工処理を実行するように設定する。
【０１１６】
ステップＳ３３について図１８の例で説明すると、定義管理部１４には、「演算」を定義するメタデータｍｄ１と、「集計」を定義するメタデータｍｄ２が管理されている。
プロセス／スレッド制御部１６は、定義管理部１４によって管理されているメタデータｍｄ１、ｍｄ２を参照して、データ加工処理として「演算」および「集計」を実行することを認識する。
【０１１７】
また、メタデータｍｄ１は、注文数と値段を乗算した合計額（＄合計額＝＄注文数×＄値段）を「演算」と定義している。メタデータｍｄ２は、出荷店、合計額から求める集計キー（集計キー＝＄出荷店、合計額）を「集計」と定義している。
【０１１８】
ここで、メタデータｍｄ１から“合計額”を算出するのに要する項目は、“注文数”と“値段”であることがわかる。この場合、プロセス／スレッド制御部１６は、収集中のジャーナルデータｊ１−２には“注文数”の項目が存在し、収集済のマスタデータｍ２−２には“値段”の項目が存在することを認識する。
【０１１９】
このため、プロセス／スレッド制御部１６は、マスタデータｍ１−２の到着を待たずに、ジャーナルデータｊ１−２と、マスタデータｍ２−２との１回目のデータ結合処理の後で、データ加工処理（演算）を実行可能であることを認識する。
【０１２０】
一方、メタデータｍｄ２から“集計キー”を算出するのに要する項目は、“出荷店”と“合計額”であることがわかる。この場合、プロセス／スレッド制御部１６は、“出荷店”の項目はマスタデータｍ１−２に存在するが、マスタデータｍ１−２は未到着であることを認識する。
【０１２１】
このため、プロセス／スレッド制御部１６は、マスタデータｍ１−２の到着を待ってデータ変換処理（集計）を行うこと、すなわち、マスタデータｍ１−２の到着後に行われる２回目のデータ結合処理の後に、データ加工処理（集計）を実行することを認識する。
【０１２２】
〔ステップＳ３４〕データ結合処理部１２ａは、１回目のデータ結合処理として、収集済のマスタデータｍ２−２と、収集中のジャーナルデータｊ１−２との結合処理を行う。
なお、データ結合処理部１２ａは、収集中のジャーナルデータｊ１−２に関しては、パイプライン処理によるデータ読み込みを行い、読み込んだ順からマスタデータｍ２−２と結合する。
【０１２３】
〔ステップＳ３５〕データ加工処理部１２ｂは、１回目のデータ結合処理で得られる結果に対して、メタデータｍｄ１で定義される演算の処理を実行して、仮想データｖ３を生成し、内部メモリに格納する。
【０１２４】
図１９は、仮想データの一例を示す図である。仮想データｖ３は、「商品コード」、「商品名」、「注文数」、「値段」、「合計額」、「配送日」および「出荷店」の項目を有する。
【０１２５】
仮想データｖ３は、データ変換処理の途中のデータであり、図１９の例では、（商品コード、商品名、注文数、値段、合計額、配送日、出荷店）＝（A0001、牛乳、8、200、1600、−、−）、（A0002、コーヒー、4、150、600、−、−）、（A0004、弁当、12、400、4800、−、−）の情報が含まれている。なお、“−”が示す空き部分は、マスタデータｍ１−２が未到着のため、該当する項目の情報が未取得であることを表している。
【０１２６】
〔ステップＳ３６〕データ結合処理部１２ａは、仮想データｖ３の出力が完了するか、マスタデータｍ１−２が収集済になるまで２回目のデータ結合処理を待ち合わせる。
〔ステップＳ３７〕データ結合処理部１２ａは、仮想データｖ３の出力状況と、マスタデータｍ１−２の収集状況とに応じて、パイプライン処理によるデータ読み込みを行う対象データを変更して、２回目のデータ結合処理として、仮想データｖ３と、マスタデータｍ１−２との結合を行う。
【０１２７】
具体的には、仮想データｖ３が出力完了し、かつマスタデータｍ１−２が収集中の場合は、データ結合処理部１２ａは、マスタデータｍ１−２に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ３とマスタデータｍ１−２とを結合する。
【０１２８】
または、仮想データｖ３が出力中であり、かつマスタデータｍ１−２が収集済の場合は、データ結合処理部１２ａは、収集中のジャーナルデータｊ１−２に対してパイプライン処理によるデータ読み込みを行って、仮想データｖ３とマスタデータｍ１−２とを結合する。
【０１２９】
〔ステップＳ３８〕データ加工処理部１２ｂは、２回目のデータ結合処理で得られる結果データに対して、メタデータｍｄ２で定義される集計の処理を実行して結果データを生成する。
【０１３０】
〔ステップＳ３９〕データ配布処理部１３は、データ加工処理部１２ｂから出力された結果データｒ２−２を配布処理する。
図２０は、結果データの一例を示す図である。結果データｒ２−２は、「商品コード」、「商品名」、「注文数」、「値段」、「合計額」、「配送日」、「出荷店」および「集計」の項目を有する。
【０１３１】
結果データｒ２−２は、図２０の例では、（商品コード、商品名、注文数、値段、合計額、配送日、出荷店）＝（A0002、コーヒー、4、150、600、04/03、東京）、（A0001、牛乳、8、200、1600、04/01、大阪）、（A0004、弁当、12、400、4800、04／01、大阪）の情報が含まれている。また、（出荷店、集計）＝（東京、600）、（大阪、6400）となって、店舗毎の集計金額が含まれている。
【０１３２】
以上説明したように、サーバ１０では、メタデータの定義にもとづいて、収集したデータの中の項目の有無を判断し、項目を含むデータに対する個別処理を先行して行うように、個別処理の実行順序を変えてデータ変換処理を実行する。これにより、データ変換処理の開始時期を早め、さらにデータ変換処理全体の処理速度を向上させることが可能になる。
【０１３３】
次に全体フロー制御部１５において、処理開始からプロセス／スレッド制御部１６を起動するまでの動作についてフローチャートを用いて説明する。
図２１は、全体フロー制御部の動作を示すフローチャートである。なお、全体フロー制御部１５の処理開始の契機は多様なパターンがあり、例えば、データを受信したタイミングで処理を開始、または、ある時刻になったら処理を開始するなどがある。さらには、外部からの実行指示により処理を開始してもよい。
【０１３４】
〔ステップＳ４１〕全体フロー制御部１５は、定義管理部１４から、データ結合対象のデータに関するメタデータを取得する。
〔ステップＳ４２〕全体フロー制御部１５は、取得したメタデータの内容にもとづき、変換種別（結合／演算／集計／・・・）を認識し、変換リスト（図２２、図２３で後述）を作成する。なお、全体フロー制御部１５では、変換リストの作成時に、変換リストに登録される情報から、その情報に該当する変換リストの項目を検索可能とする逆引き情報を作成しておいてもよい。
【０１３５】
〔ステップＳ４３〕全体フロー制御部１５は、データの入力状態の認識用に、入力ソースリストを作成する（図２２、図２３で後述）。
〔ステップＳ４４〕全体フロー制御部１５は、プロセス／スレッド制御部１６を起動する。
【０１３６】
図２２、図２３は、変換リストと入力ソースリストの一例を示す図である。変換リストＬ１は、「順番」、「変換種別」、「フラグ」および「ソース情報」の項目を有する。
「順番」は、処理の実行順番を示す。「変換種別」は、例えば、“結合”、“演算”、“集計”などの変換処理を示す。「フラグ」は、該当欄の変換処理が未処理なら“ＯＦＦ”、処理済なら“ＯＮ”を示す。「ソース情報」は、該当欄の変換処理で使用されるデータの種類を示す。
【０１３７】
入力ソースリストＬ２は、「ソース」と「状態」の項目を有する。「ソース」は、データの種類を示し、「状態」は、データの収集状態または処理状態を示す。
状態Ｓｔ１１において、入力ソースリストＬ２には、ジャーナルデータＪ１およびマスタデータＭ１、Ｍ２の「状態」が“未到着”であることが示されている。また、変換リストＬ１では、“結合”、“演算”、“集計”の順にデータ変換処理を行うことが示されている。
【０１３８】
“結合”のデータ変換処理では、ジャーナルデータＪ１およびマスタデータＭ１、Ｍ２を使用すること、“演算”のデータ変換処理では、ジャーナルデータＪ１と、マスタデータＭ２とを使用することが示されている。さらに、“集計”のデータ変換処理では、変換種別（演算）の結果を使用することが示されている。さらにまた、「フラグ」はすべて“ＯＦＦ”になっている。
【０１３９】
ここで、状態Ｓｔ１１で、いくつかの入力データが到着し、データ結合処理を２回行うことが決定されて、状態Ｓｔ１２に移行するものとする。
状態Ｓｔ１２において、入力ソースリストＬ２には、ジャーナルデータＪ１の「状態」は“収集中”、マスタデータＭ１の「状態」は“未到着”、マスタデータＭ２の「状態」は“収集済”となっている。
【０１４０】
また、変換リストＬ１では、“結合（１回目）”、“演算”、“結合（２回目）”および“集計”というように変換種別に変更が生じ、“結合（１回目）”、“演算”、“結合（２回目）”、“集計”の実行順にデータ変換処理を行うことが示されている。
【０１４１】
“結合（１回目）”のデータ変換処理では、ジャーナルデータＪ１と、マスタデータＭ２とを使用する。また、“結合（１回目）”の処理は終了しているため、該当の「フラグ」は“ＯＮ”になっている。
【０１４２】
“演算”のデータ変換処理では、ジャーナルデータＪ１と、マスタデータＭ２とを使用する。また、“演算”の処理は終了しているため、該当の「フラグ」は“ＯＮ”になっている。
【０１４３】
“結合（２回目）”のデータ変換処理では、変換種別（演算）の結果と、マスタデータＭ１とを使用する。“結合（２回目）”の処理は終了していないため、該当の「フラグ」は“ＯＦＦ”になっている。
【０１４４】
なお、“結合（２回目）”の処理が終了していないので、入力ソースリストＬ２中の仮想データＶの「状態」は、“処理中”になっている（２回目のデータ結合処理が完了すれば、“処理完了”に変更される）。
【０１４５】
“集計”のデータ変換処理では、変換種別（結合（２回目））の結果を使用する。“集計”の処理は終了していないため、該当の「フラグ」は“ＯＦＦ”になっている。
次にプロセス／スレッド制御部１６の動作についてフローチャートを用いて説明する。図２４は、プロセス／スレッド制御部の動作を示すフローチャートである。
【０１４６】
〔ステップＳ５１〕プロセス／スレッド制御部１６は、入力ソースリストＬ２を参照して、入力データの有無を認識する。入力データが有れば、処理がステップＳ５２へ進められ、入力データが無ければステップＳ５１の判断処理が繰り返される。
【０１４７】
〔ステップＳ５２〕プロセス／スレッド制御部１６は、入力データの数を認識する。入力データ数が２以下の場合は、処理がステップＳ５８へ進められ、入力データ数が３以上の場合は、処理がステップＳ５３へ進められる。
【０１４８】
〔ステップＳ５３〕プロセス／スレッド制御部１６は、未到着データの有無を認識する。未到着データが有れば、処理がステップＳ５４へ進められ、無ければステップＳ５８へ進められる。
【０１４９】
〔ステップＳ５４〕プロセス／スレッド制御部１６は、変換リストＬ１の編集を行う。例えば、プロセス／スレッド制御部１６は、入力データ数に応じて設定されるデータ結合処理の実行回数で、変換リストＬ１の変換種別（結合）の項目を分割する。
【０１５０】
〔ステップＳ５５〕プロセス／スレッド制御部１６は、変換順序最適化処理を行う（図２５で後述）。
〔ステップＳ５６〕プロセス／スレッド制御部１６は、入力ソースリストの編集を行う。例えば、プロセス／スレッド制御部１６は、仮想データに関する情報を入力ソースリストに追加する。
【０１５１】
〔ステップＳ５７〕プロセス／スレッド制御部１６は、残データ到着待ち用のプロセス／スレッド制御を起動する。
〔ステップＳ５８〕プロセス／スレッド制御部１６は、データ結合処理部１２ａとデータ加工処理部１２ｂを呼び出す。
【０１５２】
〔ステップＳ５９〕プロセス／スレッド制御部１６は、全データを処理したか否かを判断する。全データが処理された場合は、処理がステップＳ６０へ進められ、全データが処理されていない場合は、ステップＳ５９の判断処理が繰り返される。
【０１５３】
〔ステップＳ６０〕プロセス／スレッド制御部１６は、データ配布処理部１３を呼び出す。
図２５は、変換順序最適化処理の動作を示すフローチャートである。
【０１５４】
〔ステップＳ５５−１〕プロセス／スレッド制御部１６は、変換リストＬ１から、未処理のデータ変換処理を抽出する。
〔ステップＳ５５−２〕プロセス／スレッド制御部１６は、未処理のデータ変換処理を行うのに要するデータが存在しているか（揃っているか）否かを認識する。データが存在している場合は、処理がステップＳ５５−３へ進められ、存在していない場合は、ステップＳ５５−２の判断処理が繰り返される。
【０１５５】
〔ステップＳ５５−３〕プロセス／スレッド制御部１６は、データ変換処理の実行順番を入れ替える。
〔ステップＳ５５−４〕プロセス／スレッド制御部１６は、フラグをＯＮする。
【０１５６】
〔ステップＳ５５−５〕プロセス／スレッド制御部１６は、後続のデータ変換処理の存在の有無を認識する。後続のデータ変換処理が存在している場合は、処理がステップＳ５５−２へ戻り、存在していない場合は、処理を終了する。
【０１５７】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１５８】
１  情報処理装置
１ａ  収集手段
１ｂ  処理手段
ｒｄ１、ｒｄ２、ｒｄ３  レコードデータ
Ｓｔ１、Ｓｔ２、Ｓｔ３  状態
【図１】
0006708919.tif 000002
【図２】
0006708919.tif 000003
【図３】
0006708919.tif 000004
【図４】
0006708919.tif 000005
【図５】
0006708919.tif 000006
【図６】
0006708919.tif 000007
【図７】
0006708919.tif 000008
【図８】
0006708919.tif 000009
【図９】
0006708919.tif 000010
【図１０】
0006708919.tif 000011
【図１１】
0006708919.tif 000012
【図１２】
0006708919.tif 000013
【図１３】
0006708919.tif 000014
【図１４】
0006708919.tif 000015
【図１５】
0006708919.tif 000016
【図１６】
0006708919.tif 000017
【図１７】
0006708919.tif 000018
【図１８】
0006708919.tif 000019
【図１９】
0006708919.tif 000020
【図２０】
0006708919.tif 000021
【図２１】
0006708919.tif 000022
【図２２】
0006708919.tif 000023
【図２３】
0006708919.tif 000024
【図２４】
0006708919.tif 000025
【図２５】
0006708919.tif 000026