(57)【特許請求の範囲】
【請求項１】
コンピュータが、
処理内容および属性がそれぞれ定義された複数の処理と該複数の処理の処理順序が定義されたフロー定義を読み込み、
前記フロー定義で定義された処理を先頭から取り出して対象処理に設定し、該対象処理に対応する第１クエリと該対象処理の直後に処理される該対象処理と同一の処理型の後続処理に対応する第２クエリとを統合した統合クエリを生成し、該統合クエリを前記対象処理に対応する第１クエリとする処理を繰り返す、処理を実行する
ことを特徴とするクエリ統合方法。
【請求項２】
前記コンピュータが、
前記統合クエリを生成する処理において、前記第２クエリと前記第１クエリとが処理順序の変更により演算結果が変化しない演算型である場合に、前記第１クエリと前記第２クエリの対応する句の要素を結合して前記統合クエリを生成し、前記第２クエリと前記第１クエリとが処理順序の変更により演算結果が変化する演算型である場合に、前記第１クエリを前記第２クエリにサブクエリとして組み込んで前記統合クエリを生成する
ことを特徴とする請求項１に記載のクエリ統合方法。
【請求項３】
コンピュータに、
処理内容および属性がそれぞれ定義された複数の処理と該複数の処理の処理順序が定義されたフロー定義を読み込み、
前記フロー定義で定義された処理を先頭から取り出して対象処理に設定し、該対象処理に対応する第１クエリと該対象処理の直後に処理される該対象処理と同一の処理型の後続処理に対応する第２クエリとを統合した統合クエリを生成し、該統合クエリを前記対象処理に対応する第１クエリとする処理を繰り返す、処理を実行させる
ことを特徴とするクエリ統合プログラム。
【請求項４】
処理内容および属性がそれぞれ定義された複数の処理と該複数の処理の処理順序が定義されたフロー定義を読み込むフロー定義取得部と、
前記フロー定義で定義された処理を先頭から取り出して対象処理に設定し、該対象処理に対応する第１クエリと該対象処理の直後に処理される該対象処理と同一の処理型の後続処理に対応する第２クエリとを統合した統合クエリを生成し、該統合クエリを前記対象処理に対応する第１クエリとする処理を繰り返す統合クエリ生成部とを備える
ことを特徴とするクエリ統合装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フロー定義にもとづいてクエリを生成する処理に関し、より詳しくは、複数のクエリを統合した統合クエリを生成するクエリ統合処理に関する。
【背景技術】
【０００２】
データ処理システムをコンポーネントの組合せによって構築する開発実行環境が知られている。
【０００３】
ＧＵＩを備えて、どのような順序でどのデータをどのように処理するかを示す情報がユーザによって入力されると、入力情報から処理内容および処理順序を定義したフロー定義を作成されるフロー定義編集システムがある。
【０００４】
さらに、フロー定義から各処理に対応するクエリを実行するコンポーネントを生成するコンポーネント生成システムがある。
【０００５】
図３６は、従来手法における、フロー定義、クエリおよびコンポーネントの関係を説明するための図である。図３６に示すフロー定義では、処理毎に、対象とするデータのスキーム（処理対象のフィールドおよびその属性などの情報）とその処理内容（プロシージャ）が定義されている。
【０００６】
コンポーネント生成システムでは、フロー定義で定義された各処理の処理型に応じた処理モジュール（処理エンジン）が選択され、各処理の内容に１対１に対応するクエリを生成し、クエリの処理を実行するモジュールを内包したコンポーネントが生成され、さらに、フロー定義で定義された処理順序にもとづいてコンポーネント間のデータ受け渡しが定義される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許出願公開第２００９／０２９９９８６明細書
【特許文献２】特開２００６−１０７４７４号公報
【特許文献３】特開２０１１−１１８４９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来のコンポーネント生成システムでは、フロー定義で定義された各処理と１対１に対応する１つのクエリ毎にコンポーネントが生成される。コンポーネント間でのデータ受け渡しの都度、ファイルの書き込み／読み込み、ネットワークを介した通信等が発生するため、コンポーネント数に応じてデータ受け渡しの発生回数が増加し、通信等の時間がかかるという問題があった。特に、大規模なシステムのフロー定義である場合には、生成されるコンポーネント数が膨大なものとなり、通信のオーバーヘッドが大きくなるという問題が無視できなくなっている。
【０００９】
本発明は、フロー定義中の処理に対応するクエリをできる限り統合し、生成されるクエリ数およびコンポーネント数を減らし、コンポーネント間の通信のオーバーヘッドを軽減できるクエリ統合方法、プログラムおよび装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様として開示するクエリ統合方法は、コンピュータが、処理内容および属性がそれぞれ定義された複数の処理と該複数の処理の処理順序が定義されたフロー定義を読み込み、前記フロー定義で定義された処理を先頭から取り出して対象処理に設定し、該対象処理に対応する第１クエリと該対象処理の直後に処理される該対象処理と同一の処理型の後続処理に対応する第２クエリとを統合した統合クエリを生成し、該統合クエリを前記対象処理に対応する第１クエリとする処理を繰り返す、処理を実行するものである。
【発明の効果】
【００１１】
開示するクエリ統合方法によれば、フロー定義から生成するクエリ数を少なくし、クエリに対応するコンポーネント数を大幅に減少させて、通信のオーバーヘッドを削減することができる。
【図面の簡単な説明】
【００１２】
【図１】開示するクエリ統合方法における、フロー定義に定義された処理、統合クエリおよびコンポーネントの関係例を示す図である。
【図２】第１統合クエリ生成処理において生成される統合クエリの例を示す図である。
【図３】第２統合クエリ生成処理において生成されるクエリ言語に準拠した統合クエリ例を示す図である。
【図４】開示するクエリ統合装置の一実施例におけるブロック構成例を示す図である。
【図５】第１統合クエリ生成部が取得するフロー定義の構成例を示す図である。
【図６】句分割による統合クエリ生成処理における統合可否の判定条件例を示す図である。
【図７】フロー定義の処理の演算型の例を示す図である。
【図８】フロー定義のデータ定義例を示す図である。
【図９】フロー定義の処理定義例を示す図である。
【図１０】句テンプレート例を示す図である。
【図１１】句テンプレート例を示す図である。
【図１２】句テンプレート例を示す図である。
【図１３】句テンプレート例を示す図である。
【図１４】統合コンポーネント生成装置の概要処理フロー例を示す図である。
【図１５】句分割による統合クエリ生成処理（ステップＳ２）のより詳細な処理フロー例を示す図である。
【図１６】対象処理の後続処理があるかの判定例を示す図である。
【図１７】生成される各句の例を示す図である。
【図１８】生成クエリ記憶部に保存される各句および演算型の例を示す図である。
【図１９】生成される各句の例を示す図である。
【図２０】生成クエリ記憶部に保存される各句および演算型の例を示す図である。
【図２１】生成クエリ記憶部に保存される各句および演算型の例を示す図である。
【図２２】生成されるクエリの例を示す図である。
【図２３】統合可否判定処理（ステップＳ２４）のより詳細な処理フロー例を示す図である。
【図２４】演算型計算処理（ステップＳ２４３）のより詳細な処理フロー例を示す図である。
【図２５】演算型の判定の例を示す図である。
【図２６】演算型の判定の例を示す図である。
【図２７】演算型の判定の例を示す図である。
【図２８】入れ子による統合クエリ生成処理（ステップＳ３）のより詳細な処理フロー例を示す図である。
【図２９】生成される統合クエリの例を示す図である。
【図３０】生成クエリ記憶部に保存されるクエリの例を示す図である。
【図３１】コンポーネント生成処理（ステップＳ４）のより詳細な処理フロー例を示す図である。
【図３２】クエリ言語に対応したコンポーネントテンプレートの設定例を示す図である。
【図３３】コンポーネントテンプレートの例を示す図である。
【図３４】生成される統合コンポーネントの例を示す図である。
【図３５】統合コンポーネント生成装置のハードウェア構成例を示す図である。
【図３６】従来手法におけるフロー定義、クエリおよびコンポーネントの関係を説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明の一態様として開示するクエリ統合方法について説明する。
【００１４】
開示するクエリ統合方法では、フロー定義に定義された各処理からクエリを生成する際に、ある処理（対象処理とする）に対応するクエリ（第１クエリとする）とその直後の処理（後続処理とする）に対応するクエリ（第２クエリとする）とを統合したクエリを可能な限り生成し、生成するクエリ数を減らし、クエリに対応するコンポーネント数を減らしていく。
【００１５】
より詳しくは、対象処理と後続処理が、処理順序を変更して実行した場合にも演算結果が変化しないかを調べる。例えば、関係代数にもとづく演算型同士の対応関係から、対象処理と後続処理との順序依存の有無を調べる。両処理が、処理順序を変更して実行した場合にも演算結果が変化しない演算型である場合に、第１クエリと第２クエリを句単位に分割し、分割した句毎に要素を連結した統合クエリを生成する。そして、生成した統合クエリを第１クエリとし、クエリを統合した処理を対象処理に設定し、その後続処理（現後続処理の次の処理）との間で統合クエリの生成を繰り返していく（第１の統合クエリ生成処理）。
【００１６】
フロー定義中、第１の統合クエリ生成処理による統合ができない処理の場合、例えば、対象処理と後続処理が処理順序を変更して実行したときに演算結果が変化したり後続処理が実行不能となったりする場合には、第１クエリをサブクエリとして第２クエリに組み込んで統合クエリを生成する（第２の統合クエリ生成処理）。
【００１７】
図１は、フロー定義に定義された処理、統合クエリ、およびコンポーネントの関係例を示す図である。
【００１８】
図１に示すフロー定義は、各処理で対象となるデータのデータ定義および処理定義、ならびに処理順序が定義されている情報である。ここでは、ＰＯＳシステムのＰＯＳデータに対する処理として、処理Ｐ１（日時から時刻への変換処理）、処理Ｐ２（値範囲指定（時刻）処理）、処理Ｐ３（フィールド選択）、処理Ｐ４（商品カテゴリとの結合（ジョイン）処理）、…と複数の処理が定義されているとする。
【００１９】
〔第１の統合クエリ生成処理（句分割による統合クエリ生成処理）〕
開示するクエリ統合方法では、まず、第１の統合クエリ生成処理として、フロー定義で定義されている先頭の処理から対象処理に設定し、句分割による統合クエリを生成する。
【００２０】
フロー定義から統合クエリを生成するため、クエリを構成する各句のテンプレートを予め設定しておき、この句テンプレートを参照して統合クエリを生成する。句テンプレートの説明は、後述する。
【００２１】
図１に示すフロー定義の例において、対象処理が処理Ｐ１である場合に、後続処理の処理Ｐ２は、処理型（リアルタイム）が一致するが、処理順序を入れ替えた場合に処理Ｐ２が処理不能となる。そこで、第１の統合クエリ生成処理を行わずに、処理Ａに対応するクエリ「ＳＥＬＥＣＴ  ．．．  ＵＤＦ．ｇｅｔＴｉｍｅ（日時）  ＡＳ  時刻  ＦＲＯＭ  ＰＯＳデータ  」を生成し、次の処理Ｐ２を対象処理として処理を行う。
【００２２】
対象処理の処理Ｐ２と後続処理の処理Ｐ３とが実行順序の入れ替えが可能な演算型である場合に、処理Ｐ１、Ｐ２について句分割による統合クエリ生成処理を実行する。
【００２３】
具体的には、図２に示すように、処理Ｐ２に対応する第１クエリが「ＳＥＬＥＣＴ  ．．．  ＦＲＯＭ  データＡ  ＷＨＥＲＥ  １８：００＜＝時刻  ＡＮＤ  時刻＜＝２０：００」であり、処理Ｐ２に対応する第２クエリが「ＳＥＬＥＣＴ  ＩＤ，  商品ＩＤ，  時刻  ＦＲＯＭ  データＢ」である場合に、処理Ｐ１、Ｐ２にそれぞれ対応するクエリを、構成する句単位（ＳＥＬＥＣＴ句、ＦＲＯＭ句、ＷＨＥＲＥ句）に分割し、分割した句毎に、処理Ｐ１、Ｐ２の対応する句の要素を結合した句を連結して統合クエリ「ＳＥＬＥＣＴ  ＩＤ，  商品ＩＤ，  時刻  ＦＲＯＭ  データＡ  ＷＨＥＲＥ  １８：００＜＝時刻  ＡＮＤ  時刻＜＝２０：００」を生成する。
【００２４】
次の後続処理の処理Ｐ４は、統合した処理（処理Ｐ２、Ｐ３）と処理順序を入れ替えた場合に処理結果が異なる演算型である。そこで、統合クエリ生成処理を行わずに、処理Ｐ４に対応するクエリ「ＳＥＬＥＣＴ  ．．．  ＦＲＯＭ  データＣ  ＪＯＩＮ  商品カテゴリ  ＯＮ  ．．．」を生成する。
【００２５】
このように、句分割による統合クエリ生成処理を、処理型が同一の処理が連続する間繰り返していく。
【００２６】
〔第２の統合クエリ生成処理（入れ子による統合クエリ生成処理）〕
次に、フロー定義の処理Ｐ１から、第２の統合クエリ生成処理として、入れ子による統合クエリを生成する。
【００２７】
具体的には、処理Ｐ１の後続処理となる統合済みの処理（Ｐ２＋Ｐ３）の統合クエリ（第２クエリ）に、処理Ｐ１に対応するクエリ（第１クエリ）をサブクエリとして組み込んだ統合クエリ「ＳＥＬＥＣＴ  ＩＤ，  商品ＩＤ，  時刻  ＦＲＯＭ  （ＳＥＬＥＣＴ  ．．．  ＵＤＦ．ｇｅｔＴｉｍｅ（日時）  ＡＳ  時刻  ＦＲＯＭ  ＰＯＳデータ）  ＷＨＥＲＥ  １８：００＜＝時刻  ＡＮＤ  時刻＜＝２０：００」を生成する。
【００２８】
さらに、統合した処理（Ｐ１＋Ｐ２＋Ｐ３）を対象処理として、その後続処理となる処理Ｐ４に対応するクエリに、生成した統合クエリをサブクエリとして組み込んだ統合クエリ「ＳＥＬＥＣＴ  ．．．  ＦＲＯＭ  （ＳＥＬＥＣＴ  ＩＤ，  商品ＩＤ，  時刻  ＦＲＯＭ  （ＳＥＬＥＣＴ  ．．．  ＵＤＦ．ｇｅｔＴｉｍｅ（日時）  ＡＳ  時刻  ＦＲＯＭ  ＰＯＳデータ）  ＷＨＥＲＥ  １８：００＜＝時刻  ＡＮＤ  時刻＜＝２０：００）  ＪＯＩＮ  商品カテゴリ  ＯＮ  ．．．」を生成する。
【００２９】
ところで、サブクエリ挿入の記述規則は、クエリ言語により異なるので、第２の統合クエリ生成処理では、クエリ言語に対応したサブクエリの挿入規則を用いて統合クエリを生成する。例えば、バッチ型の処理があるクエリ言語（ＨｉｖｅＱＬ）に対応するクエリ処理エンジンで処理される場合に、そのクエリ言語に準拠する図３（Ａ）に示すような統合クエリを生成し、リアルタイム型の処理が別のクエリ言語（ＥｓｐｅｒＥＰＬ）に対応するクエリ処理エンジンで処理される場合に、その別のクエリ言語に準拠する図３（Ｂ）に示すような統合クエリを生成する。
【００３０】
以上のように、従来手法によれば４つのクエリから４つのコンポーネントが生成されていたのに対し、開示するクエリ統合方法によれば、４つのクエリを統合した１つの統合クエリに対する１つの統合コンポーネントが生成されることになる。よって、従来クエリ毎に生成されていたコンポーネント数が大幅に減少するため、コンポーネント間の通信回数の減少により処理時間や処理負荷を大幅に削減することができる。
【００３１】
以下、本発明の別の態様として開示するクエリ統合装置について説明する。
【００３２】
図４は、開示するクエリ統合装置の一実施例におけるブロック構成例を示す図である。本実施例において、本発明に係るクエリ統合装置１０は、統合コンポーネント生成装置１内に構成されている。
【００３３】
統合コンポーネント生成装置１は、クエリ統合装置１０、統合コンポーネント生成部２０およびコンポーネントテンプレート記憶部（コンポーネントテンプレートリポジトリ）２１を備える。
【００３４】
クエリ統合装置１０は、第１統合クエリ生成部１１、第２統合クエリ生成部１３、句分割テンプレート記憶部（句分割テンプレートリポジトリ）１５および生成クエリ記憶部１７を備える。
【００３５】
クエリ統合装置１０の第１統合クエリ生成部１１は、句分割テンプレート記憶部１５を参照し、取得したフロー定義２に定義された処理（対象処理）の第１クエリおよびその後続処理に対応する第２クエリについて、句分割による統合クエリを生成する。
【００３６】
第１統合クエリ生成部１１は、対象処理と後続処理の処理順序の入れ替えによって、処理結果（出力データ）が変わらない場合に統合クエリを生成し、変わる場合には統合クエリを生成しない。
【００３７】
本実施の形態では、第１統合クエリ生成部１１は、例えば、複数の入力を結合する処理、入力データを要約する処理（平均値計算、データ数カウント等）等は、その前後の処理と統合して統合クエリを生成しない。さらに、あるフィールドを追加する処理、あるフィールドの値を変更する処理等は、そのフィールドの値を参照し演算や比較をする後続処理と統合して統合クエリを生成しない。
【００３８】
図５は、第１統合クエリ生成部１１が入力するフロー定義の構成例を示す図である。
【００３９】
フロー定義２には、図５（Ａ）に示すように、ＰＯＳデータに対する複数の処理Ｐ１、Ｐ２、Ｐ３、…の処理順序が定義されている。さらに、フロー定義２には、データ定義として、図５（Ｂ）に示すような、処理対象となる各データのスキーマ（フィールド名およびデータ型）が定義されている。さらに、フロー定義２には、処理定義として、処理型、処理の種類や名称、入力データ、出力データ、図５（Ｃ）に示すような処理プロパティ（変数の属性名、値等）が定義されている。
【００４０】
図６は、句分割による統合クエリ生成処理における統合可否の判定条件例を示す図である。
【００４１】
図６に示すデータテーブルは、予め第１統合クエリ生成部１１に保持されており、対象処理と後続処理の演算型にもとづいて、句分割による統合クエリ生成が可能であるか否かが設定されている。図６に示すデータテーブル例では、対象処理と後続処理とが統合可能な関係を丸印（○）で、統合不可の場合がある関係を三角印（△）で、統合不可な関係をバツ印（×）で表している。
【００４２】
図７は、フロー定義の処理の演算型の例を示す図である。
【００４３】
「拡張」は、入力データに新しいフィールドを追加して出力する処理であり、例えば、処理Ｐ１「日時→時刻変換」のように、日時から変換された時刻を格納するフィールドを出力データに追加する処理が該当する。「選択」は、入力データを何らかの条件でフィルタリングする処理であり、例えば、処理Ｐ２「値範囲指定」のように、ＷＨＥＲＥ句の条件で入力データを絞り込む処理が該当する。「射影」は、入力データのいくつかのフィールドのみを選択する処理であり、例えば、処理Ｐ３「フィールド選択」のように、入力データから指定フィールドのみを含む出力データを生成する処理が該当する。
【００４４】
さらに、図７に図示しないが、「要約」は、入力データ全体に対して集約を行う処理であり、例えば、件数カウント、合計、平均等の処理が該当する。「複数入力」は、複数の入力データを結合して１つの出力データを生成する処理である。「複数出力」は、１つの出力データを、複数の後続処理が参照するような処理である。
【００４５】
第２統合クエリ生成部１３は、対象処理に対応する第１クエリをその後続処理に対応する第２クエリにサブクエリとして組み込んで統合クエリを生成する。
【００４６】
句分割テンプレート記憶部１５は、クエリを構成する各句の句テンプレートを記憶する。
【００４７】
生成クエリ記憶部１７は、第１統合クエリ生成部１１および第２統合クエリ生成部１３が生成したクエリを記憶する。
【００４８】
図８は、フロー定義のデータ定義例を示す図である。図８に示すブロックの上段から、ＰＯＳデータ、データＡ、データＢ、データＣのデータ定義を表している。データ定義には、処理されるデータのデータＩＤ、データ名、フィールド名、型（データ型）が定義されている。
【００４９】
図９は、フロー定義の処理定義例を示す図である。図９に示すブロックの上段から、処理Ｐ１、Ｐ２、Ｐ３の処理定義を表している。処理定義には、処理名、処理の種類、処理型、入力データのデータＩＤ（入力データＩＤ）、出力データのデータＩＤ（出力データＩＤ）、属性名、属性名の値が定義されている。
【００５０】
図１０〜図１３は、句テンプレート例を示す図である。
【００５１】
句テンプレートは、クエリ言語毎に用意される。例えば、句分割テンプレート記憶部１５には、クエリ言語ＥＰＬ（Ｅｖｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｌａｎｇｕａｇｅ）およびＨｉｖｅＱＬの２種類のクエリ言語に対応する句テンプレートが記憶され、ＥＰＬの句テンプレートは、処理型がリアルタイムの処理の場合に、ＨｉｖｅＱＬの句テンプレートは、処理型がバッチの処理の場合に適用されるものとする。
【００５２】
図１０は、日時を時刻に変換する処理に対応するクエリの各句テンプレート例であり、図１０（Ａ）は、ＥＰＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句の句テンプレート例、図１０（Ｂ）は、ＨｉｖｅＱＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句の句テンプレート例である。
【００５３】
図１１は、値範囲を指定する処理に対応するクエリの各句テンプレート例であり、図１１（Ａ）は、ＥＰＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句、ＷＨＥＲＥ句の句テンプレート例、図１１（Ｂ）は、ＨｉｖｅＱＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句、ＷＨＥＲＥ句の句テンプレート例である。
【００５４】
図１２は、フィールドを選択する処理に対応するクエリの各句テンプレート例であり、図１２（Ａ）は、ＥＰＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句の句テンプレート例、図１２（Ｂ）は、ＨｉｖｅＱＬ用のＳＥＬＥＣＴ句、ＦＲＯＭ句の句テンプレート例である。
【００５５】
図１３は、処理型および処理名と適用される句テンプレートとの対応関係を示すテーブル例である。処理型や句が増加する場合には、図１３に示すテーブルに列を追加してテンプレート登録することができる。
【００５６】
以下、統合コンポーネント生成装置１の動作を説明する。
【００５７】
図１４は、統合コンポーネント生成装置１の概要処理フロー例を示す図である。
【００５８】
統合コンポーネント生成装置１に備えられたクエリ統合装置１０の第１統合クエリ生成部１１は、フロー定義２を取得し、フロー定義２の各処理にクエリ未生成を示すフラグを付加する（ステップＳ１）。そして、第１統合クエリ生成部１１は、句分割テンプレート記憶部１５を参照して句分割による統合クエリ生成処理を行い、生成した統合クエリを含む全てのクエリを生成クエリ記憶部１７に保存する（ステップＳ２）。
【００５９】
次に、第２統合クエリ生成部１３は、生成クエリ記憶部１７に保存されたクエリに対し、入れ子による統合クエリ生成処理を行い、生成した統合クエリを含む全てのクエリを生成クエリ記憶部１７に保存する（ステップＳ３）。
【００６０】
統合コンポーネント生成部２０は、コンポーネントテンプレート記憶部２１を参照して、生成クエリ記憶部１７に保存されたクエリ毎にコンポーネントを生成し、生成したコンポーネント３を出力する（ステップＳ４）。
【００６１】
図１５は、句分割による統合クエリ生成処理（ステップＳ２）のより詳細な処理フロー例を示す図である。
【００６２】
第１統合クエリ生成部１１は、フロー定義２の先頭から、フラグをもとに、クエリ未生成の処理が存在するかを判定し（ステップＳ２１）、クエリ未生成の処理があれば（ステップＳ２１のＹ）、フロー定義２からクエリ未生成の処理を選択して対象処理とし（ステップＳ２２）、クエリ未生成の処理がなければ（ステップＳ２１のＮ）、処理を終了する。
【００６３】
第１統合クエリ生成部１１は、対象処理の後続処理があるかを判定する（ステップＳ２３）。第１統合クエリ生成部１１は、具体的には、図１６に示すように、対象処理の出力データと同じＩＤの入力データを持つ処理をフロー定義２から検索し、検索できた場合に、後続処理があると判定する。
【００６４】
対象処理に後続処理があれば（ステップＳ２３のＹ）、第１統合クエリ生成部１１は、対象処理と後続処理との統合可否を判定する（ステップＳ２４）。ステップＳ２４の処理の詳細は後述する。
【００６５】
ステップＳ２４の処理の結果、対象処理と後続処理との統合が可能であれば（ステップＳ２５のＹ）、第１統合クエリ生成部１１は、対象処理と後続処理との句毎の要素を結合して統合クエリの各句を生成し、生成クエリ記憶部１７に対象処理の各句として保存する（ステップＳ２６）。具体的には、第１統合クエリ生成部１１は、フロー定義２の対象処理および後続処理のデータ定義を参照し、句分割テンプレート記憶部１５から処理名に対応する句テンプレートを用いて各句を生成する。図１３のデータテーブルが参照され、対象処理が処理Ｐ２で後続処理が処理Ｐ３である場合に、ＳＥＬＥＣＴ句の句テンプレートＴ１１（処理Ｐ３）、ＦＲＯＭ句の句テンプレートＴ６（処理Ｐ２）、ＷＨＥＲＥ句の句テンプレートＴ７（処理Ｐ２）が指定される。そして、図１７に示すように、句毎に対象処理と後続処理との要素を結合した各句（ＳＥＬＥＣＴ句ｑ４、ＦＲＯＭ句ｑ５、ＷＨＥＲＥ句ｑ６）が生成される。
【００６６】
第１統合クエリ生成部１１は、対象処理と後続処理の演算型の和を、対象処理の演算型として生成クエリ記憶部１７に保存する（ステップＳ２７）。さらに、第１統合クエリ生成部１１は、後続処理をフロー定義２から削除する（ステップＳ２８）。
【００６７】
図１８に示すように、対象処理が処理Ｐ２で後続処理が処理Ｐ３である場合に、生成クエリ記憶部１７には、対象処理の句として、生成された各句ｑ４、ｑ５、ｑ６、および演算型「選択＋射影」が保存される。また、図１８の処理名の斜線は、その処理が削除されていることを表す。
【００６８】
ステップＳ２４の処理の結果、対象処理と後続処理との統合が可能でなければ（ステップＳ２５のＮ）、第１統合クエリ生成部１１は、対象処理のクエリの各句を生成し、各句と演算型を生成クエリ記憶部１７に保存する（ステップＳ２９）。
【００６９】
対象処理が処理Ｐ１で後続処理と統合不可である場合に、ＳＥＬＥＣＴ句の句テンプレートＴ１（処理Ｐ１）、ＦＲＯＭ句の句テンプレートＴ２（処理Ｐ１）が指定され、図１９に示すように、句毎に対象処理の要素をそのまま用いた各句（ＳＥＬＥＣＴ句ｑ１、ＦＲＯＭ句ｑ２）が生成される。図２０に示すように、生成クエリ記憶部１７には、対象処理の句として、生成された各句ｑ１、ｑ２および演算型「拡張」が保存される。
【００７０】
そして、ステップＳ２３の処理の結果、対象処理に後続処理がなければ（ステップＳ２３のＮ）、第１統合クエリ生成部１１は、対象処理のクエリの各句を生成して、生成クエリ記憶部１７に保存する（ステップＳ２９）。第１統合クエリ生成部１１は、生成クエリ記憶部１７に保存した各処理の各句を結合し、その処理のクエリとして生成クエリ記憶部１７に保存する（ステップＳ２１０）。図２１に示すように、処理Ｐ１に対応するクエリＱ１０が、処理Ｐ２（Ｐ２＋Ｐ３）に対応するクエリＱ１１が生成される。
【００７１】
図２２（Ａ）は、処理Ｐ１についてクエリＱ１０の例、図２２（Ｂ）は、処理Ｐ２についてクエリＱ１１の例を示す図である。
【００７２】
図２３は、統合可否判定処理（ステップＳ２４）のより詳細な処理フロー例を示す図である。
【００７３】
第１統合クエリ生成部１１は、フロー定義２中の対象処理と後続処理とを参照し（ステップＳ２４１）、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在するかを判定する（ステップＳ２４２）。
【００７４】
対象処理と後続処理の処理型が同じ、かつ、対象処理の後続処理が複数存在しない場合に（ステップＳ２４２のＮ）、対象処理と後続処理の演算型を計算する（ステップＳ２４３）。
【００７５】
ステップＳ２４３の処理の結果、対象処理または後続処理の演算型が、拡張、選択、射影以外の演算型を含まない場合に（ステップＳ２４４のＮ）、さらに、対象処理の演算型が拡張を含まない場合には（ステップＳ２４５のＮ）、第１統合クエリ生成部１１は、統合可と判定する（ステップＳ２４６）。一方、対象処理の演算型が拡張を含む場合は（ステップＳ２４５のＹ）、第１統合クエリ生成部１１は、さらに後続処理の演算型が拡張または選択を含むかを判定する（ステップＳ２４７）。後続処理の演算型が拡張または選択を含まない場合は（ステップＳ２４７のＮ）、第１統合クエリ生成部１１は、統合可と判定し（ステップＳ２４６）、後続処理の演算型が拡張または選択を含む場合は（ステップＳ２４７のＹ）、さらに、対象処理で追加したフィールドを後続処理で参照しているかを判定する（ステップＳ２４８）。対象処理で追加したフィールドを後続処理で参照していなければ（ステップＳ２４８のＮ）、第１統合クエリ生成部１１は、統合可と判定する（ステップＳ２４６）。対象処理で追加したフィールドを後続処理で参照していれば（ステップＳ２４８のＹ）、第１統合クエリ生成部１１は、統合不可と判定する（ステップＳ２４９）。
【００７６】
ステップＳ２４２の処理で、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在する場合（ステップＳ２４２のＹ）、または、ステップＳ２４４の処理で、対象処理または後続処理の演算型が、拡張、選択、射影以外の演算型を含む場合には（ステップＳ２４４のＹ）、第１統合クエリ生成部１１は、統合不可と判定する（ステップＳ２４９）。
【００７７】
図２４は、演算型計算処理（ステップＳ２４３）のより詳細な処理フロー例を示す図である。
【００７８】
第１統合クエリ生成部１１は、生成クエリ記憶部１７に、対象処理の演算型が登録済みであるかを判定し（ステップＳ４３１）、演算型が登録済みでなければ（ステップＳ４３１のＮ）、演算型を空（Φ）にして（ステップＳ４３２）、フロー定義２から、対象処理の入力データと出力データのスキーマを取得する（ステップＳ４３３）。
【００７９】
第１統合クエリ生成部１１は、出力データに、入力データにはないフィールドが存在するかを判定する（ステップＳ４３４）。出力データに、入力データにはないフィールドが存在すれば（ステップＳ４３４のＹ）、第１統合クエリ生成部１１は、生成クエリ記憶部の演算型に拡張を追加し（ステップＳ４３５）、入力データにはないフィールドが存在しなければ（ステップＳ４３４のＮ）、ステップＳ４３６の処理に進む。
【００８０】
例えば、図２５に示す処理Ｐ１（日時→時刻変換）では、処理定義に定義された新しいフィールド「時刻」が出力データに追加されているので、処理Ｐ１の演算型は拡張と判定される。
【００８１】
第１統合クエリ生成部１１は、出力データに、入力データの全フィールドが揃っているかを判定する（ステップＳ４３６）。入力データの全フィールドが揃っていなければ（ステップＳ４３６のＮ）、第１統合クエリ生成部１１は、生成クエリ記憶部の演算型に射影を追加し（ステップＳ４３７）、入力データの全フィールドが揃っていれば（ステップＳ４３６のＹ）、ステップＳ４３８の処理に進む。
【００８２】
例えば、図２６に示す処理Ｐ３（フィールド選択）では、入力データと出力データのフィールドが揃っておらず、出力データに入力データの全フィールドが含まれていないので（不一致（減少））、処理Ｐ３の演算型は射影と判定される。
【００８３】
第１統合クエリ生成部１１は、対象処理にＷＨＥＲＥ句の句テンプレートが存在するかを判定する（ステップＳ４３８）。対象処理にＷＨＥＲＥ句の句テンプレートが存在すれば（ステップＳ４３８のＹ）、第１統合クエリ生成部１１は、生成クエリ記憶部の演算型に選択を追加し（ステップＳ４３９）、対象処理にＷＨＥＲＥ句の句テンプレートが存在しなければ（ステップＳ４３８のＮ）、ステップＳ４３１０の処理に進む。
【００８４】
例えば、図２７に示す処理Ｐ２（値範囲指定）では、入力データと出力データのフィールドが一致し、処理に適用されたＷＨＥＲＥ句の句テンプレートが存在するので、処理Ｐ２の演算型は選択と判定される。
【００８５】
第１統合クエリ生成部１１は、ＳＥＬＥＣＴ、ＦＲＯＭ、ＷＨＥＲＥ以外の句テンプレートが存在するかを判定する（ステップＳ４３１０）。対象処理にＳＥＬＥＣＴ、ＦＲＯＭ、ＷＨＥＲＥ以外の句テンプレートが存在すれば（ステップＳ４３１０のＹ）、第１統合クエリ生成部１１は、生成クエリ記憶部の演算型にその他を追加し（ステップＳ４３１１）、対象処理にＳＥＬＥＣＴ、ＦＲＯＭ、ＷＨＥＲＥ以外の句テンプレートが存在しなければ（ステップＳ４３１０のＮ）、処理を終了する。
【００８６】
処理の演算型が登録済みであれば（ステップＳ４３１のＹ）、対象処理の演算型を生成クエリ記憶部１７から取得し（ステップＳ４３１２）、処理を終了する。
【００８７】
図２８は、入れ子による統合クエリ生成処理（ステップＳ３）のより詳細な処理フロー例を示す図である。
【００８８】
第２統合クエリ生成部１３は、生成クエリ記憶部１７から、第１統合クエリ生成部１１により生成された各クエリに入れ子による統合の未実施を示すフラグを付加する。そして、第２統合クエリ生成部１３は、入れ子による統合が未実施の処理があるかを判定する（ステップＳ３１）。
【００８９】
入れ子による統合が未実施の処理があれば（ステップＳ３１のＹ）、第２統合クエリ生成部１３は、生成クエリ記憶部１７に保存されたクエリの先頭から入れ子による統合未実施の処理を選択し、対象処理とする（ステップＳ３２）。第２統合クエリ生成部１３は、対象処理の後続処理があるかを判定する（ステップＳ３３）。対象処理の後続処理があれば（ステップＳ３３のＹ）、第２統合クエリ生成部１３は、生成クエリ記憶部１７から対象処理の後続処理を選択する（ステップＳ３４）。
【００９０】
第２統合クエリ生成部１３は、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在するかを判定する（ステップＳ３５）。
【００９１】
対象処理と後続処理の処理型が同じ、かつ、対象処理の後続処理が複数存在しない場合に（ステップＳ３５のＮ）、第２統合クエリ生成部１３は、対象処理と後続処理の生成クエリを入れ子により統合し、統合クエリを生成する（ステップＳ３６）。第２統合クエリ生成部１３は、生成した統合クエリを対象処理のクエリとして生成クエリ記憶部へ保存し（ステップＳ３７）、後続処理を生成クエリ記憶部１７から削除する（ステップＳ３８）。
【００９２】
図２９に示すように、処理Ｐ１の生成クエリＱ１０と処理Ｐ２（Ｐ２＋Ｐ３）の生成クエリＱ１１とが入れ子により統合され、統合クエリＱ２０が生成される。そして、図３０に示すように、生成クエリ記憶部１７の処理Ｐ１（日時→時刻変換）の生成クエリが統合クエリＱ２０に置き換えられ、処理Ｐ２（値範囲指定）が削除される。
【００９３】
ステップＳ３３の処理で、対象処理の後続処理がない場合（ステップＳ３３のＮ）、または、ステップＳ３５の処理で、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在する場合（ステップＳ３５のＹ）、対象処理について統合済みをフロー定義にマークする（ステップＳ３９）。
【００９４】
図３１は、コンポーネント生成処理（ステップＳ４）のより詳細な処理フロー例を示す図である。
【００９５】
統合コンポーネント生成部２０は、フロー定義２にコンポーネント未生成の処理があるかを判定する（ステップＳ４１）。コンポーネント未生成の処理があれば（ステップＳ４１のＹ）、統合コンポーネント生成部２０は、フロー定義２からコンポーネント未生成の処理を選択し（ステップＳ４２）、その処理の処理型をもとに、コンポーネントテンプレート記憶部２１から、対応するコンポーネントテンプレートを取得する（ステップＳ４３）。
【００９６】
コンポーネントテンプレート記憶部２１には、図３２に示すように、クエリ言語に対応するコンポーネントテンプレートが設定されている。図３３は、コンポーネントテンプレートの例を示す図である。図３３（Ａ）は、ＥＰＬ用のコンポーネントテンプレートＣ１の例、図３３（Ｂ）は、ＨｉｖｅＱＬ用のコンポーネントテンプレートＣ２の例である。ここで、処理型に応じてクエリ言語が選択されるので、処理型がリアルタイムであればコンポーネントテンプレートＣ１が選択され、処理型がバッチであればコンポーネントテンプレートＣ２が選択される。
【００９７】
統合コンポーネント生成部２０は、生成クエリ記憶部１７から、選択した処理に対応するクエリを取得し（ステップＳ４４）、選択したコンポーネントテンプレートをもとに、コンポーネントを生成する（ステップＳ４５）。フロー定義２から処理Ｐ１の処理型がリアルタイムであれば、コンポーネントテンプレートＣ１が選択されるため、図３４に示すように、コンポーネントテンプレートＣ１に、生成クエリ記憶部１７に保存されていた処理Ｐ１の統合クエリＱ２０が適用されて、コンポーネントが生成される。
【００９８】
統合コンポーネント生成部２０によって生成されたコンポーネント３は出力され、記憶装置、記憶媒体等に保存される。
【００９９】
以上説明した統合コンポーネント生成装置１は、図４に示す処理部を備える専用ハードウェアとして実施することができる。
【０１００】
また、統合コンポーネント生成装置１を、図３５に示すような、ＣＰＵ１０１、メモリ１０２、記憶装置（ハードディスク）１０３、入力装置（キーボード）１０４、出力装置（ディスプレイ）１０５、ネットワーク接続装置１０６等が内部のネットワーク等で接続されたコンピュータ１００で実施することができる。
【０１０１】
さらに、統合コンポーネント生成装置１を、コンピュータ１００で実行可能なプログラムとして実施することができる。この場合に、図４に示す統合コンポーネント生成装置１の処理部の機能を実現するプログラムを実装し、コンピュータ１００上で実行することにより、実施する。すなわち、図４に示したクエリ統合装置１０の第１統合クエリ生成部１１，第２統合クエリ生成部１３、さらに、統合コンポーネント生成部２０の機能をコンピュータに実行させる実行プログラムをコンピュータ１００に読み込ませ、実行させることによって，統合コンポーネント生成装置１を実現することができる。
【０１０２】
なお、実行プログラムは、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ等やフレキシブルディスク等の記録媒体だけでなく、通信回線の先に備えられた他の記憶装置やコンピュータのハードディスク等に記憶されるものであってもよい。
【０１０３】
なお、統合コンポーネント生成装置１のクエリ統合装置１０を構成する要素は、任意の組合せで実現されてもよい。複数の構成要素が１つの部材として実現されてもよく、１つの構成要素が複数の部材から構成されてもよい。また、クエリ統合装置１０は、上述した実施形態に限定されず、本発明の要旨を逸脱しない範囲において各種の改良および変更を行ってもよいことは当然である。
【０１０４】
以上説明したように、開示したクエリ統合装置１０によれば、フロー定義２に含まれる各処理のクエリを統合するため、生成するクエリ数を大幅に減らすことができ、クエリに対応するコンポーネント数も大幅に減らすことができる。よって、コンポーネント数の削減に応じて通信のオーバーヘッド等を小さくすることできる。
【符号の説明】
【０１０５】
１  統合コンポーネント生成装置
１０  クエリ統合装置
１１  第１統合クエリ生成部
１３  第２統合クエリ生成部
１５  句分割テンプレート記憶部
１７  生成クエリ記憶部
２０  統合コンポーネント生成部
２１  コンポーネントテンプレート記憶部
２  フロー定義
３  生成コンポーネント
【図１】
0005835084.tif 000002
【図２】
0005835084.tif 000003
【図３】
0005835084.tif 000004
【図４】
0005835084.tif 000005
【図５】
0005835084.tif 000006
【図６】
0005835084.tif 000007
【図７】
0005835084.tif 000008
【図８】
0005835084.tif 000009
【図９】
0005835084.tif 000010
【図１０】
0005835084.tif 000011
【図１１】
0005835084.tif 000012
【図１２】
0005835084.tif 000013
【図１３】
0005835084.tif 000014
【図１４】
0005835084.tif 000015
【図１５】
0005835084.tif 000016
【図１６】
0005835084.tif 000017
【図１７】
0005835084.tif 000018
【図１８】
0005835084.tif 000019
【図１９】
0005835084.tif 000020
【図２０】
0005835084.tif 000021
【図２１】
0005835084.tif 000022
【図２２】
0005835084.tif 000023
【図２３】
0005835084.tif 000024
【図２４】
0005835084.tif 000025
【図２５】
0005835084.tif 000026
【図２６】
0005835084.tif 000027
【図２７】
0005835084.tif 000028
【図２８】
0005835084.tif 000029
【図２９】
0005835084.tif 000030
【図３０】
0005835084.tif 000031
【図３１】
0005835084.tif 000032
【図３２】
0005835084.tif 000033
【図３３】
0005835084.tif 000034
【図３４】
0005835084.tif 000035
【図３５】
0005835084.tif 000036
【図３６】
0005835084.tif 000037