以下、本発明の一態様として開示するクエリ統合方法について説明する。
開示するクエリ統合方法では、フロー定義に定義された各処理からクエリを生成する際に、ある処理(対象処理とする)に対応するクエリ(第1クエリとする)とその直後の処理(後続処理とする)に対応するクエリ(第2クエリとする)とを統合したクエリを可能な限り生成し、生成するクエリ数を減らし、クエリに対応するコンポーネント数を減らしていく。
より詳しくは、対象処理と後続処理が、処理順序を変更して実行した場合にも演算結果が変化しないかを調べる。例えば、関係代数にもとづく演算型同士の対応関係から、対象処理と後続処理との順序依存の有無を調べる。両処理が、処理順序を変更して実行した場合にも演算結果が変化しない演算型である場合に、第1クエリと第2クエリを句単位に分割し、分割した句毎に要素を連結した統合クエリを生成する。そして、生成した統合クエリを第1クエリとし、クエリを統合した処理を対象処理に設定し、その後続処理(現後続処理の次の処理)との間で統合クエリの生成を繰り返していく(第1の統合クエリ生成処理)。
フロー定義中、第1の統合クエリ生成処理による統合ができない処理の場合、例えば、対象処理と後続処理が処理順序を変更して実行したときに演算結果が変化したり後続処理が実行不能となったりする場合には、第1クエリをサブクエリとして第2クエリに組み込んで統合クエリを生成する(第2の統合クエリ生成処理)。
図1は、フロー定義に定義された処理、統合クエリ、およびコンポーネントの関係例を示す図である。
図1に示すフロー定義は、各処理で対象となるデータのデータ定義および処理定義、ならびに処理順序が定義されている情報である。ここでは、POSシステムのPOSデータに対する処理として、処理P1(日時から時刻への変換処理)、処理P2(値範囲指定(時刻)処理)、処理P3(フィールド選択)、処理P4(商品カテゴリとの結合(ジョイン)処理)、…と複数の処理が定義されているとする。
〔第1の統合クエリ生成処理(句分割による統合クエリ生成処理)〕
開示するクエリ統合方法では、まず、第1の統合クエリ生成処理として、フロー定義で定義されている先頭の処理から対象処理に設定し、句分割による統合クエリを生成する。
フロー定義から統合クエリを生成するため、クエリを構成する各句のテンプレートを予め設定しておき、この句テンプレートを参照して統合クエリを生成する。句テンプレートの説明は、後述する。
図1に示すフロー定義の例において、対象処理が処理P1である場合に、後続処理の処理P2は、処理型(リアルタイム)が一致するが、処理順序を入れ替えた場合に処理P2が処理不能となる。そこで、第1の統合クエリ生成処理を行わずに、処理Aに対応するクエリ「SELECT ... UDF.getTime(日時) AS 時刻 FROM POSデータ 」を生成し、次の処理P2を対象処理として処理を行う。
対象処理の処理P2と後続処理の処理P3とが実行順序の入れ替えが可能な演算型である場合に、処理P1、P2について句分割による統合クエリ生成処理を実行する。
具体的には、図2に示すように、処理P2に対応する第1クエリが「SELECT ... FROM データA WHERE 18:00<=時刻 AND 時刻<=20:00」であり、処理P2に対応する第2クエリが「SELECT ID, 商品ID, 時刻 FROM データB」である場合に、処理P1、P2にそれぞれ対応するクエリを、構成する句単位(SELECT句、FROM句、WHERE句)に分割し、分割した句毎に、処理P1、P2の対応する句の要素を結合した句を連結して統合クエリ「SELECT ID, 商品ID, 時刻 FROM データA WHERE 18:00<=時刻 AND 時刻<=20:00」を生成する。
次の後続処理の処理P4は、統合した処理(処理P2、P3)と処理順序を入れ替えた場合に処理結果が異なる演算型である。そこで、統合クエリ生成処理を行わずに、処理P4に対応するクエリ「SELECT ... FROM データC JOIN 商品カテゴリ ON ...」を生成する。
このように、句分割による統合クエリ生成処理を、処理型が同一の処理が連続する間繰り返していく。
〔第2の統合クエリ生成処理(入れ子による統合クエリ生成処理)〕
次に、フロー定義の処理P1から、第2の統合クエリ生成処理として、入れ子による統合クエリを生成する。
具体的には、処理P1の後続処理となる統合済みの処理(P2+P3)の統合クエリ(第2クエリ)に、処理P1に対応するクエリ(第1クエリ)をサブクエリとして組み込んだ統合クエリ「SELECT ID, 商品ID, 時刻 FROM (SELECT ... UDF.getTime(日時) AS 時刻 FROM POSデータ) WHERE 18:00<=時刻 AND 時刻<=20:00」を生成する。
さらに、統合した処理(P1+P2+P3)を対象処理として、その後続処理となる処理P4に対応するクエリに、生成した統合クエリをサブクエリとして組み込んだ統合クエリ「SELECT ... FROM (SELECT ID, 商品ID, 時刻 FROM (SELECT ... UDF.getTime(日時) AS 時刻 FROM POSデータ) WHERE 18:00<=時刻 AND 時刻<=20:00) JOIN 商品カテゴリ ON ...」を生成する。
ところで、サブクエリ挿入の記述規則は、クエリ言語により異なるので、第2の統合クエリ生成処理では、クエリ言語に対応したサブクエリの挿入規則を用いて統合クエリを生成する。例えば、バッチ型の処理があるクエリ言語(HiveQL)に対応するクエリ処理エンジンで処理される場合に、そのクエリ言語に準拠する図3(A)に示すような統合クエリを生成し、リアルタイム型の処理が別のクエリ言語(EsperEPL)に対応するクエリ処理エンジンで処理される場合に、その別のクエリ言語に準拠する図3(B)に示すような統合クエリを生成する。
以上のように、従来手法によれば4つのクエリから4つのコンポーネントが生成されていたのに対し、開示するクエリ統合方法によれば、4つのクエリを統合した1つの統合クエリに対する1つの統合コンポーネントが生成されることになる。よって、従来クエリ毎に生成されていたコンポーネント数が大幅に減少するため、コンポーネント間の通信回数の減少により処理時間や処理負荷を大幅に削減することができる。
以下、本発明の別の態様として開示するクエリ統合装置について説明する。
図4は、開示するクエリ統合装置の一実施例におけるブロック構成例を示す図である。本実施例において、本発明に係るクエリ統合装置10は、統合コンポーネント生成装置1内に構成されている。
統合コンポーネント生成装置1は、クエリ統合装置10、統合コンポーネント生成部20およびコンポーネントテンプレート記憶部(コンポーネントテンプレートリポジトリ)21を備える。
クエリ統合装置10は、第1統合クエリ生成部11、第2統合クエリ生成部13、句分割テンプレート記憶部(句分割テンプレートリポジトリ)15および生成クエリ記憶部17を備える。
クエリ統合装置10の第1統合クエリ生成部11は、句分割テンプレート記憶部15を参照し、取得したフロー定義2に定義された処理(対象処理)の第1クエリおよびその後続処理に対応する第2クエリについて、句分割による統合クエリを生成する。
第1統合クエリ生成部11は、対象処理と後続処理の処理順序の入れ替えによって、処理結果(出力データ)が変わらない場合に統合クエリを生成し、変わる場合には統合クエリを生成しない。
本実施の形態では、第1統合クエリ生成部11は、例えば、複数の入力を結合する処理、入力データを要約する処理(平均値計算、データ数カウント等)等は、その前後の処理と統合して統合クエリを生成しない。さらに、あるフィールドを追加する処理、あるフィールドの値を変更する処理等は、そのフィールドの値を参照し演算や比較をする後続処理と統合して統合クエリを生成しない。
図5は、第1統合クエリ生成部11が入力するフロー定義の構成例を示す図である。
フロー定義2には、図5(A)に示すように、POSデータに対する複数の処理P1、P2、P3、…の処理順序が定義されている。さらに、フロー定義2には、データ定義として、図5(B)に示すような、処理対象となる各データのスキーマ(フィールド名およびデータ型)が定義されている。さらに、フロー定義2には、処理定義として、処理型、処理の種類や名称、入力データ、出力データ、図5(C)に示すような処理プロパティ(変数の属性名、値等)が定義されている。
図6は、句分割による統合クエリ生成処理における統合可否の判定条件例を示す図である。
図6に示すデータテーブルは、予め第1統合クエリ生成部11に保持されており、対象処理と後続処理の演算型にもとづいて、句分割による統合クエリ生成が可能であるか否かが設定されている。図6に示すデータテーブル例では、対象処理と後続処理とが統合可能な関係を丸印(○)で、統合不可の場合がある関係を三角印(△)で、統合不可な関係をバツ印(×)で表している。
図7は、フロー定義の処理の演算型の例を示す図である。
「拡張」は、入力データに新しいフィールドを追加して出力する処理であり、例えば、処理P1「日時→時刻変換」のように、日時から変換された時刻を格納するフィールドを出力データに追加する処理が該当する。「選択」は、入力データを何らかの条件でフィルタリングする処理であり、例えば、処理P2「値範囲指定」のように、WHERE句の条件で入力データを絞り込む処理が該当する。「射影」は、入力データのいくつかのフィールドのみを選択する処理であり、例えば、処理P3「フィールド選択」のように、入力データから指定フィールドのみを含む出力データを生成する処理が該当する。
さらに、図7に図示しないが、「要約」は、入力データ全体に対して集約を行う処理であり、例えば、件数カウント、合計、平均等の処理が該当する。「複数入力」は、複数の入力データを結合して1つの出力データを生成する処理である。「複数出力」は、1つの出力データを、複数の後続処理が参照するような処理である。
第2統合クエリ生成部13は、対象処理に対応する第1クエリをその後続処理に対応する第2クエリにサブクエリとして組み込んで統合クエリを生成する。
句分割テンプレート記憶部15は、クエリを構成する各句の句テンプレートを記憶する。
生成クエリ記憶部17は、第1統合クエリ生成部11および第2統合クエリ生成部13が生成したクエリを記憶する。
図8は、フロー定義のデータ定義例を示す図である。図8に示すブロックの上段から、POSデータ、データA、データB、データCのデータ定義を表している。データ定義には、処理されるデータのデータID、データ名、フィールド名、型(データ型)が定義されている。
図9は、フロー定義の処理定義例を示す図である。図9に示すブロックの上段から、処理P1、P2、P3の処理定義を表している。処理定義には、処理名、処理の種類、処理型、入力データのデータID(入力データID)、出力データのデータID(出力データID)、属性名、属性名の値が定義されている。
図10〜図13は、句テンプレート例を示す図である。
句テンプレートは、クエリ言語毎に用意される。例えば、句分割テンプレート記憶部15には、クエリ言語EPL(Event Processing Language)およびHiveQLの2種類のクエリ言語に対応する句テンプレートが記憶され、EPLの句テンプレートは、処理型がリアルタイムの処理の場合に、HiveQLの句テンプレートは、処理型がバッチの処理の場合に適用されるものとする。
図10は、日時を時刻に変換する処理に対応するクエリの各句テンプレート例であり、図10(A)は、EPL用のSELECT句、FROM句の句テンプレート例、図10(B)は、HiveQL用のSELECT句、FROM句の句テンプレート例である。
図11は、値範囲を指定する処理に対応するクエリの各句テンプレート例であり、図11(A)は、EPL用のSELECT句、FROM句、WHERE句の句テンプレート例、図11(B)は、HiveQL用のSELECT句、FROM句、WHERE句の句テンプレート例である。
図12は、フィールドを選択する処理に対応するクエリの各句テンプレート例であり、図12(A)は、EPL用のSELECT句、FROM句の句テンプレート例、図12(B)は、HiveQL用のSELECT句、FROM句の句テンプレート例である。
図13は、処理型および処理名と適用される句テンプレートとの対応関係を示すテーブル例である。処理型や句が増加する場合には、図13に示すテーブルに列を追加してテンプレート登録することができる。
以下、統合コンポーネント生成装置1の動作を説明する。
図14は、統合コンポーネント生成装置1の概要処理フロー例を示す図である。
統合コンポーネント生成装置1に備えられたクエリ統合装置10の第1統合クエリ生成部11は、フロー定義2を取得し、フロー定義2の各処理にクエリ未生成を示すフラグを付加する(ステップS1)。そして、第1統合クエリ生成部11は、句分割テンプレート記憶部15を参照して句分割による統合クエリ生成処理を行い、生成した統合クエリを含む全てのクエリを生成クエリ記憶部17に保存する(ステップS2)。
次に、第2統合クエリ生成部13は、生成クエリ記憶部17に保存されたクエリに対し、入れ子による統合クエリ生成処理を行い、生成した統合クエリを含む全てのクエリを生成クエリ記憶部17に保存する(ステップS3)。
統合コンポーネント生成部20は、コンポーネントテンプレート記憶部21を参照して、生成クエリ記憶部17に保存されたクエリ毎にコンポーネントを生成し、生成したコンポーネント3を出力する(ステップS4)。
図15は、句分割による統合クエリ生成処理(ステップS2)のより詳細な処理フロー例を示す図である。
第1統合クエリ生成部11は、フロー定義2の先頭から、フラグをもとに、クエリ未生成の処理が存在するかを判定し(ステップS21)、クエリ未生成の処理があれば(ステップS21のY)、フロー定義2からクエリ未生成の処理を選択して対象処理とし(ステップS22)、クエリ未生成の処理がなければ(ステップS21のN)、処理を終了する。
第1統合クエリ生成部11は、対象処理の後続処理があるかを判定する(ステップS23)。第1統合クエリ生成部11は、具体的には、図16に示すように、対象処理の出力データと同じIDの入力データを持つ処理をフロー定義2から検索し、検索できた場合に、後続処理があると判定する。
対象処理に後続処理があれば(ステップS23のY)、第1統合クエリ生成部11は、対象処理と後続処理との統合可否を判定する(ステップS24)。ステップS24の処理の詳細は後述する。
ステップS24の処理の結果、対象処理と後続処理との統合が可能であれば(ステップS25のY)、第1統合クエリ生成部11は、対象処理と後続処理との句毎の要素を結合して統合クエリの各句を生成し、生成クエリ記憶部17に対象処理の各句として保存する(ステップS26)。具体的には、第1統合クエリ生成部11は、フロー定義2の対象処理および後続処理のデータ定義を参照し、句分割テンプレート記憶部15から処理名に対応する句テンプレートを用いて各句を生成する。図13のデータテーブルが参照され、対象処理が処理P2で後続処理が処理P3である場合に、SELECT句の句テンプレートT11(処理P3)、FROM句の句テンプレートT6(処理P2)、WHERE句の句テンプレートT7(処理P2)が指定される。そして、図17に示すように、句毎に対象処理と後続処理との要素を結合した各句(SELECT句q4、FROM句q5、WHERE句q6)が生成される。
第1統合クエリ生成部11は、対象処理と後続処理の演算型の和を、対象処理の演算型として生成クエリ記憶部17に保存する(ステップS27)。さらに、第1統合クエリ生成部11は、後続処理をフロー定義2から削除する(ステップS28)。
図18に示すように、対象処理が処理P2で後続処理が処理P3である場合に、生成クエリ記憶部17には、対象処理の句として、生成された各句q4、q5、q6、および演算型「選択+射影」が保存される。また、図18の処理名の斜線は、その処理が削除されていることを表す。
ステップS24の処理の結果、対象処理と後続処理との統合が可能でなければ(ステップS25のN)、第1統合クエリ生成部11は、対象処理のクエリの各句を生成し、各句と演算型を生成クエリ記憶部17に保存する(ステップS29)。
対象処理が処理P1で後続処理と統合不可である場合に、SELECT句の句テンプレートT1(処理P1)、FROM句の句テンプレートT2(処理P1)が指定され、図19に示すように、句毎に対象処理の要素をそのまま用いた各句(SELECT句q1、FROM句q2)が生成される。図20に示すように、生成クエリ記憶部17には、対象処理の句として、生成された各句q1、q2および演算型「拡張」が保存される。
そして、ステップS23の処理の結果、対象処理に後続処理がなければ(ステップS23のN)、第1統合クエリ生成部11は、対象処理のクエリの各句を生成して、生成クエリ記憶部17に保存する(ステップS29)。第1統合クエリ生成部11は、生成クエリ記憶部17に保存した各処理の各句を結合し、その処理のクエリとして生成クエリ記憶部17に保存する(ステップS210)。図21に示すように、処理P1に対応するクエリQ10が、処理P2(P2+P3)に対応するクエリQ11が生成される。
図22(A)は、処理P1についてクエリQ10の例、図22(B)は、処理P2についてクエリQ11の例を示す図である。
図23は、統合可否判定処理(ステップS24)のより詳細な処理フロー例を示す図である。
第1統合クエリ生成部11は、フロー定義2中の対象処理と後続処理とを参照し(ステップS241)、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在するかを判定する(ステップS242)。
対象処理と後続処理の処理型が同じ、かつ、対象処理の後続処理が複数存在しない場合に(ステップS242のN)、対象処理と後続処理の演算型を計算する(ステップS243)。
ステップS243の処理の結果、対象処理または後続処理の演算型が、拡張、選択、射影以外の演算型を含まない場合に(ステップS244のN)、さらに、対象処理の演算型が拡張を含まない場合には(ステップS245のN)、第1統合クエリ生成部11は、統合可と判定する(ステップS246)。一方、対象処理の演算型が拡張を含む場合は(ステップS245のY)、第1統合クエリ生成部11は、さらに後続処理の演算型が拡張または選択を含むかを判定する(ステップS247)。後続処理の演算型が拡張または選択を含まない場合は(ステップS247のN)、第1統合クエリ生成部11は、統合可と判定し(ステップS246)、後続処理の演算型が拡張または選択を含む場合は(ステップS247のY)、さらに、対象処理で追加したフィールドを後続処理で参照しているかを判定する(ステップS248)。対象処理で追加したフィールドを後続処理で参照していなければ(ステップS248のN)、第1統合クエリ生成部11は、統合可と判定する(ステップS246)。対象処理で追加したフィールドを後続処理で参照していれば(ステップS248のY)、第1統合クエリ生成部11は、統合不可と判定する(ステップS249)。
ステップS242の処理で、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在する場合(ステップS242のY)、または、ステップS244の処理で、対象処理または後続処理の演算型が、拡張、選択、射影以外の演算型を含む場合には(ステップS244のY)、第1統合クエリ生成部11は、統合不可と判定する(ステップS249)。
図24は、演算型計算処理(ステップS243)のより詳細な処理フロー例を示す図である。
第1統合クエリ生成部11は、生成クエリ記憶部17に、対象処理の演算型が登録済みであるかを判定し(ステップS431)、演算型が登録済みでなければ(ステップS431のN)、演算型を空(Φ)にして(ステップS432)、フロー定義2から、対象処理の入力データと出力データのスキーマを取得する(ステップS433)。
第1統合クエリ生成部11は、出力データに、入力データにはないフィールドが存在するかを判定する(ステップS434)。出力データに、入力データにはないフィールドが存在すれば(ステップS434のY)、第1統合クエリ生成部11は、生成クエリ記憶部の演算型に拡張を追加し(ステップS435)、入力データにはないフィールドが存在しなければ(ステップS434のN)、ステップS436の処理に進む。
例えば、図25に示す処理P1(日時→時刻変換)では、処理定義に定義された新しいフィールド「時刻」が出力データに追加されているので、処理P1の演算型は拡張と判定される。
第1統合クエリ生成部11は、出力データに、入力データの全フィールドが揃っているかを判定する(ステップS436)。入力データの全フィールドが揃っていなければ(ステップS436のN)、第1統合クエリ生成部11は、生成クエリ記憶部の演算型に射影を追加し(ステップS437)、入力データの全フィールドが揃っていれば(ステップS436のY)、ステップS438の処理に進む。
例えば、図26に示す処理P3(フィールド選択)では、入力データと出力データのフィールドが揃っておらず、出力データに入力データの全フィールドが含まれていないので(不一致(減少))、処理P3の演算型は射影と判定される。
第1統合クエリ生成部11は、対象処理にWHERE句の句テンプレートが存在するかを判定する(ステップS438)。対象処理にWHERE句の句テンプレートが存在すれば(ステップS438のY)、第1統合クエリ生成部11は、生成クエリ記憶部の演算型に選択を追加し(ステップS439)、対象処理にWHERE句の句テンプレートが存在しなければ(ステップS438のN)、ステップS4310の処理に進む。
例えば、図27に示す処理P2(値範囲指定)では、入力データと出力データのフィールドが一致し、処理に適用されたWHERE句の句テンプレートが存在するので、処理P2の演算型は選択と判定される。
第1統合クエリ生成部11は、SELECT、FROM、WHERE以外の句テンプレートが存在するかを判定する(ステップS4310)。対象処理にSELECT、FROM、WHERE以外の句テンプレートが存在すれば(ステップS4310のY)、第1統合クエリ生成部11は、生成クエリ記憶部の演算型にその他を追加し(ステップS4311)、対象処理にSELECT、FROM、WHERE以外の句テンプレートが存在しなければ(ステップS4310のN)、処理を終了する。
処理の演算型が登録済みであれば(ステップS431のY)、対象処理の演算型を生成クエリ記憶部17から取得し(ステップS4312)、処理を終了する。
図28は、入れ子による統合クエリ生成処理(ステップS3)のより詳細な処理フロー例を示す図である。
第2統合クエリ生成部13は、生成クエリ記憶部17から、第1統合クエリ生成部11により生成された各クエリに入れ子による統合の未実施を示すフラグを付加する。そして、第2統合クエリ生成部13は、入れ子による統合が未実施の処理があるかを判定する(ステップS31)。
入れ子による統合が未実施の処理があれば(ステップS31のY)、第2統合クエリ生成部13は、生成クエリ記憶部17に保存されたクエリの先頭から入れ子による統合未実施の処理を選択し、対象処理とする(ステップS32)。第2統合クエリ生成部13は、対象処理の後続処理があるかを判定する(ステップS33)。対象処理の後続処理があれば(ステップS33のY)、第2統合クエリ生成部13は、生成クエリ記憶部17から対象処理の後続処理を選択する(ステップS34)。
第2統合クエリ生成部13は、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在するかを判定する(ステップS35)。
対象処理と後続処理の処理型が同じ、かつ、対象処理の後続処理が複数存在しない場合に(ステップS35のN)、第2統合クエリ生成部13は、対象処理と後続処理の生成クエリを入れ子により統合し、統合クエリを生成する(ステップS36)。第2統合クエリ生成部13は、生成した統合クエリを対象処理のクエリとして生成クエリ記憶部へ保存し(ステップS37)、後続処理を生成クエリ記憶部17から削除する(ステップS38)。
図29に示すように、処理P1の生成クエリQ10と処理P2(P2+P3)の生成クエリQ11とが入れ子により統合され、統合クエリQ20が生成される。そして、図30に示すように、生成クエリ記憶部17の処理P1(日時→時刻変換)の生成クエリが統合クエリQ20に置き換えられ、処理P2(値範囲指定)が削除される。
ステップS33の処理で、対象処理の後続処理がない場合(ステップS33のN)、または、ステップS35の処理で、対象処理と後続処理の処理型が異なるか、または、対象処理の後続処理が複数存在する場合(ステップS35のY)、対象処理について統合済みをフロー定義にマークする(ステップS39)。
図31は、コンポーネント生成処理(ステップS4)のより詳細な処理フロー例を示す図である。
統合コンポーネント生成部20は、フロー定義2にコンポーネント未生成の処理があるかを判定する(ステップS41)。コンポーネント未生成の処理があれば(ステップS41のY)、統合コンポーネント生成部20は、フロー定義2からコンポーネント未生成の処理を選択し(ステップS42)、その処理の処理型をもとに、コンポーネントテンプレート記憶部21から、対応するコンポーネントテンプレートを取得する(ステップS43)。
コンポーネントテンプレート記憶部21には、図32に示すように、クエリ言語に対応するコンポーネントテンプレートが設定されている。図33は、コンポーネントテンプレートの例を示す図である。図33(A)は、EPL用のコンポーネントテンプレートC1の例、図33(B)は、HiveQL用のコンポーネントテンプレートC2の例である。ここで、処理型に応じてクエリ言語が選択されるので、処理型がリアルタイムであればコンポーネントテンプレートC1が選択され、処理型がバッチであればコンポーネントテンプレートC2が選択される。
統合コンポーネント生成部20は、生成クエリ記憶部17から、選択した処理に対応するクエリを取得し(ステップS44)、選択したコンポーネントテンプレートをもとに、コンポーネントを生成する(ステップS45)。フロー定義2から処理P1の処理型がリアルタイムであれば、コンポーネントテンプレートC1が選択されるため、図34に示すように、コンポーネントテンプレートC1に、生成クエリ記憶部17に保存されていた処理P1の統合クエリQ20が適用されて、コンポーネントが生成される。
統合コンポーネント生成部20によって生成されたコンポーネント3は出力され、記憶装置、記憶媒体等に保存される。
以上説明した統合コンポーネント生成装置1は、図4に示す処理部を備える専用ハードウェアとして実施することができる。
また、統合コンポーネント生成装置1を、図35に示すような、CPU101、メモリ102、記憶装置(ハードディスク)103、入力装置(キーボード)104、出力装置(ディスプレイ)105、ネットワーク接続装置106等が内部のネットワーク等で接続されたコンピュータ100で実施することができる。
さらに、統合コンポーネント生成装置1を、コンピュータ100で実行可能なプログラムとして実施することができる。この場合に、図4に示す統合コンポーネント生成装置1の処理部の機能を実現するプログラムを実装し、コンピュータ100上で実行することにより、実施する。すなわち、図4に示したクエリ統合装置10の第1統合クエリ生成部11,第2統合クエリ生成部13、さらに、統合コンポーネント生成部20の機能をコンピュータに実行させる実行プログラムをコンピュータ100に読み込ませ、実行させることによって,統合コンポーネント生成装置1を実現することができる。
なお、実行プログラムは、CD−ROM、CD−RW、DVD−R、DVD−RAM、DVD−RW等やフレキシブルディスク等の記録媒体だけでなく、通信回線の先に備えられた他の記憶装置やコンピュータのハードディスク等に記憶されるものであってもよい。
なお、統合コンポーネント生成装置1のクエリ統合装置10を構成する要素は、任意の組合せで実現されてもよい。複数の構成要素が1つの部材として実現されてもよく、1つの構成要素が複数の部材から構成されてもよい。また、クエリ統合装置10は、上述した実施形態に限定されず、本発明の要旨を逸脱しない範囲において各種の改良および変更を行ってもよいことは当然である。
以上説明したように、開示したクエリ統合装置10によれば、フロー定義2に含まれる各処理のクエリを統合するため、生成するクエリ数を大幅に減らすことができ、クエリに対応するコンポーネント数も大幅に減らすことができる。よって、コンポーネント数の削減に応じて通信のオーバーヘッド等を小さくすることできる。