(57)【特許請求の範囲】
【請求項１】
１又は２以上のデータ記憶システム内でデータを処理する方法であって、
１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取るステップであって、前記１又は２以上のソースエンティティの少なくとも一部が、前記１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、ステップと、
前記マッピング情報を処理して、１又は２以上の対象エンティティの前記１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成するステップであって、前記手順仕様が、実行されるとき、異なるスキーマにより定義されたデータベースフォーマット間で変換する、ステップ
とを含み、
前記処理が、
ノードの複数の集合を生成するステップであって、各集合が、前記マッピング情報により指定される属性に関連付けられた関係式を表すノードを含み、前記集合の１又は２以上の各々が、対応する有向非周期グラフを形成し、第１の集合が第１の有向非周期グラフを形成し、前記第１の有向非周期グラフが、前記マッピング情報により指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、前記第１の有向非周期グラフが、第１のノードと異なる１又は２以上の他のノードへのリンクを含み、前記第１の有向非周期グラフ中の前記１又は２以上の他のノードの少なくとも一部がそれぞれの関係式を表し、前記第１の有向非周期グラフ中の前記１又は２以上の他のノードのうちの一つのノードが第２の関係式を表し、前記第２の関係式が、前記第１の有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられる、ステップと、
マージされるノードの関係式を比較することに基づいて、前記集合の少なくとも２つを互いにマージして第３の集合を形成するし、マージされている前記集合が前記第１の集合を含み、生成された前記手順仕様が前記第３の集合に基づく、ステップと
を含む、前記方法。
【請求項２】
前記マッピング情報が、第１のソースエンティティの属性の値及び第２のソースエンティティの属性の値から対象エンティティの属性の値を定義する第１のマッピング規則を含む、請求項１に記載の方法。
【請求項３】
ノードの第１の集合が前記第１のマッピング規則に関連付けられ、かつ、第１のソースエンティティ及び第２のソースエンティティを参照する関係代数演算を含む第１の関係式を表す第１のノードと、前記第１のソースエンティティを含む関係式を表す、前記第１のノードにリンクされた第２のノードと、前記第２のソースエンティティを含む関係式を表す、前記第１のノードにリンクされた第３のノードとを含む、請求項２に記載の方法。
【請求項４】
前記マッピング情報が、第１のソースエンティティの属性の値から対象エンティティの属性の値を定義する第２のマッピング規則を含む、請求項３に記載の方法。
【請求項５】
マージするステップが、前記第１の集合と、前記第２のマッピング規則に関連付けられた１又は２以上のノードの第２の集合とをマージするステップを含み、第２のノードと、第１のソースエンティティを含む関係式を表す前記第２の集合の中のノードとをマージすることを含む、請求項４に記載の方法。
【請求項６】
前記関係代数演算が結合演算である、請求項３〜５のいずれかに記載の方法。
【請求項７】
前記関係代数演算が集約演算である、請求項３〜５のいずれかに記載の方法。
【請求項８】
第１のソースエンティティと第２のソースエンティティが、スキーマで定義される関係に従って関係付けられる請求項２〜７のいずれかに記載の方法。
【請求項９】
前記スキーマが、複数個のエンティティを含み、前記エンティティ間の関係が、一対一の関係、一対多の関係、又は多対多の関係、の１又は２以上を含む、請求項８に記載の方法。
【請求項１０】
前記手順仕様を生成するステップが、前記第３の集合からデータフローグラフを生成するステップを含み、前記データフローグラフが、前記第３の集合のそれぞれのノードの関係式に対応する演算を実行するように構成された構成要素と、前記構成要素の出力ポートと入力ポートの間のレコードの流れを表すリンクとを含む、請求項１〜９のいずれかに記載の方法。
【請求項１１】
前記手順仕様を生成するステップが、前記第３の集合からクエリ言語仕様を生成するステップを含み、前記クエリ言語仕様が、前記第３の集合のそれぞれのノードの関係式に対応する演算を実行するクエリ式を含む、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
前記手順仕様を生成するステップが、前記第３の集合からコンピュータプログラムを生成するステップを含み、前記コンピュータプログラムが、前記第３の集合のそれぞれのノードの関係式に対応する演算を実行する関数又は式を含む、請求項１〜１１のいずれかに記載の方法。
【請求項１３】
前記コンピュータプログラムが、Ｊａｖａ、Ｃ、Ｃ＋＋、のプログラミング言語の少なくとも１つで指定される、請求項１２に記載の方法。
【請求項１４】
前記手順仕様に従ってデータ記憶システム中のレコードを処理して、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するステップをさらに含む、請求項１〜１３のいずれかに記載の方法。
【請求項１５】
１又は２以上のデータ記憶システム内でデータを処理するためのコンピュータプログラムを記憶したコンピュータ読取り可能記憶媒体であって、前記コンピュータプログラムが、コンピューティングシステムに、請求項１〜１４のいずれかに記載の方法を実施させるための命令を含む、前記コンピュータ読取り可能記憶媒体。
【請求項１６】
１又は２以上のデータ記憶システムと、
１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取る入力装置又はポートであって、前記１又は２以上のソースエンティティの少なくとも一部が、前記１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、入力装置又はポートと、
請求項１〜１４のいずれかに記載の方法を実施するように構成された少なくとも１つのプロセッサとを含む、コンピューティングシステム。
【請求項１７】
１又は２以上のデータ記憶システムと、
１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取る手段であって、前記１又は２以上のソースエンティティの少なくとも一部が、前記１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、手段と、
前記マッピング情報を処理して、１又は２以上の対象エンティティの前記１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成する手段であって、前記手順仕様が、実行されるとき、異なるスキーマにより定義されたデータベースフォーマット間で変換する、手段と
を含むコンピューティングシステムであって、前記処理が、
ノードの複数の集合を生成するステップであって、各集合が、前記マッピング情報で指定される属性に関連付けられた関係式を表すノードを含み、前記集合の１又は２以上の各々が、対応する有向非周期グラフを形成し、第１の集合が第１の有向非周期グラフを形成し、前記第１の有向非周期グラフが、前記マッピング情報により指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、前記第１の有向非周期グラフが、第１のノードと異なる１又は２以上の他のノードへのリンクを含み、前記第１の有向非周期グラフ中の前記１又は２以上の他のノードの少なくとも一部がそれぞれの関係式を表し、前記第１の有向非周期グラフ中の前記１又は２以上の他のノードのうちの一つのノードが第２の関係式を表し、前記第２の関係式が、前記第１の有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられる、ステップと、
マージされるノードの関係式を比較することに基づいて、前記集合の少なくとも２つを互いにマージして第３の集合を形成し、マージされている前記集合が前記第１の集合を含み、生成された前記手順仕様が前記第３の集合に基づく、ステップと
を含む、前記コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１２年７月２４日に出願された米国出願第６１／６７５，０５３号に対する優先権を主張し、同文献は参照により本明細書に組み込まれる。
【０００２】
本明細書の記載は、データモデルにおけるエンティティのマッピングに関する。
【背景技術】
【０００３】
情報システムでは、データモデルを使用して、例えば処理される、又はデータベースに記憶されるデータの要件、データの種類、及びデータの計算を記述する。データモデルは、エンティティ及び１又は２以上のスキーマで定義されるそれらエンティティ間の関係を含む。一般に、エンティティは、独立して存在することが可能な、又は一意に識別することが可能な情報領域中の項目を抽象化したものである。関係は、２又は３以上のエンティティを互いにどのように関係付けることができるかを把握する。例えば、関係を動詞と考えることができ、エンティティを名詞と考えることができる。スキーマは、エンティティの特定の集合とそれらエンティティ間の関係を表す。
【０００４】
結合や集約（又は「ロールアップ」）操作などの各種のデータベース操作を使用して、データモデルに関連付けられたデータを伴う複雑な計算を実行することができる。これらの計算は、有向グラフでデータフローとして表すことができ、計算の構成要素はグラフの頂点に関連付けられ、構成要素間のデータフローはグラフのリンク（弧、エッジ）に相当する。そのようなグラフを利用した計算を実装するシステムが米国特許第５，９６６，０７２号明細書、「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，９６６，０７２号明細書
【発明の概要】
【０００６】
一態様では、一般に、１又は２以上のデータ記憶システム内でデータを処理する方法は、１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取るステップであって、１又は２以上のソースエンティティの少なくとも一部は、１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、ステップと、マッピング情報を処理して、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成するステップとを含む。処理は、ノードの複数の集合を生成するステップであって、各集合は、マッピング情報で指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、少なくとも一部の集合は有向非周期グラフを形成し、有向非周期グラフは、有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられたそれぞれの関係式を表す１又は２以上の他のノードへのリンクを含む、ステップを含む。処理は、マージされるノードの関係式を比較することに基づいて、集合の少なくとも２つを互いにマージして第３の集合を形成するステップも含む。
【０００７】
態様は、以下の特徴の１又は２以上を含むことができる。
【０００８】
マッピング情報は、第１のソースエンティティの属性の値及び第２のソースエンティティの属性の値から対象エンティティの属性の値を定義する第１のマッピング規則を含む。
【０００９】
第１のマッピング規則に関連付けられたノードの第１の集合が、第１のソースエンティティ及び第２のソースエンティティを参照する関係代数演算を含む第１の関係式を表す第１のノードと、第１のソースエンティティを含む関係式を表す、第１のノードにリンクされた第２のノードと、第２のソースエンティティを含む関係式を表す、第１のノードにリンクされた第３のノードとを含む。
【００１０】
マッピング情報が、第１のソースエンティティの属性の値から対象エンティティの属性の値を定義する第２のマッピング規則を含む。
【００１１】
マージするステップが、第１の集合を、第２のマッピング規則に関連付けられた１又は２以上のノードの第２の集合とマージするステップを含み、第２のノードを、第１のソースエンティティを含む関係式を表す第２の集合の中のノードとマージすることを含む。
【００１２】
関係代数演算は結合演算である。
【００１３】
関係代数演算は集約演算である。
【００１４】
第１のソースエンティティと第２のソースエンティティが、スキーマで定義される関係に従って関係付けられる。
【００１５】
スキーマが複数個のエンティティを含み、エンティティ間の関係が、一対一の関係、一対多の関係、又は多対多の関係、の１又は２以上を含む。
【００１６】
手順仕様を生成するステップが、第３の集合からデータフローグラフを生成するステップを含み、データフローグラフは、第３の集合のそれぞれのノードの関係式に対応する演算を実行するように構成された構成要素と、構成要素の出力ポートと入力ポートの間のレコードの流れを表すリンクとを含む。
【００１７】
手順仕様を生成するステップが、第３の集合からクエリ言語仕様を生成するステップを含み、クエリ言語仕様が、第３の集合のそれぞれのノードの関係式に対応する演算を実行するクエリ式を含む。
【００１８】
手順仕様を生成するステップが、第３の集合からコンピュータプログラムを生成するステップを含み、コンピュータプログラムが、第３の集合のそれぞれのノードの関係式に対応する演算を実行する関数又は式を含む。
【００１９】
コンピュータプログラムは、Ｊａｖａ、Ｃ、Ｃ＋＋、のプログラミング言語の少なくとも１つで指定される。
【００２０】
方法は、手順仕様に従ってデータ記憶システム中のレコードを処理して、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するステップをさらに含む。
【００２１】
別の態様では、一般に、コンピュータ読取り可能記憶媒体が、１又は２以上のデータ記憶システム内でデータを処理するためのコンピュータプログラムを記憶する。コンピュータプログラムは、コンピューティングシステムに、１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取らせ、１又は２以上のソースエンティティの少なくとも一部は、１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応し、マッピング情報を処理させて、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成する命令を含む。処理は、ノードの複数の集合を生成するステップであって、各集合は、マッピング情報で指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、少なくとも一部の集合は有向非周期グラフを形成し、有向非周期グラフは、有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられたそれぞれの関係式を表す１又は２以上の他のノードへのリンクを含む、ステップを含む。処理は、マージされるノードの関係式を比較することに基づいて、集合の少なくとも２つを互いにマージして第３の集合を形成するステップも含む。
【００２２】
別の態様では、一般に、コンピューティングシステムは、１又は２以上のデータ記憶システムと、１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取る入力装置又はポートであって、１又は２以上のソースエンティティの少なくとも一部は、１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、入力装置又はポートと、マッピング情報を処理して、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成するように構成された少なくとも１つのプロセッサとを含む。処理は、ノードの複数の集合を生成するステップであって、各集合は、マッピング情報で指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、少なくとも一部の集合は有向非周期グラフを形成し、有向非周期グラフは、有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられたそれぞれの関係式を表す１又は２以上の他のノードへのリンクを含む、ステップを含む。処理は、マージされるノードの関係式を比較することに基づいて、集合の少なくとも２つを互いにマージして第３の集合を形成するステップも含む。
【００２３】
別の態様では、一般に、コンピューティングシステムは、１又は２以上のデータ記憶システムと、１又は２以上のソースエンティティの１又は２以上の属性から１又は２以上の対象エンティティの１又は２以上の属性を指定するマッピング情報を受け取る手段であって、１又は２以上のソースエンティティの少なくとも一部は、１又は２以上のデータ記憶システム中のそれぞれのレコードセットに対応する、手段と、マッピング情報を処理して、１又は２以上の対象エンティティの１又は２以上の属性の少なくとも一部に対応する値を計算するための手順仕様を生成する手段とを含む。処理は、ノードの複数の集合を生成するステップであって、各集合は、マッピング情報で指定される属性に関連付けられた第１の関係式を表す第１のノードを含み、少なくとも一部の集合は有向非周期グラフを形成し、有向非周期グラフは、有向非周期グラフ中のノードの関係式から参照される少なくとも１つのソースエンティティの少なくとも１つの属性に関連付けられたそれぞれの関係式を表す１又は２以上の他のノードへのリンクを含む、ステップを含む。処理は、マージされるノードの関係式を比較することに基づいて、集合の少なくとも２つを互いにマージして第３の集合を形成するステップも含む。
【００２４】
態様は以下の利点の１又は２以上を有することができる。
【００２５】
例えば実行可能モジュール（例えばデータフローグラフ）の形態の手順仕様を生成する技術により、データに関連する問題を、ソーススキーマと対象スキーマとのマッピングに基づいて表現することができるようになる。所望の対象スキーマのエンティティの属性を、既存のソーススキーマのエンティティの属性に基づいて表現できるようにすることにより、ユーザ入力を高レベルの抽象化で指定することができる。例えば、ユーザは、他の入手元にある補助情報も参照するデータセットのデータに基づいて規則を表現することができ、補助情報をそのような入手元から抽出するためのデータフローグラフを手作業で構築せずに済む。ユーザ入力が対象スキーマを定義し、その対象スキーマを処理して、１又は２以上のソーススキーマの任意のエンティティから必要とされるすべての情報を抽出するための手順仕様を得る。
【００２６】
本発明の他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００２７】
【図１Ａ】グラフを利用した計算を管理する例示的なコンピューティングシステムのブロック図である。
【図１Ｂ】データフローグラフの例を示す図である。
【図２Ａ−２Ｂ】エンティティ関係図として表されたスキーマの例の図である。
【図３】ソーススキーマから対象エンティティへのマッピング例を示す図である。
【図４】ソーススキーマ及びマッピング情報をグラフの構成要素に変換する工程例を示す図である。
【図５】ソーススキーマから対象エンティティへのマッピングのより複雑な例を示す図である。
【図６】式ノードの例を示す図である。
【図７−８】ソーススキーマから又はそれ以上の対象エンティティへのマッピング例を示す図である。
【図９Ａ−９Ｂ】スキーマの例を示す図である。
【図１０Ａ−１０Ｄ】式ノードからデータフローグラフを生成する際の進行を示す図である。
【図１１Ａ−１１Ｃ】生成されたデータフローグラフの構成例を示す図である。
【図１２Ａ−１２Ｂ】データモデルの例の図である。
【発明を実施するための形態】
【００２８】
情報システムでは、データ及びそのデータに対する計算を使用して解決しようとする問題の記述は、各種形態で受け取られる。データ及び計算は、エンティティ及びそれらエンティティ間の関係に対応することができる（ＥＲ図など）。通例、問題記述は、ユーザによって例えば複合クエリ言語を使用してプリミティブ形態のデータと式に分解又は変換される。実施形態によっては、システムが元の問題記述からデータフローグラフ又はクエリ言語式を直接生成することができる。これに関して、問題記述を自動的に分解して、例えば、生成されるグラフ又は式の一部をなす、結合、ロールアップ、又は他のデータ変換のセットにするシステム及び方法が記載される。また、このシステム及び方法は、例えば外部のデータベースやファイルに記憶された補助情報を参照することができる。
【００２９】
図１Ａは、グラフを利用した計算を開発、実行、及び管理するためのコンピューティングシステム１００の各部の相互関係を示すブロック図である。グラフを利用した計算は、有向グラフで表される「データフローグラフ」を使用して実施され、グラフの頂点が構成要素を表し（例えば、頂点が、データセットなどのソース又はシンクの演算子タイプを有する構成要素を表す、又は頂点が、指定された演算子タイプに従ってデータに演算を実行する構成要素を表す）、グラフ中の有向のリンク又は「エッジ」が構成要素間のデータの流れを表す。グラフィック開発環境（ＧＤＥ，graphic development environment）１０２は、実行可能なデータフローグラフを指定し、データフローグラフの構成要素にパラメータを定義するためのユーザインターフェースを提供する。ＧＤＥ１０２は、リポジトリ１０４及び並列動作環境１０６と通信する。リポジトリ１０４及び並列動作環境１０６には、ユーザインターフェースモジュール１０８及びエグゼクティブ２１０も結合される。エグゼクティブ２１０は、並列動作環境１０６内のデータフローグラフの実行を制御する。データフローグラフは、ＧＤＥ１０２との対話を必要とせずにソフトウェアのアプリケーションプログラミングインターフェース（ＡＰＩ）を使用して生成することもできる。
【００３０】
リポジトリ１０４は、スケーラブルなオブジェクト指向のデータベースシステムであり、グラフを利用したアプリケーションの開発及び実行、並びにグラフを利用するアプリケーションと他のシステム（例えば他のオペレーティングシステム）の間のメタデータの交換を支援するように設計されている。リポジトリ１０４は、ドキュメンテーション、レコード形式（例えば、テーブルのレコードのフィールドやデータタイプ）、変換関数、データフローグラフの仕様、及び監視情報を含むあらゆる種類のメタデータの記憶システムである。リポジトリ１０４は、外部のデータストア１１２に記憶されたデータを含む、コンピューティングシステム１００で処理される実際のデータを表すデータオブジェクト及びエンティティも記憶する。
【００３１】
並列動作環境１０６は、ＧＤＥ１０２で生成されたデータフローグラフの仕様を受け付け、そのデータフローグラフで定義される処理ロジック及びリソースに対応するコンピュータ命令を実行する。動作環境１０６は、ＵＮＩＸオペレーティングシステムなどの適切なオペレーティングシステムの制御下で１又は２以上の汎用コンピュータにホストすることができる。例えば、動作環境１０６は、複数の中央演算処理装置（ＣＰＵ，central processing unit）を使用するコンピュータシステム構成を含む多ノードの並列コンピューティングシステムで実行することができ、ＣＰＵは、ローカルにあっても（例えばＳＭＰコンピュータなどのマルチプロセッサシステム）、又はローカルで分散しても（例えばクラスタ若しくはＭＰＰとして結合された複数個のプロセッサ）、又はリモートにあっても、又はリモートで分散しても（例えばＬＡＮ若しくはＷＡＮネットワークを介して結合された複数個のプロセッサ）、又はそれらの組み合わせであってもよい。
【００３２】
ユーザインターフェースモジュール１０８は、リポジトリ１０４の内容をウェブブラウザに基づいて表示する。ユーザインターフェースモジュール１０８を使用して、ユーザは、特に、オブジェクトの閲覧、新しいオブジェクトの作成、及び既存オブジェクトの変更を行うことができる。ユーザは、記憶されたデータオブジェクトに含まれる情報及び／又は関連付けられた情報をユーザインターフェースモジュール１０８を通じて閲覧し、また任意選択で編集してもよい。
【００３３】
エグゼクティブ１１０は、ユーザインターフェースモジュール１０８を通じてアクセスされるリポジトリベースのジョブスケジュールシステムであり、省略してもよい。エグゼクティブ１１０は、ジョブ及びジョブ待ち行列をリポジトリ１０４内にオブジェクトとして保持し、ユーザインターフェースモジュール１０８がジョブ及びジョブ待ち行列のビューを提供し、それらの操作を容易にする。
【００３４】
データフローグラフを生成し、実行するシステム１００の一例は以下の特徴を有する。（下記の特徴のすべてよりも少ない特徴を備えるシステムの他の例も可能である。）
・データフローグラフの各頂点は、指定された演算子をデータに適用する構成要素を表し、頂点間は、構成要素間のデータの流れ（「データフロー」と呼ぶ）を表す有向リンクで結ばれる。
・各構成要素は、「ポート」と呼ぶ名前付きの接続点を少なくとも１つ有し、構成要素の演算子は、１又は２以上の「入力ポート」に入る入力データに作用し、及び／又は、１又は２以上の「出力ポート」から出る出力データを提供する。
・各ポートは、そのポートに入る、又はそのポートから出るデータ項目の形式を定義するデータ形式に関連付けられる（例えば、レコードの流れについて、データ形式は、レコードの形式を個々のデータ項目として定義するレコード形式を含むことができる）。
・各ポートは許可された基数（cardinality）を有し、これは、そのポートに接続できるデータフロー数の制約である。例えば、ポートに許可された基数は、そのポートに１つのみのデータフローを接続することを許すか、又は複数のデータフローを接続することを許す。
・グラフ中の各データフローは、１つの構成要素の出力ポートを別の構成要素の入力ポートに接続する。その２つのポートは同じデータ形式に関連付けられる。
・システム１００は、データフローグラフ内の循環を防止することができる。データフローグラフのある頂点からデータフローを横断することにより経路をたどってその頂点自身に戻ることが可能である場合、その特定のデータフローグラフは循環を有すると表現することができ、実行を阻止することができる。
・構成要素の演算子は、その構成要素によって適用される演算子の種類を指定する演算子タイプを有する（例えば、入力ファイルを読み込む演算子には「ファイル入力」演算子タイプが使用され、ロールアップ演算子を適用する構成要素には「ロールアップ」演算子タイプが使用される）。
・演算子は、その演算子を設定するために使用されるパラメータにも関連付けることができる。例えば、ファイル入力演算子は、読み込む入力ファイルの名前を提供するパラメータを有することができる。サポートされるパラメータのセットは演算子タイプによって異なる。
・構成要素にサポートされる入力ポート及び出力ポートのセットは、その構成要素の演算子タイプによって決まる。演算子タイプは、サポートされるポートに許可される基数も決定することができる。
・構成要素は、自身を識別するカスタマイズ可能なラベルを有することができ、データフローグラフの視覚表現においてその構成要素を表す頂点に表示することができる。ラベルは演算子タイプとは異なるものであり、データフローグラフ内でその構成要素を一意に識別するために使用することができる。
・ポートはそのポートを識別するカスタマイズ可能なラベルを有することができ、そのポートの構成要素の視覚表現においてそのポートの視覚表現に表示することができる。ラベルを使用することにより、構成要素内でポートを一意に識別することができる。
【００３５】
図１Ｂを参照すると、データフローグラフ１２０の視覚表現の例は、「ファイル入力（Input File）」演算子タイプと、それぞれラベル「第１のファイル入力」及び「第２のファイル入力」とを有する２つの構成要素を含む。各構成要素は「ｒｅａｄ」と標記された１つの出力ポートを有する。データフローグラフ１２０は、演算子タイプ「リフォーマット（Reformat）」並びにそれぞれラベル「第１のリフォーマット」及び「第２のリフォーマット」を持つ構成要素の２つのインスタンスを含む。各リフォーマット構成要素は、「ｉｎ」と標記された１つの入力ポートと「ｏｕｔ」と標記された１つの出力ポートを有する。データフローグラフ１２０は、演算子タイプ「結合（Join）」及びラベル「Ａ結合」を有する構成要素のインスタンスを１つ含んでいる。結合構成要素はそれぞれ「ｉｎ０」及び「ｉｎ１」と標記された２つの入力ポート、及び「ｏｕｔ」と標記された１つの出力ポートを有する。データフローグラフ１２０は、演算子タイプ「ファイル出力（Output File）」及びラベル「ファイル出力」を有する構成要素のインスタンスを含む。データフローグラフ１２０は各種ポート間をつなぐ５つのデータフローを含む。構成要素の視覚的外観が異なっている（例えば演算子タイプに基づく）のは、開発者やユーザの利益のためである。
【００３６】
データフローグラフを実行する際、システム１００は、データフローグラフのセマンティックに関連した特定の動作を実行する。例えば、データフローは、順序づけられたデータ項目のセットを表し、各データ項目は、そのデータフローが接続するポートに関連付けられたデータ形式に準拠する。構成要素（例えばプロセス又はスレッドによって実行される）は、自身の入力ポート（存在する場合）からデータ項目を読み込み、自身の演算子の適用に関連する計算を行い、自身の出力ポート（存在する場合）にデータを書き込む。場合によっては、構成要素は外部のデータにもアクセスする（例えば、データベースのファイルを読み書きする、データベースのデータにアクセスする等）。演算子の適用に関連する計算は、入力ポートから読み込まれるデータ項目（存在する場合）、演算子に関連付けられたパラメータ、及び／又は、その構成要素からアクセスされる外部のデータ（例えばファイルやデータベースのテーブル）の状態によって決定することができる。構成要素がデータ項目を出力ポートに書き込む場合、それらのデータ項目はその構成要素に接続されたすべての入力ポートに伝達され、したがって下流の構成要素の演算子への入力として使用される。データフローで表されるデータ項目の関連付けられた順序は、それらのデータ項目が出力ポートと入力ポート間を伝達される順序に対応することができ、場合によっては（必ずしもそうではないが）それらのデータ項目が計算される順序に対応することができる。
【００３７】
ポートのデータ形式の一例はレコード形式であり、これは、所与のレコード内の個々の値のデータタイプを定義し、各値は何らかの識別子で識別される。レコード形式の構文は特定の言語に準拠させることができる。次に示すのは、データ操作言語（ＤＭＬ，data manipulation language）におけるレコード形式の構文の一例である。
【００３８】
【表１】
0006338579.tif 000002
【００３９】
データタイプの一例は「ｉｎｔ」であり、これは、その後の識別子で識別される値をネイティブのバイナリ形式の整数として定義する。システム１００は各種のデータタイプに対応することが可能であるが、説明のために本明細書の例では「ｉｎｔ」データタイプを使用する。このＤＭＬ構文を使用するレコード形式の一例を以下に示す。
【００４０】
【表２】
0006338579.tif 000003
【００４１】
このレコード形式は、ａ１、ａ２、及びａ３と識別される、連続して割り当てられた３つの２進整数からなるレコードに相当する。
【００４２】
システム１００は、構成要素について幅広い演算子タイプに対応する。説明のために、次の演算子タイプ、すなわちファイル入力、ファイル出力、テーブル入力、テーブル出力、リフォーマット、複製、結合、及びロールアップ、を説明する。
【００４３】
ファイル入力構成要素は、（デフォルトで）「ｒｅａｄ」と標記された１つの出力ポートと、読み込むファイルを特定する１つのパラメータ（すなわち「Ｆｉｌｅｎａｍｅ」パラメータ）を有する。読み込みポートは１又は２以上のデータフローに接続することができる。読み込みポートに関連付けられるレコード形式（すなわちｒｅａｄ．ｆｏｒｍａｔ）は、特定されるファイル中のレコードの実際のレコード形式に対応するように（例えば開発者によって）選択される（又は自動的に決定される）。ファイル入力構成要素によって適用される演算子は、特定されたファイルの連続したレコード（すなわち読み込みポートに関連付けられたレコード形式を有するレコード）を読み込み、それを読み込みポートに提供する（例えば特定のバッファに書き込むか、又は何らかの他の通信機構による）。
【００４４】
例えば、ファイル入力構成要素は次のように構成することができる。
【００４５】
【表３】
0006338579.tif 000004
【００４６】
ファイル入力構成要素が特定されたファイルを適切に読み込み、ファイルに含まれるレコードを読み込みポートに提供することを確実にするために、ファイルＡ．ｄａｔ中のレコードに実際に使用される物理的なレコード形式は、提供されるレコード形式ｒｅａｄ．ｆｏｒｍａｔと一致しなければならない。
【００４７】
ファイル出力構成要素は、（デフォルトで）「ｗｒｉｔｅ」と標記された１つの入力ポートと、書き込み対象のファイルを特定する１つのパラメータ（すなわち「Ｆｉｌｅｎａｍｅ」パラメータ）を有する。書き込みポートは、１つのみのデータフローに接続することができる。書き込みポートに関連付けられるレコード形式（すなわちｒｅａｄ．ｆｏｒｍａｔ）は、特定されるファイル内のレコードの実際のレコード形式に対応するように（例えば開発者によって）選択される（又は自動的に決定される）。ファイル出力構成要素によって適用される演算子は、書き込みポートに提供される連続したレコードを受け取り（例えば、特定のバッファから読み出すか、又は何らかの他の通信機構により）、それらを特定されたファイルに書き込む。
【００４８】
ファイル以外の媒体に記憶されたデータにアクセスする演算子タイプは「テーブル入力」や「テーブル出力」の演算子タイプなど他にもあり、これらを使用して例えばリレーショナルデータベースのテーブルに記憶されたデータにアクセスすることができる。そのような他の演算子タイプの設定及び演算子機能は、上記のファイル入力及びファイル出力の演算子タイプと同様である。
【００４９】
リフォーマット構成要素は、（デフォルトで）「ｉｎ」と標記された１つの入力ポート及び（デフォルトで）「ｏｕｔ」と標記された１つの出力ポート並びに１つのパラメータを有し、このパラメータは、構成要素の演算子を、ｉｎポートで受け取られる各入力レコードに実行されてｏｕｔポートに提供される出力レコードを生成する変換関数として定義する。
【００５０】
変換関数は、次の構文を使用してリフォーマット構成要素のパラメータで定義することができ、この構文は、いくつかの出力フィールド各々に式を定義するために複数個のエントリを使用する。
【００５１】
【表４】
0006338579.tif 000005
【００５２】
各フィールドは、ｏｕｔポートのレコード形式によるフィールドの名前である。各式は、リテラル（例えば、１、２、３などの数）、入力フィールド（例えばｉｎ．ａ１）、及び加算（＋）や乗算（＊）の演算子などの各種代数演算子のいずれかからなる式である。式は、入力レコード形式で存在するフィールドのみを参照することを許される。変換関数は、一般に、出力レコード形式のフィールドごとに１つの式を提供するが、変換関数に含まれない出力レコード形式で存在するフィールドのデフォルト値を決定する手順があってもよい。
【００５３】
例えばリフォーマット構成要素は次のように構成することができる。
【００５４】
【表５】
0006338579.tif 000006
【００５５】
複製構成要素は、各入力レコードのコピーを複数生成することができ、（デフォルトで）「ｉｎ」と標記された１つの入力ポートと、（デフォルトで）「ｏｕｔ」と標記された１つの出力ポートを有する。複数のデータフローをｏｕｔポートに接続することができる。
【００５６】
結合演算子を適用する結合構成要素は、（デフォルトで）「ｉｎ０」及び「ｉｎ１」と標記された２つの入力ポートと（デフォルトで）「ｏｕｔ」と標記された１つの出力ポートを有する。結合構成要素は、２つのパラメータ、ｋｅｙ０及びｋｅｙ１を有し、これらは結合演算子のキーフィールドとして使用されるフィールドを指定する。結合演算子は、入力ポートｉｎ０及びｉｎ１のレコードのフィールドをｏｕｔポートのレコードのフィールドにマッピングする変換関数に関連付けられる。リフォーマット構成要素の変換関数が１つの引数を有するのに対し、結合構成要素の変換関数は２つの引数を有する。それ以外の点では、結合構成要素の変換関数の構文は、リフォーマット構成要素の変換関数の構文と同様である。
【００５７】
結合演算子は、２つの入力レコードに関係内部結合を実行することにより結合構成要素によって適用される。例えば、それぞれｉｎ０ポート及びｉｎ１ポートから入力されるすべてのレコードＲ０及びＲ１の対について（ここでキーフィールドＲ０．ｋｅｙ０とＲ１．ｋｅｙ１の値は等しい）、結合構成要素はＲ０及びＲ１に対して変換関数を呼び出し、結果をｏｕｔポートに提供する。
【００５８】
例えば、結合構成要素は次のように構成することができる。
【００５９】
【表６】
0006338579.tif 000007
【００６０】
この結合構成要素は、Ｒ０．ａ３＝Ｒ１．ｂ３であるそれぞれｉｎ０及びｉｎ１から入力されるレコードＲ０とＲ１の対をすべて見つけ、それらのレコードの対を変換関数に渡し、変換関数の結果をｏｕｔポートに提供する。
【００６１】
ロールアップ構成要素は、（デフォルトで）「ｉｎ」と標記された１つの入力ポートと、（デフォルトで）「ｏｕｔ」と標記された１つの出力ポートとを有する。ロールアップ構成要素は、パラメータ「ｋｅｙ」を有し、これはレコードを集約するためにロールアップ演算子によって使用されるキーフィールドと、集約されたレコードについての集約の結果を計算するためにロールアップ演算子で使用される変換関数とを指定する。ロールアップ演算子は、各サブセットのキーフィールドの値が同じになるように入力レコードをサブセットに分割し、各サブセットに変換関数を適用し、結果をｏｕｔポートに提供することにより、ロールアップ構成要素によって適用される。したがって、ロールアップ構成要素は、キーフィールドに出現する個々の値ごとに１つの出力レコードを生成する。
【００６２】
ロールアップ構成要素の変換関数は、集約されたセットの入力レコードの値に累積和、最小値等を計算するために式中で使用されるｓｕｍ、ｍｉｎ、及びｍａｘなどの集約関数を含むことが可能である点を除いて、リフォーマット構成要素の変換関数と同様である。例えば、入力レコードがフィールドｉｎ．ａ１を有する場合には、変換関数のｓｕｍ（ｉｎ．ａ１）の式により、ロールアップ構成要素は、ｉｎ．ａ１に出現する値の合計を、キーフィールドに同じ値を有するすべてのレコードにわたって計算する。変換関数中の項目の式が集約関数でない場合は、その項目の式は、キーフィールドに同じ値を有するレコードの各集約セット内にある任意の入力レコードに対して評価される。
【００６３】
例えば、ロールアップ構成要素は次のように構成することができる。
【００６４】
【表７】
0006338579.tif 000008
【００６５】
これにより、ロールアップ構成要素は、ｉｎポートからのデータを分割して、キーフィールドａ３に同じ値を有する集約セットを得るように構成される。各セット内で、ロールアップ構成要素は、ａ１の最小値、任意のレコードからのａ３の値（使用する値の選択は、この場合はａ３がキーフィールドの値であり、したがってセット内の各レコードに同じ値を有するため、重要でない）、及びａ２の値の和を得る。個別のキーフィールド値ごとに１つの出力レコードが生成される。
【００６６】
ＧＤＥ１０２、ＡＰＩ、又はこれら２つの組み合わせを使用して、そのポート、演算子タイプ、及びパラメータを伴う構成要素、ポートに関連付けられたデータ形式及びパラメータの値、並びに出力ポートを入力ポートに接続するフローを含めて、データフローグラフ要素に対応するデータ構造を生成することができる。ＡＰＩ関数の反復的な呼び出しを使用してプログラム的にデータフローグラフを生成することも可能であり、必ずしもＧＤＥ１０２とのユーザ対話を必要としない。
【００６７】
リポジトリ１０４に記憶されたエンティティに対応するデータオブジェクト及びメタデータ、並びにエンティティ間の関係は、エンティティ−関係（ＥＲ）図で表すことができる。図２はＥＲ図２００の一例を示す。ＥＲ図２００はエンティティ間の相互関係を表す。ＥＲ図のエンティティは、独立した一意の識別を持つことが可能な、健康管理、取引、会計などの領域の項目を表すことができる。エンティティは、その領域にある現実の諸面を含むことができる。例えば、エンティティ２０２は人を表し、その人の名前（「person_name」と呼ばれる属性を有する）やその人の年齢（「person_age」と呼ばれる属性を有する）など、その人に関連する「属性」を含む。同様にエンティティ２０４は市を表し、市の名前（「city_name」と呼ばれる属性を有する）や市の人口（「city_population」と呼ばれる属性を有する）などの属性を含む。例によっては、エンティティは、建物や自動車などの物理的なオブジェクトとして表すことができる。例によっては、エンティティは、抵当取引の販売や、サービス契約の規定の満了などの事象を表すことができる。実際の例では、エンティティ２０２、２０４は各々数個の属性を有する可能性が高い。
【００６８】
実施形態によっては、「エンティティ」の参照は、エンティティタイプの「カテゴリ」に関連付けることができる。リポジトリ１０４に記憶されたデータオブジェクトは、所与のエンティティタイプカテゴリに関連付けられたエンティティのインスタンスと見なすことができる。例えば、エンティティタイプカテゴリは「人」のエンティティタイプカテゴリであり、人のエンティティタイプカテゴリに関連付けられた特定のインスタンス、例えばデータオブジェクトは「Ｗａｄｅ」という名前の３２歳の人物である。したがって、スキーマ２００中の各エンティティ２０２、２０４は、あるクラスのデータオブジェクトとして表すことができ、各オブジェクトはエンティティ２０２、２０４の特定のインスタンスに関する詳細を有する。スキーマ２００では、エンティティ２０２、２０４は「居住（lives in）」関係２０６によって関係付けられ、すなわち、エンティティタイプ「人」のオブジェクトが、エンティティタイプ「市」のオブジェクトに対して「居住」関係（リレーションシップ）を有する。
【００６９】
関係について下記でさらに詳細に説明する。図２Ａを参照すると、スキーマ２１０では、エンティティ２１２、２１４、２１６、２１８が関係２１３ａ〜ｅを通じて相互に関係付けられている。例によっては、２つのエンティティ、例えば、エンティティ２１２と２１８の間に関係を確立する方法の１つは、「主キー／外部キー」関係２１３ａによるものである。エンティティ２１２の「主キー」は、値が所与のエンティティタイプカテゴリのエンティティ２１２の各インスタンスを一意に識別する属性である。例えば、「従業員ＩＤ」は、「従業員」エンティティ２１２の主キー属性となる。第１のエンティティ２１２は、第２のエンティティ２１８が第１のエンティティ２１２の主キー属性を参照する属性を有するときに、第２のエンティティ２１８に対して主キー／外部キー関係２１３ａを有することができる。この第２のエンティティ２１８の属性を「外部キー」と呼ぶ。例えば、「プロジェクト」エンティティ２１８のプロジェクトのインスタンスはそれぞれ、外部キー属性の役割を果たす「従業員ＩＤ」に関連付けることができる。
【００７０】
スキーマ２１０は、エンティティ２１２、２１４、２１６、２１８間の他の種の関係２１３ｂ〜ｅも表すことができる。一実施形態では、関係２１３ａ〜ｄは、エンティティ間を結ぶ線として表現することができる。例えば、エンティティ２１２と２１４間、エンティティ２１２と２１８間、エンティティ２１２と２１６間、及びエンティティ２１２と２１２自身との間の関係をスキーマ２１０に示すように表すことができ、エンティティ３０２、３０４、３０６、３０８間に、一対一、一対多、及び多対多という基本的な種類の「接続」関係を含むことができる。
【００７１】
一実施形態では、一対一の接続関係２１３ｂは、例えば「従業員」エンティティ２１２中の多くとも１つのデータオブジェクトが例えば「オフィス」エンティティ２１４中の１つのデータオブジェクトに関係付けられるときに存在する。「従業員」エンティティ２１２は１つの企業の従業員を表し、すなわちエンティティ２１２の各データオブジェクトは一人の従業員を表す。「オフィス」エンティティ２１４は１つの建物内で使用中のオフィスを表し、すなわちエンティティ２１４の各データオブジェクトは１つのオフィスを表す。一人一人の従業員に専用のオフィスが割り当てられている場合は、それに対応するデータオブジェクト同士は一対一の外部キー関係を有することになる。一対一の接続をスキーマ２１０では線で示している。
【００７２】
一実施形態では、一対多の接続関係２１３ｄは、例えば、「従業員」エンティティ２１２中の１つのデータオブジェクトに対して、例えば「部門」エンティティ２１６に、関係付けられたデータオブジェクトが０個、１個、又は多数あり、且つ、１個のデータオブジェクト、すなわち「部門」エンティティ２１６について、例えば「従業員」エンティティ２１２に、関係付けられたデータオブジェクトが１個あるときに存在する。上記のように、「従業員」エンティティ２１２は１つの企業の従業員を表す。「部門」エンティティ２１６は、会社の部門を表し、すなわちエンティティ２１６の各データオブジェクトは１つの部門を表す。各従業員は１つの部門に関係付けられ、各部門は多数の従業員に関係付けられる。したがって、「従業員」エンティティ２１２と「部門」エンティティ２１６は一対多の外部キー関係を有する。一対多の接続をスキーマ２１０では終端が三つ又になった線で示している。
【００７３】
一実施形態では、多対多の接続関係２１３ｅは、例えば、「従業員」エンティティ２１２の１個のデータオブジェクトに対して、例えば「プロジェクト」エンティティ２１８に、関係付けられたデータオブジェクトが０個、１個、又は多数あり、且つ、例えば「プロジェクト」エンティティ２１８の１個のデータオブジェクトに対して、例えば「従業員」エンティティ２１２に、関係付けられたデータオブジェクトが０個、１個、又は多数あるときに存在する。この例では、従業員を同時にいくつのプロジェクトに割り当ててもよく、プロジェクト（すなわち「プロジェクト」エンティティ２１８のデータオブジェクト）は、そのプロジェクトに割り当てられた従業員を任意数有することが可能であることを想定している。したがって、「従業員」エンティティ２１２と「プロジェクト」エンティティ２１８は多対多の外部キー関係を有することになる。多対多の接続をスキーマ２１０では始端と終端が三つ又になった線で示している。
【００７４】
例によっては、同じエンティティ２１２のデータオブジェクト間に関係２１３ｃがある場合がある。例えば、「従業員」エンティティ２１２のデータオブジェクトが、「従業員」エンティティ２１２の他のデータオブジェクトとの間に一対多の関係を有する場合がある。一人の従業員が、一対多の外部キー関係で表される別の従業員との間に「被監督者」の関係を有することができる。
【００７５】
例によっては、エンティティ２１２、２１４、２１６、２１８はテーブル形態で表すことができる。エンティティ２１２、２１４、２１６、２１８のデータオブジェクトインスタンスは、テーブルのレコードとして表すことができる。実施形態によっては、１又は２以上のテーブルを所定の方式で組み合わせる、すなわち「結合（join）」することができる。例えば、２つのエンティティテーブルを内部結合するには、２つのエンティティテーブルの各レコードが一致するレコードを有することが必要となる。内部結合では、所与の結合述語（例えば結合キー）に基づいて２つのテーブルのレコードを組み合わせる。結合述語は結合の条件を指定する。例えば、結合キーは、第１のエンティティテーブルのレコードの第１の属性の値が、第２のエンティティテーブルのレコードの第２の属性の値と等しいことを指定する。外部結合では、結合される２つのエンティティテーブルの各レコードが一致するレコードを有する必要はない。したがって、結合後のテーブルは、２つのエンティティテーブルに一致するレコードがない場合でも各レコードを維持している。
【００７６】
エンティティ２１２、２１４、２１６、２１８の属性は、データの粒度で特徴づけることができる。例えば、ある人物のアカウントを表すエンティティは、粗い粒度では、その人物の住所に関係する情報を表す１つの属性を含むことができる。データの粒度は、データフィールドがさらに分割される際の細かさで表すことができる。そのため、例によっては、エンティティは、部屋番号、街路の名前、市や町の名前、及び州名などの複数の属性を使用することによって、同じ住所情報をより細かい粒度で表すことができる。
【００７７】
例えば、あるエンティティの粗い粒度の属性は、世帯内の多数の顧客を表す世帯情報である。粒度の細かい属性は、注文書の行項目であり得る。粒度の粗い属性としての製品識別子（又は他の製品レベル情報）は、関連付けられた複数の行項目を有することができる。
【００７８】
状況によっては、粒度の粗いエンティティからより詳細な情報を引き出すことが望ましい場合がある。同様に、粒度の細かいエンティティに含まれる情報を要約しておおまかに表すことが望ましい場合がある。これに関して、所定の粒度を有するソースエンティティを定義することができる。１又は２以上のソーススキーマのソースエンティティを、１又は２以上の対象スキーマの対象エンティティにマッピングすることができ、事前に設定された式で、所定粒度のデータを、対象エンティティの結果属性に関係付ける。例えば、粒度が細かいソースデータを（例えば、集約演算子を含む式を介して）集約して、対象エンティティの属性を１つ得ることができる。
【００７９】
例によっては、データセット又はデータフローグラフから得たデータに基づいてユーザによって生成される規則が、外部のデータベース又はファイルに含まれる補助情報を参照する必要がある場合がある。例えば、そのような補助情報は、より粗い、又は細かい粒度で存在する可能性がある。そのため、事前に設定された式を使用してその補助情報を処理することにより、アプリケーションで使用するための所望形態の属性を得ることができる。
【００８０】
例示的な事例では、次のように事前に設定された式を使用してソースエンティティを対象エンティティにマッピングすることができる。図３を参照すると、ソーススキーマ３００は３つのソースエンティティ３０２、３０４、３０６、すなわちエンティティＡ、エンティティＢ、及びエンティティＣを含み、それぞれ、属性ａ１、ａｂ、及びａｃ、属性ｂ１及びｂａ、並びに属性ｃ１及びｃａを含む。この説明では、属性の最初の文字を所属先エンティティの名前に一致させる規則を採用する。例えば、エンティティＡの属性は各々「ａ」の文字で始まる。さらに、エンティティの属性の２番目の文字を「１」に設定して、その属性が主キー属性であることを表す。エンティティ間の関係は、エンティティＡからエンティティＢをｎ：１（多対一）、エンティティＡからエンティティＣを１：ｎ（一対多）と表す。
【００８１】
各関係に関連付けられる結合キーはその関係の上に示され、例えば、エンティティＡのエンティティＢに対する結合はｂａ／ａｂ、エンティティＡのエンティティＣに対する結合はｃａ／ａｃである。この説明では、結合キーで使用される属性の２番目の文字を相手エンティティの名前に一致させるという規則を採用している。
【００８２】
図に示すように、エンティティＡ（例えば、中間／ソースエンティティ）をエンティティ３０８すなわちエンティティＤ（例えば対象エンティティ）に１：１（一対一）にマッピングさせる。マッピングは、エンティティＡからエンティティＤに向かう「矢印」で表す。
【００８３】
エンティティＤへのエンティティＡのマッピングの定義は、それらエンティティの属性を伴う事前に設定された個々の論理式によって提供される。例えば、１番目に、エンティティＤへのエンティティＡのマッピングを定義する際には、属性ｄ１に属性ａ１の値が割り当てられる。例によっては、属性ａ１の値を直接属性ｄ１にコピーすることができる。
【００８４】
２番目に、エンティティＤへのエンティティＡのマッピングを定義する際には、属性ｄ２に属性ｂ１の値が割り当てられる。ただし、ｂ１はソースエンティティＡではなくエンティティＢにある。したがって、属性ｄ２の値を計算する際には、エンティティＡとＢを結合して属性ｂ１に到達する必要がある。
【００８５】
３番目に、エンティティＤへのエンティティＡのマッピングを定義する際には、属性ｄ３に、属性ｃ１に対する集約式「総和（summation）」の値が割り当てられる。そのため、属性ｄ３の値を計算する際には、まずエンティティＣを属性ｃ１に対してロールアップしてから、エンティティＣをエンティティＡと結合して属性ｃ１に対する集約式「総和」の値に到達する必要がある。
【００８６】
一実施形態では、上記の結合及びロールアップはソース属性から対象属性への経路を定義する。したがって、結合及びロールアップを使用して対象エンティティの属性を、ルート又は直接のエンティティ（例えば上記の例ではエンティティＡ）を通る経路に基づいて、ソース属性（例えば、ａ１、ｂ１、ｃ１）が格納されたエンティティにマッピングする。例によっては、ルートエンティティからソース属性を含んでいるエンティティまでの経路は、ツリー形態の構造のスキーマを定義する。
【００８７】
例によっては、第１のエンティティから第２のエンティティへの「単純な」マッピングは、一意に指定されたルートエンティティと、ルートエンティティに、又は相互に関係付けられた任意数の他のエンティティと、ソーススキーマの一部ではないが対象スキーマを形成し得る１又は２以上の対象エンティティとを有する「ツリー」型のソーススキーマからなる。例えば、図３では、ソーススキーマ３００はエンティティ３０２、３０４、及び３０６を含む。対象エンティティ３０８はソーススキーマ３００の一部ではない。
【００８８】
次いで図４を参照すると、ソーススキーマ及びマッピング情報を、クエリ言語式、データフローグラフ、又はコンピュータプログラムなど、マッピングされる対象エンティティの属性を計算するための手順仕様に変換する工程４００が示される。例えば、ソーススキーマ及びマッピング情報は、場合によっては手順仕様の手順に対応する式の要素の一部を含む各種の演算子又は関数を使用して対象エンティティの属性をソースエンティティの属性から見て定義する式の形態で、ソーススキーマ中の１又は２以上のソースエンティティから対象エンティティへのマッピングを含むことができる。例によっては、初期情報は、有向の非周期グラフ構造を有するソーススキーマ（図４に示すようにグラフの関係リンクが無向であり、したがってどのノードも木の根と考えることができることから、ツリー構造を持つと分類することもできる）と、対象スキーマの１又は２以上の対象エンティティの属性をどのように生成するかを指定するマッピング規則のセットとを含む（ステップ４０２）。そのマッピング規則及びソーススキーマを使用して式ノードのセットを生成することができる（ステップ４０４）。下記で詳しく説明するように、式ノードは中間データ構造で表される。対象エンティティの各属性は、スカラ演算子の任意の集合（例えば、＋、−、関数呼び出し等）及び集約演算子（例えば、ｓｕｍ、ｍｉｎ、ｍａｘ等）と併せて、ソーススキーマのエンティティの属性から構築される式を定義するマッピング規則で定義することができる。マッピング規則の式には各種の言語を使用することができる。例えば、式はユーザがデータ操作言語（ＤＭＬ）で書いて、ユーザ入力として提供することができる。各種の入力インターフェースを使用してマッピング規則を受け取ることができ、そのようなインターフェースには、例えばビジネスルールインターフェース（例えば米国特許第８，０６９，１２９号明細書に記載されるインターフェース等。同文献は参照により本明細書に組み込まれる）がある。初期情報は、エンティティに対応するデータの物理的表現を記述するメタデータも含むことができる（例えば、データセットのファイル名やレコード形式）。
【００８９】
実施形態によっては、マッピングモジュール（例えば動作環境１０６で実行される）が、マッピング規則に従って、ソーススキーマに関係する属性と共に、ソーススキーマから対象スキーマへのスキーマ間マッピングを変換して、式の集合にする（例えば、関係代数として表され、式ノードとして編成された関係式）。例によっては、データ構造を格納するための公知の方法を使用して１又は２以上の「クエリプラン」の形態の式ノードを格納することができ、各クエリプランは、クエリで指定される値を生成するために使用できる有向リンクで関係付けられた式ノードの集合であり、有向非周期グラフ構造を有する。下記で詳しく説明するように、クエリプラン中の有向リンクは、依存関係（例えば、１つの式ノードの識別子が別の式ノードから参照される）を表す。クエリプランの式ノードで表される関係式は、「結合」や「ロールアップ」などの抽象的な関係演算子として定義することができ、演算子は、特定のアルゴリズムに応じて各種の具体的な実施形態を有し得る。対象スキーマの対象エンティティの出力属性ごとに個別のクエリプランが生成される。ソーススキーマ中の１つのエンティティだけからのデータを必要とするマッピング式で定義される出力属性は、１つのみの式ノードを有するクエリプランに相当することができる。ソーススキーマの複数個のエンティティからのデータを必要とするマッピング式で定義される出力属性は、出力属性の値がルート式ノードで表されるツリートポロジを持つクエリプランに相当することができる。マッピングモジュールは、クエリプランから、データフローグラフ、又は、対象スキーマの属性の値を計算するために使用される手順の一部又はすべてを指定するその他形態の手順仕様を生成することができる。
【００９０】
例によっては、クエリプランをマージして１又は２以上の式を組み合わせることにより、新しいノード構造を持つ新しいクエリプランを得ることができる（ステップ４０６）。クエリプランのマージにより、より複雑な中間データ構造の編成を得ることができる。例えば、マージ後の式ノードのセットは、もはやツリー形態でない場合もある（例えば２つ以上のルートがある、又は１つのノードからのリンクが別のノードで再びマージされるが、グラフはなお非周期であるなど）。得られたマージ後の式ノードのセットを下記のように処理して、対応する手順仕様を生成することができる（ステップ４０８）。このようにして、下記で詳しく説明するように、元のソーススキーマ及びマッピングされた対象スキーマをデータフローグラフに変換することができる。実施形態によっては、クエリプランからデータフローグラフを生成するために追加的な技術を使用してもよい（例えば米国特許出願公開第２０１１／０１７９０１４号に記載される技術等。同文献は参照により本明細書に組み込まれる）。
【００９１】
次いで図５を参照すると、ソーススキーマ５００がＥＲ図として表され、スキーマ５００は、エンティティＡ、エンティティＢ、エンティティＣ、エンティティＤ、エンティティＦ、及びエンティティＧを含む。この例では、対象スキーマは、１つのエンティティ、エンティティＺを対象エンティティとして含む。上記のように、一実施形態では、ソーススキーマ中のエンティティ及び関係で形成されるグラフは、１つのルートエンティティ、すなわちエンティティＡを持つツリーになる。２つのエンティティ間の各関係は、各エンティティについての結合キーに関連付けられ、例えば、結合キー「ａｂ」をエンティティＡ側で使用し、結合キー「ｂａ」をエンティティＢ側で使用する。
【００９２】
対象エンティティであるエンティティＺの属性を定義するマッピング規則中の式は解析木に変換することができ、解析木の葉が属性になり、解析木の内部ノードが式及び集約演算子になる。例によっては、式は、集約演算子を全く含まない解析木を持つ「プリミティブ」な式になる場合もある。
【００９３】
例によっては、マッピング規則中の式は関係代数を使用して表すことができる。関係代数は、関係、例えばテーブルと、変換を含むことができる。例によっては、関係は、列及び行を持つテーブルとすることができる（例えば、エンティティ、結合、又はロールアップがそれぞれテーブルの形態で表される）。変換は、出力関係中の列を指定することができる。
【００９４】
上記の規則を使用すると、一実施形態では、変換の表記は以下によって与えられる。
<transform> ::= <element>[, <element>]*
<element>   ::= <identifier> || < identifier >=<expression
【００９５】
次の変換式の例は、示すように、変換式に対応する英語に翻訳したものである。
ａ１                      ａ１を通って出力に至る
ａ１，ｂ１                ａ１、ｂ１を通って出力に至る
ｔ１＝ａ１＋ｂ１          一時変数ｔ１＝ａ１＋ｂ１を作成する
ｔ１＝ａ１＋ｂ１，ｂ２    一時変数ｔ１＝ａ１＋ｂ１を作成し、ｂ２を通る
【００９６】
一実施形態では、２者間の結合の構文は次のように与えられる。
join(<rel1>/<k12>, <rel2>/k21>)
ここで、ｒｅｌ１及びｒｅｌ２は２つの関係であり、ｋ１２及びｋ２１は結合キーである。多者間の結合の場合は、第１の関係が「中央」の関係になる。２番目以降の関係は「中央」の関係と結合される。この構文は次のように与えられる。
join(<rel1>/<k12>/<k22>…, <rel2>/<k21>, <rel3>/<k31>…)
【００９７】
例示として、エンティティＡ、Ｂ、及びＤの３者間の結合は次のように表される。
join(A/ab/ad, B/ba, D/da)
【００９８】
実施形態によっては、上述の式は、下記の２者間の結合の階層のどちらかに相当する。
join(A/ab, join(A/ad, D/da)/ba)
join(A/ad, join(A/ab, B/ba)/da)
【００９９】
ロールアップの構文表記は次のように与えられる。
rollup(<rel>/<key>)
【０１００】
例示として、属性ｄａに対するＤのロールアップは次のように表される。
rollup(d/da)
【０１０１】
例によっては、マッピング規則中の式は式ノードを使用して表される。一実施形態では、式ノードは以下を含む。（１）その式ノードを他の式ノードから参照できるようにする識別子、（２）そのノードに対応する式を特定する式、（３）式が評価されるコンテクスト、及び式の評価で得られた値が関与し得る結合／ロールアップを特定するコンテクストエンティティ、（４）出力関係中の列を指定する変換、（５）上記の関係及び変換を有する関係式（ノードの関係属性とも呼ぶ）、及び（６）そのノードの入力関係に対応する子ノードの集合。
【０１０２】
以下に、マッピング規則中の式に対応する式ノードを含むクエリプランの一例を説明する。図６を参照すると、クエリプラン６００は、定義されたマッピング規則中の式「sum(d1)」に対応する例示的な式ノード６０２、６０４、６０６、６０８のセットを含む。ノード＃１、すなわちノード６０２で指定される式「sum(d1)」は、キー「ｄａ」に関係Ｄ（ノード＃３、すなわちノード６０８で指定される）のロールアップ（ノード＃２、すなわちノード６０４で指定される）を実行することによって評価することができる。ノード＃１で指定されるように、ノード＃２で指定されるロールアップの結果は、結合キーｄａ及びａｄで関係Ａ（ノード＃４、すなわちノード６０６で指定される）と結合される。
【０１０３】
図６のクエリプラン６００の式ノードは、下記の表１に示すように表形式で表すことができる。「式」の列の式の字下げはノード間の親子関係を表す。ノード＃２の「コンテクストエンティティ」フィールドの記号「−」については下記で詳細に説明する。
【０１０４】
【表８】
0006338579.tif 000009
【０１０５】
一例では、式sum(c1)*a1*b1は、次のように式ノードを構築することによって評価することができる。集約式をコンパイルして式ノードのツリーにすることができる（例えば式「sum(d1)」に対応する図６を参照されたい）。集約式に対応する式ノードを作成する時点では、そのノードの評価コンテクストは処理過程の後の時点まで分からない。例えば、表１の「式」の列以外の列はまだ埋めることができない。下記の表２は、初期の式ノードを表す。
【０１０６】
【表９】
0006338579.tif 000010
【０１０７】
式中の各集約演算子に対応する消去される式ノードは、式「sum(c1)」の場合、下記の表３に示すように作成される。
【０１０８】
【表１０】
0006338579.tif 000011
【０１０９】
集約式には、表４に示すように、集約される式中の属性を含む子ノードが割り当てられる。一実施形態では、集約式が例えば「sum(c1,c2!=0)」である場合、子ノードは（ｃ１，ｃ２）を含むことができる。
【０１１０】
【表１１】
0006338579.tif 000012
【０１１１】
式のコンテクストエンティティは以下のように評価される。表４を参照すると、子ノード＃３は式ｃ１だけを含み、集約演算は含まない。したがって、式ｃ１はプリミティブ式である。プリミティブ式をコンパイルして式ノードのツリーにするアルゴリズムを式ｃ１に実行することができる。一実施形態では、アルゴリズムは始めに式ｃ１の各エンティティの「集約セット」を求める。一般に、集約セットは、所与の属性をスキーマのルートエンティティに集約するために必要なロールアップを測定する。集約セットを求めるために、マッピングモジュールは、エンティティｅごとに、ｅをスキーマのルートにつなぐ関係ｒを求める。その関係の反対を「ｅ’」と表記する。集約セットＡ（ｅ）は、ｒが多対一の場合は｛ｅ｝∪Ａ（ｅ’）と定義され、それ以外の場合はＡ（ｅ’）と定義される。ルートエンティティの集約セットを｛｝とする。
【０１１２】
図５を参照すると、ソーススキーマ５００のエンティティについての例示的な集約セットは下記のようになる。
エンティティＡ      ｛｝    エンティティＡがルートエンティティ
エンティティＢ      ｛｝    ＢからＡの関係は一対多
エンティティＣ      ｛Ｃ｝    ＣからＢの関係は多対一
エンティティＤ      ｛Ｄ｝    ＤからＡの関係は多対一
エンティティＥ      ｛Ｅ｝    ＥからＡの関係は多対一
エンティティＦ      ｛Ｅ｝    ＦからＥの関係は一対多
エンティティＧ      ｛Ｅ，Ｇ｝    ＧからＥの関係は多対一
【０１１３】
式を与えられると、最大集約セット（ＭＡＳ，maximum aggregation set）は、その式中に記述される任意のエンティティの最も大きい集約セットである。例によっては、ＭＡＳは一意である場合もある。例えば、式b1+e1+g1を考えたい。この式は、エンティティＢ、Ｅ、及びＧを参照する。それに対応する集約セットはそれぞれ｛｝、｛Ｅ｝、及び｛Ｅ，Ｇ｝となる。したがってこの式のＭＡＳは｛Ｅ，Ｇ｝になる。
【０１１４】
例によっては、一意でないＭＡＳは許可されない。例えば、式c1*e1は、エンティティＣ及びＥに関与し、それぞれ集約セット｛Ｃ｝及び｛Ｅ｝を有する。この場合は、式c1*e1に一意のＭＡＳはない。式e1*f1はＥ及びＦに関与し、それぞれ集約セット｛Ｅ｝及び｛Ｅ｝を有する。この場合は、同じ集約セットを持つエンティティが複数あるにも関わらず｛Ｅ｝のＭＡＳは一意になる。
【０１１５】
式の評価コンテクストは、ＭＡＳを持つエンティティで、スキーマのルートエンティティに最も近いエンティティである。一般に、最上位の式の評価コンテクストはルートエンティティである。例えば、式a1+b1を考えたい。ＭＡＳは｛｝である。エンティティＡ及びＢはともに集約セットとして｛｝を持つ。しかし、Ａがルートに最も近く、したがって評価コンテクストとして使用される。別の例として、式e1+g1を考えたい。ＭＡＳは｛Ｅ，Ｇ｝である。したがって評価コンテクストはＧになる。
【０１１６】
式ノードの評価コンテクストを選択すると、式ノードに、選択された評価コンテクストに関する情報を入れる。再度表４を参照すると、ｃ１の評価コンテクストはＣである。したがって、更新後の式ノードは次の表５に示すようになる。
【０１１７】
【表１２】
0006338579.tif 000013
【０１１８】
一実施形態では、式ノードの「集約関係」が計算される。集約の集約関係は、評価コンテクストをルートエンティティに接続する属性である。ここで説明する例では、式ｃ１の場合、評価コンテクストはＣであり、集約関係はｃｂになる。一例で、式e1*g1の場合、評価コンテクストはＧであり、集約関係はｇｅになる。一例として、式ｆ１の場合、評価コンテクストはＥであり、集約関係はｅａになる。
【０１１９】
上記で算出された集約関係について中間結果をロールアップするために、集約関係のキーを式ノードに追加する。上記のように、Ｃ１の集約関係はｃｂである。したがって、式ノードは次の表６に示すように更新される。
【０１２０】
【表１３】
0006338579.tif 000014
【０１２１】
すると、子ノード、すなわちノード＃３をコンパイルできるようになる。子ノードが入れ子構造の集約を含む場合は、下記で説明するように、入れ子構造の集約コンパイルアルゴリズムを再帰的に呼び出すことができる。したがって、式ノードは次の表７に示すように更新される。
【０１２２】
【表１４】
0006338579.tif 000015
【０１２３】
表１〜８との関連で上記で説明した計算に基づいて、次の表８に示すように式ノードを埋めることができる。
【０１２４】
【表１５】
0006338579.tif 000016
【０１２５】
コンテクストエンティティは、後に「−」の記号がある式の評価コンテクストである。ノード＃２の記号「−」は、あるレベルの集約が失われたことを意味する。例えば、Ｃの集約セットは｛Ｃ｝であり、Ｃ−の集約セットは｛｝である。そのような調整を行わない場合、b1+sum(c1)のＭＡＳは｛Ｃ｝になり、式の評価コンテクストはＢではなくＣになる。
【０１２６】
関係は、ロールアップ関係の出力キーｃｂに対する子ノードのロールアップである。変換は、集約値を一時変数ｔ１（本明細書の例では、一時変数は、文字「ｔ」とその後に続く種々の一時変数を区別する番号を使用して導入する）に代入し、ロールアップキーｃｂを通る。
【０１２７】
すると、元のノード、すなわち表２のノード＃１を次のようにコンパイルすることができる。集約ノードに代えて変数ｔ１を使用する。したがって、元の式sum(c1)*a1*b1をt1*a1*b1であるかのように扱う。これらの項をそれぞれコンテクストエンティティＣ−、Ａ、及びＢに関連付ける。これらの各エンティティの集約セットは｛｝であり、そのためＭＡＳは｛｝になり、評価コンテクストはＡになる。更新後のテーブルを下記に表９として示す。
【０１２８】
【表１６】
0006338579.tif 000017
【０１２９】
属性ｓｕｍ（ｃ１）及びｂ１のうち２つへの経路はｂａ関係を通る。その結果、Ｂに子ノードが作成され、次の表１０に示すように結合が挿入される。
【０１３０】
【表１７】
0006338579.tif 000018
【０１３１】
子ノードから参照される式(sum(c1),b1)の評価コンテクストはＢであり、Ｂ及びＣの属性を有する。したがってｂ１についてノードが作成される。そのため、次の表１１に示すように式ノードが更新される。
【０１３２】
【表１８】
0006338579.tif 000019
【０１３３】
上記で簡単に述べたように、集約は明示的又は暗黙的に入れ子構造にすることができる。一般に、入れ子の度合いは、集約される値の集約セットの基数に一致する。例えば、ｇ１は集約セット｛Ｅ，Ｇ｝を有する。したがって、ｇ１に関連する集約は、２レベルの集約、例えばmax(sum(g1))を有する。
【０１３４】
例によっては、コンパイル時に、入れ子構造の集約のコンパイルアルゴリズムで入れ子構造でない集約を入れ子構造の集約に変換することができる。例えば、sum(g1)がsum(sum(g1))になり、count(g1)がsum(count(g1))になる。そのような方式では、一実施形態で、入れ子構造の集約を直接入力することを無効にしてもよい。
【０１３５】
例によっては、入れ子構造の集約を要求してもよい。そのような方式では、max(sum(g1))やsum(sum(g1)*e1))などの集約を指定することができる。
【０１３６】
例によっては、入れ子構造の集約コンパイルアルゴリズムで、コンパイル時に入れ子構造でない集約を入れ子構造の集約に変換し、一方、単に入れ子構造の集約を通過させることができる。例えば、コンパイル時にsum(g1)をsum(sum(g1))に変換し、一方、max(sum(g1))は、変化させないまま入れ子構造の集約コンパイルアルゴリズムを通過させる。
【０１３７】
入れ子構造の集約式の例としてmax(sum(g1))を考えたい。上記で概説した式ノード技法を使用して、次の表１２〜１５を構築することができる。
【０１３８】
【表１９】
0006338579.tif 000020
【０１３９】
先と同様に消去ノードを作成する。
【０１４０】
【表２０】
0006338579.tif 000021
【０１４１】
第２のレベルの消去ノードを作成する。
【０１４２】
【表２１】
0006338579.tif 000022
【０１４３】
ノード＃７及び＃６を直接コンパイルすることができる。
【０１４４】
【表２２】
0006338579.tif 000023
【０１４５】
表１２〜１５に基づいてノード＃３をコンパイルすることができる。
【０１４６】
【表２３】
0006338579.tif 000024
【０１４７】
最後に、表１５に基づいてノード＃１をコンパイルすることができる。
【０１４８】
【表２４】
0006338579.tif 000025
【０１４９】
例によっては、２以上のエンティティを同時にマッピングすることができる。図７を参照すると、２つの対象エンティティＸ及びＺを含む対象スキーマを示す。エンティティＸについてのマッピング規則中の式は、エンティティＥをルートエンティティとして解釈することができる。エンティティＺについてのマッピング規則中の式は、エンティティＡをルートエンティティとして解釈することができる。例によっては、マッピング規則は、属性のマッピングを含み、すなわちａｅがｚｘに対応し、ｅａがｘｚに対応する。
【０１５０】
例によっては、マッピング規則は、選択やロールアップなどの関係演算を含む。図８を参照すると、図７と同じソーススキーマ及び対象スキーマに関して、選択、例えばa1>0と、ロールアップ、例えばrollup(e1)を含むマッピング規則が示される。ロールアップを含むマッピング規則をコンパイルする際、エンティティＥから、ルートとして扱われる疑似エンティティＥ’に向かう多対一の関係を仮定することができる。
【０１５１】
例によっては、ソーススキーマがツリー形態でない場合がある。例えば、ソーススキーマは周期的である場合がある。図９Ａを参照すると、周期スキーマを示す。ここでは、「顧客」及び「店舗」のエンティティはどちらも同じエンティティ「郵便番号」からの出力を使用する。周期スキーマはエイリアシング（aliasing）アルゴリズムで分解することができる。例えば、図９Ｂに示すように、エイリアシングアルゴリズムで郵便番号と「顧客」及び郵便番号と「店舗」間の関係の２つのエイリアスコピーを生成することができる。そのようにして循環を解消することができる。次に図９Ｂのスキーマは、エンドユーザが「郵便番号」エンティティの属性をより正確に指定できる状態になっている（例えば、顧客の州や店舗の州）。
【０１５２】
式をクエリプランに変換すると、ツリーをデータフローグラフに変換することができる。一実施形態では、データフローグラフを生成する手順は次を含む。１）式をマージして、同じエンティティに対応するデータの冗長な結合、冗長な集約、又は冗長な走査を回避する。２）任意選択で関係演算子のセットを最適化する。及び３）マージ又は最適化の結果を書き換えてデータフローグラフにする。
【０１５３】
システム中のすべての式をクエリプランにコンパイルすると、すべての式ノードの関係式フィールドにある共通の部分式の消去を実行することにより、蓄積された式をマージする。そのようなマージの一例を以下のように示す。表１８には２つのノードが示される。
【０１５４】
【表２５】
0006338579.tif 000026
【０１５５】
表１８の２つのノードをマージして、次の表１９に示すように１つのノード＃３にすることができる。
【０１５６】
【表２６】
0006338579.tif 000027
【０１５７】
新しい式ノードは同じ関係式を有し、その変換フィールドは、マージされたノードの変換を組み合わせたリストである。マージされたクエリプランは、並列動作環境１０６で実行されるマッピングモジュールによって１又は２以上のデータフローグラフに変換することができる。例えば、適切なグラフ構成要素を挿入し、式ノードに基づいて変換を構成要素に追加し、中間結果に対してＤＭＬコードを生成することができる。特定種類のグラフ構成要素を使用して特定種類の式ノードの操作を実行する。特定のエンティティについてのデータをスキャンする式ノードは、そのエンティティに対応するデータセット（例えば、データベース中のファイルやテーブル）のレコードをスキャンする構成要素で実装することができる。構成要素は、例えば、レコードを格納しているファイルを読み出すか、又はデータベースのテーブルを照会することによってレコードにアクセスすることができる。式ノードによって指定されるエンティティの属性は、テーブル中のレコードのフィールドに対応することができる。式ノードの集約は、ロールアップ演算を実行する構成要素を使用して実装することができる。式ノード中の結合は、結合演算を実行する構成要素を使用して実装することができる。
【０１５８】
以下は、種々のマッピング規則についてクエリプランを生成し、そのクエリプランをマージし、マージしたクエリプランからデータフローグラフを生成する例である。この例では、２つのマッピング規則が受け取られ、それぞれ、ソーススキーマのエンティティ（ａ１、ｂ１、及びｅ１）の属性を参照する１つの出力属性（それぞれｘ０及びｘ１）に対して１つの式を含んでいる。
x0 = a1 * b1
x1 = sum(b1 * e1)
【０１５９】
これらの式は各々、式ノードの式ツリーに対応する。属性値ｘ０の入力式についての式ツリーは次のようになる。
【０１６０】
【表２７】
0006338579.tif 000028
【０１６１】
属性値ｘ１の入力式についての式ツリーは次のようになる。
【０１６２】
【表２８】
0006338579.tif 000029
【０１６３】
両ツリーの式ノードを次のように組み合わせ、追加的な式ノード（「ＥＮＤ」と標記）を追加して、マッピング規則を組み合わせた結果を表す。追加的な式ノードは、Ａの主キー（例えばａａ）についての２つの最上位の式（＃１及び＃４）をともに結合することに相当する。
【０１６４】
【表２９】
0006338579.tif 000030
【０１６５】
エンティティＡを特定する関係式のインスタンスが３つあるため、マッピングモジュールはそれらをマージし、ノード識別子への参照を更新する。式ノード＃２、＃５、及び＃１０は取り除かれて１つの新しいマージされたノード（merged node）に置き換えられ、新しいノードは以前の識別子の１つ（この例では識別子＃２）を有する。新しいノードは、マージされた各ノードと同じコンテクスト及び関係式を有し、変換値は、マージされたノードの変換値を組み合わせたリストとなる。
【０１６６】
【表３０】
0006338579.tif 000031
【０１６７】
エンティティＢをリストする関係式が２つあるため、式ノード＃３と＃１１はマージされる。この場合、式ノードは同じであり（各自の元のツリーにおける各自の階層レベルを除いて）、そのためノード＃１１が取り除かれ、ノード＃３が新しいマージされたノードに相当する。
【０１６８】
【表３１】
0006338579.tif 000032
【０１６９】
ノードＩＤへの参照が更新された後、関係式join(#2/ab,#3/ba)をリストするノードは２つなので、マッピングモジュールは次のようにノード＃１と＃９をマージする。
【０１７０】
【表３２】
0006338579.tif 000033
【０１７１】
マッピングモジュールは、次のようにして、組み合わせた式ノード（組み合わせたクエリプラン）からデータフローグラフを生成することができる。クエリプラン中の式ノードごとに、マッピングモジュールは、その式ノードが指定する動作を実行するように構成された構成要素を生成することができる。構成要素の構成は、構成要素タイプの選択、変換関数の生成、結合又はロールアップのためのキーフィールドの選択、及び出力形式の生成、のうち任意のものを含むことができる。例えば、出力形式は、そのノードで生成される属性ごとに対応するフィールドを有するレコード構造を含むことができる。
【０１７２】
クエリプラン中の式ノード間の依存性リンクは、データフローグラフ中のデータフローリンクに対応する。これに関して、構成要素は入力として、それに対応する式ノードの子ノードの出力を受け取ることができる。例えば、式ノードＥ０の関係属性が式ノードＥ１及び入力を指定する場合、マッピングモジュールは、Ｅ１に対応する構成要素の出力ポートから、Ｅ０に対応する構成要素の適切な入力ポートへのデータフローを生成する。複数個の式ノードが同じ子ノードからの出力を使用する状況では、複製構成要素（又はそれに相当するもの）をデータフローグラフに挿入することができ、子ノードからのデータのコピーが複数個の出力で提供される。その後は、複製ノードの各出力を複数の式ノードの１つへの入力として使用することができる。上記の例におけるＥＮＤ式ノードの出力は、算出の結果をアクセス可能な場所（例えば、リポジトリ１０４又は外部のデータストア１１２に記憶されたファイル）に記憶する構成要素にデータフローを介して接続される。
【０１７３】
式ノードのクエリプランに対応するデータフローグラフを生成する手順の一例は、３つの個別の段階、すなわち構成要素の生成、データフローの生成、及びデータ形式の生成を有する。ただし、他の例では、これらの段階に関わる各種ステップを必要に応じて混ぜて、同等の結果を得ることもできる。この手順は作業用記憶域を使用して、構築されるデータフローグラフ中のポートと式ノードの入力及び出力との対応関係を記憶し、それらポートに関連付けられたデータ形式を記憶する。作業用記憶域に記憶されるこの情報は各種方式のいずれでも編成することができる。例えば、以下の属性を有するレコードの集合を記憶することができる。
・式ノードＩＤ：式ノードの識別子
・出力ポート：識別される式ノード（存在する場合）で生成される値に対応する出力ポート。出力ポートは、<component-label>.<port-name>の形式の文字列で識別することができる。
・入力ポート：識別される式ノード（存在する場合）の関係属性から参照される各式ノードに対応する入力ポート。実施形態によっては、入力ポートの数は、式ノードの種類に応じて決まる（例えば以下の例では０個、１個、又は２個の入力ポートがある）。
【０１７４】
構成要素生成段階では、クエリプラン中の各式ノードに対応する関連付けられた演算子を備える構成要素を生成する。この段階は、マッピングモジュールがクエリプラン中の式ノードのリストを横断し、各式ノードの関連情報を、生成したデータフローグラフの対応する構成要素に転送することを伴う（すなわちそれらの構成要素を実装するデータ構造内に記憶される）。
【０１７５】
一部の式ノードは、１つのエンティティからなる関係式を含み、これを「プリミティブ関係」と分類する。そのエンティティについてのデータが例えば入力ファイルに記憶されている場合、マッピングモジュールは、そのファイルの名前と、そのファイルに関連付けられたレコード形式を、メタデータリポジトリなど入手元から判定する。プリミティブ関係を有する式ノードの構成要素を生成する２つの異なる場合がある。
【０１７６】
プリミティブ関係を有する式ノードの構成要素を生成する第１の場合では、式ノードの変換が一時変数を定義しない。この場合、式ノードはデータフローグラフ中でファイル入力構成要素によって表される（すなわち「ファイル入力」演算子タイプの構成要素）。Filenameパラメータには、メタデータリポジトリにある入力ファイル名がその値として割り当てられる。構成要素のラベルにはその値として<expression node ID>が割り当てられる。読み込みポートのレコード形式には、メタデータリポジトリにあるレコード形式が割り当てられる。レコードは、<expression node ID>に等しい式ノードＩＤと共に作業用記憶域に記憶され、ファイル入力構成要素の読み込みポートを出力ポートとして識別する。
【０１７７】
プリミティブ関係を有する式ノードの構成要素を生成する第２の場合では、式ノードの変換が１又は２以上の一時変数を定義する。この場合、式ノードはデータフローグラフ中でファイル入力構成要素及びリフォーマット構成要素によって表される。リフォーマット構成要素のラベルは<expression node ID>.Reformatであり、リフォーマット構成要素の変換関数は、式ノードの変換に基づいて生成される。データフローは、ファイル入力構成要素の読み込みポートをリフォーマット構成要素のｉｎポートに接続する。レコードは、<expression node ID>に等しい式ノードＩＤと共に作業用記憶域に記憶され、リフォーマット構成要素のｏｕｔポートを出力ポートとして識別する。
【０１７８】
上記の例のクエリプランは最終的に次のマージした式ノードのセットを有する。
【０１７９】
【表３３】
0006338579.tif 000034
【０１８０】
第１の場合の例として、この例の式ノード＃２は、１つのエンティティＡに対してプリミティブ関係を有する。エンティティＡについて、メタデータリポジトリは次のファイル名及びレコード形式を提供する。
【０１８１】
【表３４】
0006338579.tif 000035
【０１８２】
この式ノード＃２に対してマッピングモジュールで生成されるファイル入力構成要素は次のように構成される。
【０１８３】
【表３５】
0006338579.tif 000036
【０１８４】
作業用記憶域に記憶されるレコードは次の情報を含む。
【０１８５】
【表３６】
0006338579.tif 000037
【０１８６】
第２の場合の例として、以下は代替の式ノード（上記の例にはない）である。
【０１８７】
【表３７】
0006338579.tif 000038
【０１８８】
この例ではエンティティＡには同じファイル名とレコード形式を想定する。この式ノードに対してマッピングモジュールで生成されるファイル入力構成要素及びリフォーマット構成要素は次のように構成される。
【０１８９】
【表３８】
0006338579.tif 000039
【０１９０】
作業用記憶域に記憶されるレコードは次の情報を含む。
【０１９１】
【表３９】
0006338579.tif 000040
【０１９２】
リフォーマット構成要素の入力及び出力についてのレコード形式は、下記のようにデータ形式生成段階で提供される。
【０１９３】
一部の式ノードは、結合演算又はロールアップ演算からなる関係式を含む。そのような式ノードについて、マッピングモジュールはそれぞれ結合構成要素又はロールアップ構成要素を生成する。どちらのタイプの構成要素もラベルは<expression node ID>である。結合演算子のキーフィールド又はロールアップ演算子のキーフィールドは、関係式中の演算への引数から判定される。どちらのタイプの構成要素の変換関数も式ノードの変換に基づいて生成される。結合構成要素の場合、マッピングモジュールは、結合演算への引数のうちどれから式ノードの変換中の所与の項が取られたかを判定する。レコードは<expression node ID>に等しい式ノードＩＤと共に作業用記憶域に記憶され、結合又はロールアップ演算の入力及び出力をそのレコードの入力ポート及び出力ポートとして識別する。
【０１９４】
結合構成要素を生成する一例を上記例の式ノード＃１の場合について以下に示し、上記例の式ノード＃６の場合にロールアップ構成要素を生成する一例を以下に示す。
【０１９５】
結合の例では、式ノード＃１の最終的なマージ後の変換は、ａ１、ｂ１、ａａ、及びａｅの値を必要とする。これらの値は、式ノード＃２又は式ノード＃３から提供される。式ノード＃２のマージ後の変換は、ａ１、ａａ、及びａｅの値を提供し、式ノード＃３のマージ後の変換はｂ１の値を提供する。式ノード＃１の関係属性の結合演算における引数の位置に基づき、式ノード＃２は生成された結合構成要素のｉｎ０ポートに対応し、式ノード＃３は生成された結合構成要素のｉｎ１ポートに対応する。このポートの割り当ては次の識別子に対応し、この識別子を使用して結合構成要素の変換関数を構成することができる。
【０１９６】
【表４０】
0006338579.tif 000041
【０１９７】
式ノード＃１について、マッピングモジュールで生成される結合構成要素は次のように構成される。
【０１９８】
【表４１】
0006338579.tif 000042
【０１９９】
作業用記憶域に記憶されるレコードは次の情報を含む。
【０２００】
【表４２】
0006338579.tif 000043
【０２０１】
ロールアップの例では、式ノード＃６の最終的なマージ後の変換はｔ３及びｅａの値を必要とする。これらの値は、式ノード＃７のマージ後の変換から提供される。ｉｎと標記された１つの入力ポート及びｏｕｔと標記された１つの出力ポートがある。式ノード＃６について、マッピングモジュールで生成されるロールアップ構成要素は次のように構成される。
【０２０２】
【表４３】
0006338579.tif 000044
【０２０３】
作業用記憶域に記憶されるレコードは次の情報を含む。
【０２０４】
【表４４】
0006338579.tif 000045
【０２０５】
式ノード＃２のファイル入力構成要素、式ノード＃１の結合構成要素、及び式ノード＃６のロールアップ構成要素に加えて、次の演算子タイプで上記と同様にしてその他の式ノードについての構成要素が生成される。
【０２０６】
【表４５】
0006338579.tif 000046
【０２０７】
これらの各構成要素が生成されると、作業用記憶域は次のレコードを保持している。
【０２０８】
【表４６】
0006338579.tif 000047
【０２０９】
マージされたクエリプランの残りの各式ノードに対応する構成要素の視覚表現を図１０Ａに示し、これはデータフローで相互に接続される前の状態である（すなわち識別子＃１、＃２、＃３、＃４、＃６、＃７、＃８、ＥＮＤを有するノード）。
【０２１０】
データフロー生成段階は、マッピングモジュールによって行われる２つの手順を含む。第１の手順では、マッピングモジュールは、必要な場合、特定の場所に複製構成要素を挿入する。特定の式ノードの識別子が２つ以上の式ノードの関係属性で参照される場合、マッピングモジュールは、複製構成要素を、その特定の式ノードに対応する構成要素の出力ポートに接続して、その構成要素から出るデータのコピーをそれに対応する数だけ提供する。例えば、式ノードＥが２つ以上の他の式ノードから参照される場合、E.Replicateと標記された複製構成要素が追加され、データフローが、作業用記憶域のレコードで指定されるＥの出力ポートから、E.Replicate.inと標記された新しい複製構成要素の入力ポートに接続される。マッピングモジュールはまた、E.Replicate.outと標記された新しい複製構成要素の出力ポートを、式ノードＥの出力ポートの新しい値として作業用記憶域のレコードに格納する。上記の例では、２つの式ノード（＃１及び＃２）が２つ以上の他の式ノードから参照される。したがって、マッピングモジュールはこの手順をその２つの式ノードに適用する。その結果、２つの複製構成要素（#1.Replicate及び#2.Replicate）がデータフローグラフに追加され、図１０Ｂに示すように対応する構成要素（＃１及び＃２）に接続される。この手順が済むと、作業用記憶域は次のレコードを保持している。
【０２１１】
【表４７】
0006338579.tif 000048
【０２１２】
データフロー生成段階の第２の手順では、マッピングモジュールは、式ノードのセットを横断することにより、ポート間をデータフローで接続する。式ノードＥ１の関係属性が別の式ノードＥ２の識別子を参照する場合、マッピングモジュールは、Ｅ２に対応する作業用記憶域レコードに記録されているＥ２の出力ポートから、それに対応する、Ｅ１に対応する作業用記憶域レコードに記録されているＥ１の入力ポートへのデータフローを生成する。例えば、式ノード＃４の関係属性は、式ノード＃２と＃６の結合操作を有する。したがって、ノード＃４の第１の入力ポート（#4.in0）はノード＃２の出力ポート（#2.Replicate.out）に接続され、ノード＃４の第２の入力（#4.in1）はノード＃６の出力（#6.out）に接続される。マッピングモジュールはこの処理を継続し、その結果図１０Ｃに示すデータフローグラフが得られる。データフローグラフの視覚表現は、ユーザに分かりやすいように構成要素を配置して提示することができるが、データフローグラフの機能はその接続によって決まり、構成要素の視覚的配置で決まるのではないことに留意されたい。
【０２１３】
データフロー生成段階の第２の手順が終わると、マッピングモジュールは、データフローで既存構成要素のいずれかに接続する構成要素がさらにあるかどうかを判定する。例えば、実施形態によっては、マッピングモジュールは、構成要素を追加して、データフローグラフで生成された最終的な出力を所望の出力先（例えば記憶媒体）に提供する。図１０Ｄは、ファイル出力構成要素がEND.outと標記されたＥＮＤ構成要素の出力ポートにリンクで接続されたデータフローグラフを示す。ファイル出力構成要素によって書き込みされるファイルの名前は、ユーザから、又はメタデータリポジトリなどの外部の入手元から取得することができる。
【０２１４】
レコード形式生成段階で、マッピングモジュールは、レコード形式がまだ提供されていないポートにレコード形式を生成する。この例では、（式ノード＃２、＃３、及び＃８の）ファイル入力構成要素のレコード形式はすでに次のようにメタデータリポジトリから得られている。
【０２１５】
【表４８】
0006338579.tif 000049
【０２１６】
マッピングモジュールは、下記で詳しく説明するように、データフローグラフをソース構成要素（すなわち入力ポートを持たない構成要素）から対象構成要素（すなわち出力ポートを持たない構成要素）へと横断し、構成要素ごとにその構成要素の出力ポートに適切なレコード形式を生成することにより、他の構成要素のレコード形式を生成する。そして、各構成要素の出力ポートにおけるレコード形式を、その出力ポートにデータフローで接続された入力ポートに伝搬させる（すなわちコピーする）。例えば、結合構成要素＃１の場合、その入力ポートｉｎ０及びｉｎ１のレコード形式は、接続された２つのファイル入力構成要素からそれぞれ伝搬されるレコード形式と同じである。すなわち、in0.format=#2.read、及びin1.format=#3.readである。
【０２１７】
複製構成要素の出力ポートのレコード形式は、その入力ポートのレコード形式と同じであり、入力ポートのレコード形式は、その複製構成要素に接続された構成要素の出力ポートのレコード形式と同じである。したがって、この例では、構成要素#2.Replicateの出力ポートのレコード形式は次のようになる。
【０２１８】
【表４９】
0006338579.tif 000050
【０２１９】
結合構成要素、リフォーマット構成要素、又はロールアップ構成要素の出力ポートのレコード形式は、その構成要素の変換関数を調べることによって決定される。変換関数が入力フィールドを出力フィールドにコピーする場合は、レコード形式は、入力フィールドのタイプと同じであるその出力フィールドのタイプを含む。変換関数が式に基づいて出力フィールドを決定する場合、レコード形式は、その式で返される値を保持するのに適した出力フィールドを含む。例えば、上記の結合構成要素＃１の変換関数の場合、出力フィールドout.aa、out.b1、及びout.aeがそれぞれの入力フィールドin0.aa、in1.b2、及びin0.aeからコピーされ、そのため、出力フィールドのタイプはそれぞれの入力フィールドのタイプと同じになる。残りの出力フィールドout.t1は、式in0.a1*in1.b1と定義される。２つの整数の積は整数であるため、出力フィールドout.t1のタイプは整数になる。入力ポート及び出力ポートについて求められたこれらのレコード形式は、結合構成要素＃１について次の完成した構成情報をもたらす。
【０２２０】
【表５０】
0006338579.tif 000051
【０２２１】
すべてのレコード形式が求められるまで、この処理を構成要素ごとに入力から出力へと繰り返す。この例では、レコード形式生成段階は、結合構成要素ＥＮＤの出力ポートのレコード形式を決定することによって終了する。実施形態によっては、レコード形式生成段階は、参照により本明細書に組み込まれる米国特許第７，８７７，３５０号明細書に詳細に記載される技術を使用して、レコード形式、又は構成要素の他のメタデータを導出することを含んでもよい。
【０２２２】
生成されるデータフローグラフの固有の特性は、エンティティによって表されるデータが記憶される場所などのシステム１００の各種特性に応じて決まる。例えば、エンティティＢ及びＥによって表されるデータがリレーショナルデータベースに格納され、最終的な出力がそのリレーショナルデータベースに格納される場合には、ソース構成要素＃３及び＃８の演算子タイプはテーブル入力になり、対象構成要素ＥＮＤの演算子タイプはテーブル出力になる。生成されたデータフローグラフは、図１１Ａに示すようにファイルを表す構成要素とテーブルを表す構成要素の混合を含む。
【０２２３】
別の例として、ソースから対象へのマッピングは、入力ポート及び出力ポートで別のデータフローグラフ中の構成要素に接続された「部分グラフ」として表示することができる。ファイル又はテーブルをソース構成要素及び対象構成要素として使用する代わりに、クエリプランからそのような部分グラフを生成する場合、ソース及び対象は、データフローでその他の構成要素に接続された部分グラフの境界（「境界ポート」とも呼ぶ）にある入力ポート及び出力ポートとして提供される。そのため、上記の例では、構成要素生成段階の前に、プリミティブ関係を有する式ノード（すなわち＃２、＃３、及び＃８）が、図１１Ｂに示すように他の構成要素に接続された、「ｉｎ＿２」、「ｉｎ＿３」、及び「ｉｎ＿８」と標記された入力境界ポートになる。それらの入力境界ポートについてのレコード形式は、上記の例と同様に外部の入手元から取得されるが、それに対応するエンティティについてのデータが格納されている場所を取得する必要はない。同様に、ファイル出力構成要素又はテーブル出力構成要素を追加する代わりに、マッピングモジュールは、リンクでＥＮＤ構成要素の出力ポートに接続されている出力境界ポート（図１１Ｂでは「ｏｕｔ」と標記されている）を生成する。式ノードのクエリプランに対応する部分グラフを生成する手順の他の面は上記の段階と同じである。そして、このマッピング部分グラフを特定のデータソース構成要素及び対象構成要素に接続して、図１１Ｃに示すように完全なデータフローグラフを形成する。この部分グラフ方式の利点の１つは、開発者がデータソースを手動で設定でき、柔軟性が向上することである。また、マッピング部分グラフは、いくつかの異なる内容のデータフローグラフの関連で再使用することができる。
【０２２４】
実施形態によっては、任意の最適化ステップで、得られるデータフローグラフ又は部分グラフ内で使用される構成要素の数を減らすことができる。例えば、いくつかの最適化は、同じデータセット（例えば、同じファイルのレコードの２つの異なるフィールド）からデータを読み出す動作を含む構成要素のマージを含むことができる。
【０２２５】
図１２Ａは部分的なデータモデル１２００の一例を示し、これは、Accounts、Transactions、Products、Bills、LineItem、及びProductUpdatesのエンティティを含み、それらの関係は、開発者から提供される、ソーススキーマ、対象スキーマ、及びソーススキーマと対象スキーマとのマッピング規則に従って定義される。データモデル１２００中のエンティティのリストされる属性は、定義されたレコード形式に従ってフォーマットされたレコードのフィールドに対応する。Accounts、Transactions、Products、Bills、及びLineItemのエンティティのレコード形式の例を下記に示す。実施形態によっては、開発者が次のレコード形式を提供し、システム１００がそれらのレコード形式から自動的に部分データモデル１２００を生成する。
【０２２６】
【表５１】
0006338579.tif 000052
0006338579.tif 000053
【０２２７】
これらのレコード形式に基づき、BillsエンティティはLineItemエンティティに対して主キー／外部キー関係を有する。LineItemエンティティは、Billsエンティティのインスタンスであるbillレコード内の行項目として出現する購入に関する詳細を含む下位レコードのベクトルを表す。各billレコードにはParentBillと呼ばれる一意の連続番号が割り当てられ、それを行項目のインスタンスとそれに対応するbillとの間の結合キーとして使用することができる。
【０２２８】
図１２Ｂは、開発者が追加的な関係を定義し、ソースエンティティと対象エンティティ間のマッピング規則を提供した後の例示的なデータモデル１２２０を示す。詳細には、開発者は、Accountsエンティティの主キーフィールドacctnumを参照するTransactionsエンティティの外部キーフィールドacctnumを通じて、TransactionsエンティティとAccountsエンティティの間に主キー／外部キー関係１２２２を定義している。開発者は、Productsエンティティの主キーフィールドＳＫＵを参照するTransactionsエンティティの外部キーフィールドＳＫＵを通じて、TransactionsエンティティとProductsエンティティの間に主キー／外部キー関係１２２４を定義している。Accountsエンティティ、Transactionsエンティティ、及びProductsエンティティはともに、対象スキーマの対象エンティティの属性を定義するために使用できるソーススキーマを表す。次に示すデータモデル１２２０の対象エンティティの属性（すなわちフィールド）の定義は、マッピング規則で定義されるように情報を格納するマッピングされたエンティティに関連付けられたレコードを生成することが可能なデータフローグラフなどの手順仕様を生成するためのマッピング規則としてマッピングモジュールにより解釈される。
【０２２９】
【表５２】
0006338579.tif 000054
【０２３０】
Bills-Accounts間のマッピング規則１２２６は、AccountsのソースエンティティのフィールドからBillsの対象エンティティのフィールドについての式を提供する。Billsエンティティのaccountフィールドには、Accountsエンティティのacctnumフィールドの値が割り当てられる。デフォルトでは、式中のフィールドの名前はソースエンティティのフィールドの名前を参照するため、Name、Address、及びBalanceのフィールドもAccountsエンティティのフィールドを参照する。式中のフィールドの名前がソースエンティティに出現しない場合は、対象エンティティのフィールドの名前、又は対象エンティティに関係付けられたエンティティを参照する。そのため、フィールドOldBalance、TotalCharges、及びNewBalanceはBillsエンティティのフィールドを参照し、フィールドQuantity及びPriceはLineItemエンティティのフィールドを参照する。集約関数sum()は、Billsエンティティの特定のレコードについて、ParentBillの外部キー値がBillsエンティティのその特定のレコードの値と一致するすべての下位レコードにわたって合計を算出する。
【０２３１】
LineItem-Transactions間のマッピング規則１２２８は、TransactionsのソースエンティティのフィールドからLineItemの対象エンティティのフィールドについての式を提供する。特定の行項目の下位レコードのDate、Quantity、及びPriceのフィールドには、それに対応する、Transactionsエンティティのtransactionレコード中の対応するフィールドの値が割り当てられる。特定の行項目についてのAmountフィールドには、Quantityの値に、対応するtransactionのPriceを乗算した値が割り当てられる。
【０２３２】
ProductUpdates-Products間のマッピング規則１２３０は、ProductsのソースエンティティのフィールドからProductUpdatesの対象エンティティのフィールドについての式を提供する。ProductUpdatesエンティティのレコードについての（主キー）ＳＫＵフィールドには、それに対応するProductsエンティティのレコードについての（主キー）ＳＫＵフィールドの値が割り当てられる。NewInventoryフィールドには、ProductsエンティティのInventoryフィールドと、productsエンティティに関係付けられたTransactionsエンティティのQuantityフィールドとに依存する式が割り当てられる。
【０２３３】
これらのマッピング規則に基づいて、マッピングモジュールは、上記のように生成されるマージされたクエリプランに基づいて、定義されたマッピング規則に対応するレコードを生成するためのデータフローグラフを生成することができる。マッピングモジュールは、マージされたクエリプランから他形態の手順仕様を生成することもできる。例えば、クエリプランの式ノードの関係式を使用してクエリ式（例えばＳＱＬのクエリ式）を生成することができる。式ノードの関係式の結果はビューの定義に対応することができ、結果が複数の式ノードにリンクされている場合は、結果に対応する一時的なテーブルを生成することができる。実施形態によっては、異なる個々の式ノードについて、クエリ式とデータフローグラフ構成要素の組み合わせを生成することができる。
【０２３４】
上記の技術は、適切なソフトウェアを実行するコンピューティングシステムを使用して実装することができる。例えば、ソフトウェアは、１又は２以上のプログラムされたコンピューティングシステム又はプログラム可能なコンピューティングシステム（分散、クライアント／サーバ、又はグリッドなどの各種アーキテクチャが可能）で実行される１又は２以上のコンピュータプログラム中のプロシージャを含むことができ、各コンピューティングシステムは、少なくとも１つのプロセッサ、少なくとも１つのデータ記憶システム（揮発性及び／又は不揮発性のメモリ及び／又は記憶素子を含む）、少なくとも１つのユーザインターフェース（少なくとも１つの入力装置又はポートを使用して入力を受け取り、少なくとも１つの出力装置又はポートを使用して出力を提供するためのもの）を含む。ソフトウェアは、例えばデータフローグラフの設計、設定、及び実行に関連するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含むことができる。プログラムのモジュール（例えばデータフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠したデータ構造や他の編成されたデータとして実装することができる。
【０２３５】
ソフトウェアは、ＣＤ−ＲＯＭや他のコンピュータ読取り可能媒体（例えば、汎用又は専用コンピューティングシステム又は装置により読取り可能）などの有形の非一時的媒体で提供するか、又はネットワークの通信媒体を通じて、ソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体に伝達する（例えば、伝搬信号に符号化する）ことができる。処理の一部又はすべては、専用コンピュータで、又はコプロセッサや利用者書き換え可能ゲートアレイ（ＦＰＧＡ，field-programmable gate array）又は専用の特定用途集積回路（ＡＳＩＣ，application-specific integrated circuit）などの専用ハードウェアを使用して実行することができる。処理は分散方式で実施することもでき、その場合は、ソフトウェアで指定される計算の各部分が異なる演算素子によって行われる。そのような各コンピュータプログラムは、好ましくは、汎用又は専用のプログラム可能コンピュータからアクセスできる記憶装置のコンピュータ読取り可能記憶媒体（例えば、固体素子メモリ若しくは媒体、又は磁気媒体若しくは光学媒体）に記憶又はダウンロードされ、記憶装置媒体がコンピュータによって読み取られると、本明細書に記載の処理を実行するようにコンピュータを構成し、操作する。本発明のシステムは、コンピュータプログラムと共に構成された有形の非一時的媒体として実施すると考えることもでき、その場合、そのように構成された媒体は、コンピュータを特定の事前に定義された方式で動作させて、本明細書に記載の処理ステップの１又は２以上を行わせる。
【０２３６】
本発明のいくつかの実施形態について説明した。ただし、上記説明は例示を目的とし、本発明の範囲を制限するものではなく、本発明の範囲は以下の特許請求の範囲によって定義されることを理解されたい。したがって、以下の特許請求の範囲には他の実施形態も包含される。例えば、本発明の範囲から逸脱することなく各種の変更を加えることができる。また、上記のステップの一部は順序に依存しない場合もあり、したがって記載される順序とは異なる順序で行ってもよい。
【図１Ａ】
0006338579.tif 000055
【図１Ｂ】
0006338579.tif 000056
【図２】
0006338579.tif 000057
【図３】
0006338579.tif 000058
【図４】
0006338579.tif 000059
【図５】
0006338579.tif 000060
【図６】
0006338579.tif 000061
【図７】
0006338579.tif 000062
【図８】
0006338579.tif 000063
【図９】
0006338579.tif 000064
【図１０Ａ−Ｂ】
0006338579.tif 000065
【図１０Ｃ−Ｄ】
0006338579.tif 000066
【図１１Ａ−Ｂ】
0006338579.tif 000067
【図１１Ｃ−Ｄ】
0006338579.tif 000068
【図１２Ａ】
0006338579.tif 000069
【図１２Ｂ】
0006338579.tif 000070