(57)【特許請求の範囲】
【請求項１】
複数の実体を表す実体データを記憶するデータストレージシステムであって、各実体が、１又は２以上の属性を有し、前記実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、前記インスタンスの少なくとも一部が、それぞれ、前記属性のうちの１又は２以上に関するそれぞれの値を有する、データストレージシステムと、
入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを受け取るための入力デバイス又はポートであって、前記入力実体が、前記入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、前記出力実体が、前記出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、入力デバイス又はポートと、
前記入力データに含まれる前記１又は２以上のマッピングに従って前記出力実体のインスタンスを生じさせるために前記入力実体のインスタンスを処理するように構成された少なくとも１つのプロセッサであって、処理することが、
前記１又は２以上のマッピングに基づいて前記出力実体の前記１又は２以上のキー属性のそれぞれに対応する前記入力実体の１又は２以上のマッピングされた入力属性を決定すること、及び
前記マッピングされた入力属性を前記入力実体の前記１又は２以上のキー属性と比較して、前記マッピングされた入力属性が（１）前記入力実体の前記キー属性のすべてを含むのか、又は（２）前記入力実体の前記キー属性の一部のみを含むのかを判定すること
を含む、少なくとも１つのプロセッサと
を含むコンピューティングシステム。
【請求項２】
出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定することが、前記１又は２以上のマッピングされた入力属性が前記出力実体のそれぞれのキー属性との一対一の対応を有するかどうかを判定することを含む、請求項１に記載のコンピューティングシステム。
【請求項３】
処理することが、（１）マッピングされた入力属性が入力実体のキー属性のすべてを含むと判定したことに応答して、一致するキー属性を有する出力実体のインスタンスと前記入力実体のインスタンスとの間の一対一の対応に基づいて、又は（２）前記マッピングされた入力属性が前記入力実体の前記キー属性の一部のみを含むと判定したことに応答して、前記マッピングされた入力属性に関して同じ値を共有する前記入力実体の複数のインスタンスの集約に基づいて前記出力実体の前記インスタンスを生じさせることをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項４】
実体データが、階層に従って関連付けられる複数の出力実体を表し、少なくとも１つの根の出力実体が、前記階層の最高レベルにあり、１又は２以上の出力実体が、前記階層の前記最高レベル未満の１又は２以上のレベルにあり、前記根の実体よりも低いレベルの各出力実体が、単一の出力実体の下位実体である、請求項１に記載のコンピューティングシステム。
【請求項５】
実体データが、階層に従って関連付けられる複数の入力実体を表し、少なくとも１つの根の入力実体が、前記階層の最高レベルにあり、１又は２以上の入力実体が、前記階層の前記最高レベル未満の１又は２以上のレベルにあり、前記根の実体よりも低いレベルの各入力実体が、単一の入力実体の下位実体である、請求項４に記載のコンピューティングシステム。
【請求項６】
階層に従って関連付けられる複数の出力実体に関連付けられない少なくとも第１の実体が、入力データに含まれるマッピングのうちの少なくとも１つによって出力属性として参照される少なくとも１つの属性を含む、請求項４に記載のコンピューティングシステム。
【請求項７】
第１の実体が、入力データに含まれるマッピングのうちの少なくとも１つによって入力属性として参照される少なくとも１つの属性を含む、請求項６に記載のコンピューティングシステム。
【請求項８】
第２の実体の下位実体である第１の実体の複数のインスタンスが、それぞれ、前記第２の実体の特定のインスタンスを特定する前記第１の実体のキー属性の共通の値を含む、請求項１に記載のコンピューティングシステム。
【請求項９】
第１の実体が、レコードの第１の組に対応し、第２の実体が、レコードの第２の組に対応し、前記第１の実体のキー属性が、レコードの前記第２の組の特定のレコードの主キーフィールドに含まれる値を特定するレコードの前記第１の組の外部キーフィールドに対応する、請求項８に記載のコンピューティングシステム。
【請求項１０】
第２の実体の下位実体である第１の実体の複数のインスタンスが、前記第２の実体の特定のインスタンスのデータ構造内に含まれるベクトルの複数の要素に対応する、請求項１に記載のコンピューティングシステム。
【請求項１１】
処理することが、入力実体のインスタンスを処理して出力実体のインスタンスを生じさせるためのデータフローグラフを使用して前記出力実体の前記インスタンスを生じさせることであって、前記データフローグラフが、実体のインスタンスに対する操作を実行するように構成された構成要素を表すノードと、構成要素の間のインスタンスのフローを表すノードの間のリンクとを含む、生じさせることをさらに含む、請求項１０に記載のコンピューティングシステム。
【請求項１２】
データフローグラフが、１又は２以上のマッピングの入力属性に基づいて別の実体のインスタンスのデータ構造から下位実体のインスタンスの１又は２以上のベクトルを抽出するように構成される少なくとも１つの分割構成要素と、前記１又は２以上のマッピングの出力属性に基づいて別の実体のインスタンスのデータ構造に下位実体のインスタンスの１又は２以上のベクトルを挿入するように構成される少なくとも１つの合成構成要素とを含む、請求項１１に記載のコンピューティングシステム。
【請求項１３】
データフローグラフが、マッピングされた入力属性が入力実体のキー属性の一部のみを含む各マッピングに関して、前記マッピングされた入力属性に関して同じ値を共有する前記入力実体の複数のインスタンスを集約するための集約操作を実行する少なくとも１つの構成要素を含む、請求項１１に記載のコンピューティングシステム。
【請求項１４】
入力データを受け取るように構成されたユーザインターフェースを表示するための少なくとも１つの出力デバイス又はポートをさらに含む、請求項１に記載のコンピューティングシステム。
【請求項１５】
ユーザインターフェースが、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせた結果を特徴付ける結果情報を表示するようにさらに構成される、請求項１４に記載のコンピューティングシステム。
【請求項１６】
結果情報が、生じさせられた出力実体のインスタンスの総数を含む、請求項１４に記載のコンピューティングシステム。
【請求項１７】
複数の実体を表す実体データを記憶するための手段であって、各実体が、１又は２以上の属性を有し、前記実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、前記インスタンスの少なくとも一部が、それぞれ、前記属性のうちの１又は２以上に関するそれぞれの値を有する、手段と、
入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを受け取るための手段であって、前記入力実体が、前記入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、前記出力実体が、前記出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、手段と、
前記入力データに含まれる前記１又は２以上のマッピングに従って前記出力実体のインスタンスを生じさせるために前記入力実体のインスタンスを処理するための手段であって、処理することが、
前記１又は２以上のマッピングに基づいて前記出力実体の前記１又は２以上のキー属性のそれぞれに対応する前記入力実体の１又は２以上のマッピングされた入力属性を決定すること、及び
前記マッピングされた入力属性を前記入力実体の前記１又は２以上のキー属性と比較して、前記マッピングされた入力属性が（１）前記入力実体の前記キー属性のすべてを含むのか、又は（２）前記入力実体の前記キー属性の一部のみを含むのかを判定すること
を含む、手段と
を含むコンピューティングシステム。
【請求項１８】
コンピューティングシステムでデータを処理するための方法であって、
複数の実体を表す実体データをデータストレージシステムに記憶するステップであって、各実体が、１又は２以上の属性を有し、前記実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、前記インスタンスの少なくとも一部が、それぞれ、前記属性のうちの１又は２以上に関するそれぞれの値を有する、ステップと、
入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを入力デバイス又はポートを介して受け取るステップであって、前記入力実体が、前記入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、前記出力実体が、前記出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、ステップと、
少なくとも１つのプロセッサによって、前記入力データに含まれる前記１又は２以上のマッピングに従って前記出力実体のインスタンスを生じさせるために前記入力実体のインスタンスを処理するステップであって、
前記１又は２以上のマッピングに基づいて前記出力実体の前記１又は２以上のキー属性のそれぞれに対応する前記入力実体の１又は２以上のマッピングされた入力属性を決定すること、及び
前記マッピングされた入力属性を前記入力実体の前記１又は２以上のキー属性と比較して、前記マッピングされた入力属性が（１）前記入力実体の前記キー属性のすべてを含むのか、又は（２）前記入力実体の前記キー属性の一部のみを含むのかを判定すること
を含む、ステップと
を含む方法。
【請求項１９】
コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、
複数の実体を表す実体データをデータストレージシステムに記憶することであって、各実体が、１又は２以上の属性を有し、前記実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、前記インスタンスの少なくとも一部が、それぞれ、前記属性のうちの１又は２以上に関するそれぞれの値を有する、記憶することと、
入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを入力デバイス又はポートを介して受け取ることであって、前記入力実体が、前記入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、前記出力実体が、前記出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、受け取ることと、
少なくとも１つのプロセッサによって、前記入力データに含まれる前記１又は２以上のマッピングに従って前記出力実体のインスタンスを生じさせるために前記入力実体のインスタンスを処理することであって、
前記１又は２以上のマッピングに基づいて前記出力実体の前記１又は２以上のキー属性のそれぞれに対応する前記入力実体の１又は２以上のマッピングされた入力属性を決定すること、及び
前記マッピングされた入力属性を前記入力実体の前記１又は２以上のキー属性と比較して、前記マッピングされた入力属性が（１）前記入力実体の前記キー属性のすべてを含むのか、又は（２）前記入力実体の前記キー属性の一部のみを含むのかを判定すること
を含む、処理することと
を行わせるための命令を含むソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１４年３月１４日に出願した米国特許出願第６１／９５３，０２１号明細書の優先権を主張するものである。
【０００２】
この説明は、キー指定される実体の属性のマッピングに関する。
【背景技術】
【０００３】
さまざまなシステムが、入力（又は「発信元」）システム又はフォーマットから出力（又は「宛先」）システム又はフォーマットにデータをマッピングする能力を有する。マッピングプロセスは、入力データに変換機能を適用することと、マッピングに応じて結果を出力データとして記憶することとを含む可能性がある。入力データの属性と出力データの属性との間の関連を指定する「マッピング」が、定義され得る。マッピングプロセスにより、例えば、入力データが出力データとしてシステムにロードされる可能性があり、又は入力データが出力データへと変換される可能性があり、又はそれら両方である可能性がある。入力又は出力データの内容は、場合によっては、その他のデータの特徴を記述するメタデータを表すデータ値を含む可能性がある。一部のシステムにおいては、マッピング操作が、抽出、変換、及びロード（ＥＴＬ，Extract, Transform, and Load）処理に関連して実行される。
【発明の概要】
【課題を解決するための手段】
【０００４】
一態様においては、概して、コンピューティングシステムが、複数の実体を表す実体データを記憶するデータストレージシステムであって、各実体が、１又は２以上の属性を有し、実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、インスタンスの少なくとも一部が、それぞれ、属性のうちの１又は２以上に関するそれぞれの値を有する、データストレージシステムと、入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを受け取るための入力デバイス又はポートであって、入力実体が、入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、出力実体が、出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、入力デバイス又はポートと、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせるために入力実体のインスタンスを処理するように構成された少なくとも１つのプロセッサとを含む。処理することは、１又は２以上のマッピングに基づいて出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定すること、及びマッピングされた入力属性を入力実体の１又は２以上のキー属性と比較して、マッピングされた入力属性が（１）入力実体のキー属性のすべてを含むのか、又は（２）入力実体のキー属性の一部のみを含むのかを判定することを含む。
【０００５】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【０００６】
出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定することは、１又は２以上のマッピングされた入力属性が出力実体のそれぞれのキー属性との一対一の対応を有するかどうかを判定することを含む。
【０００７】
処理することは、（１）マッピングされた入力属性が入力実体のキー属性のすべてを含むと判定したことに応答して、一致するキー属性を有する出力実体のインスタンスと入力実体のインスタンスとの間の一対一の対応、又は（２）マッピングされた入力属性が入力実体のキー属性の一部のみを含むと判定したことに応答して、マッピングされた入力属性に関して同じ値を共有する入力実体の複数のインスタンスの集約に基づいて出力実体のインスタンスを生じさせることをさらに含む。
【０００８】
実体データは、階層に従って関連付けられる複数の出力実体を表し、少なくとも１つの根の出力実体は、階層の最高レベルにあり、１又は２以上の出力実体は、階層の最高レベル未満の１又は２以上のレベルにあり、根の実体よりも低いレベルの各出力実体は、単一の出力実体の下位実体である。
【０００９】
実体データは、階層に従って関連付けられる複数の入力実体を表し、少なくとも１つの根の入力実体は、階層の最高レベルにあり、１又は２以上の入力実体は、階層の最高レベル未満の１又は２以上のレベルにあり、根の実体よりも低いレベルの各入力実体は、単一の入力実体の下位実体である。
【００１０】
階層に従って関連付けられる複数の出力実体に関連付けられない少なくとも第１の実体は、入力データに含まれるマッピングのうちの少なくとも１つによって出力属性として参照される少なくとも１つの属性を含む。
【００１１】
第１の実体は、入力データに含まれるマッピングのうちの少なくとも１つによって入力属性として参照される少なくとも１つの属性を含む。
【００１２】
第２の実体の下位実体である第１の実体の複数のインスタンスは、それぞれ、第２の実体の特定のインスタンスを特定する第１の実体のキー属性の共通の値を含む。
【００１３】
第１の実体は、レコードの第１の組に対応し、第２の実体は、レコードの第２の組に対応し、第１の実体のキー属性は、レコードの第２の組の特定のレコードの主キーフィールドに含まれる値を特定するレコードの第１の組の外部キーフィールドに対応する。
【００１４】
第２の実体の下位実体である第１の実体の複数のインスタンスは、第２の実体の特定のインスタンスのデータ構造内に含まれるベクトルの複数の要素に対応する。
【００１５】
処理することは、入力実体のインスタンスを処理して出力実体のインスタンスを生じさせるためのデータフローグラフを使用して出力実体のインスタンスを生じさせることであって、データフローグラフが、実体のインスタンスに対する操作を実行するように構成された構成要素を表すノードと、構成要素の間のインスタンスのフローを表すノードの間のリンクとを含む、生じさせることをさらに含む。
【００１６】
データフローグラフは、１又は２以上のマッピングの入力属性に基づいて別の実体のインスタンスのデータ構造から下位実体のインスタンスの１又は２以上のベクトルを抽出するように構成される少なくとも１つの分割構成要素（split component）と、１又は２以上のマッピングの出力属性に基づいて別の実体のインスタンスのデータ構造に下位実体のインスタンスの１又は２以上のベクトルを挿入するように構成される少なくとも１つの合成構成要素（combine component）とを含む。
【００１７】
データフローグラフは、マッピングされた入力属性が入力実体のキー属性の一部のみを含む各マッピングに関して、マッピングされた入力属性に関して同じ値を共有する入力実体の複数のインスタンスを集約するための集約操作を実行する少なくとも１つの構成要素を含む。
【００１８】
コンピューティングシステムは、入力データを受け取るように構成されたユーザインターフェースを表示するための少なくとも１つの出力デバイス又はポートをさらに含む。
【００１９】
ユーザインターフェースは、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせた結果を特徴付ける結果情報を表示するようにさらに構成される。
【００２０】
結果情報は、生じさせられた出力実体のインスタンスの数を含む。
【００２１】
別の態様においては、概して、コンピューティングシステムが、複数の実体を表す実体データを記憶するための手段であって、各実体が、１又は２以上の属性を有し、実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、インスタンスの少なくとも一部が、それぞれ、属性のうちの１又は２以上に関するそれぞれの値を有する、手段と、入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを受け取るための手段であって、入力実体が、入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、出力実体が、出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、手段と、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせるために入力実体のインスタンスを処理するための手段とを含む。処理することは、１又は２以上のマッピングに基づいて出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定すること、及びマッピングされた入力属性を入力実体の１又は２以上のキー属性と比較して、マッピングされた入力属性が（１）入力実体のキー属性のすべてを含むのか、又は（２）入力実体のキー属性の一部のみを含むのかを判定することを含む。
【００２２】
別の態様においては、概して、コンピューティングシステムでデータを処理するための方法が、複数の実体を表す実体データをデータストレージシステムに記憶するステップであって、各実体が、１又は２以上の属性を有し、実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、インスタンスの少なくとも一部が、それぞれ、属性のうちの１又は２以上に関するそれぞれの値を有する、ステップと、入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを入力デバイス又はポートを介して受け取るステップであって、入力実体が、入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、出力実体が、出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、ステップと、少なくとも１つのプロセッサによって、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせるために入力実体のインスタンスを処理するステップとを含む。処理するステップは、１又は２以上のマッピングに基づいて出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定すること、及びマッピングされた入力属性を入力実体の１又は２以上のキー属性と比較して、マッピングされた入力属性が（１）入力実体のキー属性のすべてを含むのか、又は（２）入力実体のキー属性の一部のみを含むのかを判定することを含む。
【００２３】
別の態様においては、概して、コンピュータ可読媒体に記憶されたソフトウェアが、コンピューティングシステムに、複数の実体を表す実体データをデータストレージシステムに記憶することであって、各実体が、１又は２以上の属性を有し、実体の少なくとも一部が、それぞれ、複数のインスタンスを有し、インスタンスの少なくとも一部が、それぞれ、属性のうちの１又は２以上に関するそれぞれの値を有する、記憶することと、入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応をそれぞれが定義する１又は２以上のマッピングを含む入力データを入力デバイス又はポートを介して受け取ることであって、入力実体が、入力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含み、出力実体が、出力実体に関する一意キーの一部として特定された１又は２以上のキー属性を含む、受け取ることと、少なくとも１つのプロセッサによって、入力データに含まれる１又は２以上のマッピングに従って出力実体のインスタンスを生じさせるために入力実体のインスタンスを処理することとを行わせるための命令を含む。処理することは、１又は２以上のマッピングに基づいて出力実体の１又は２以上のキー属性のそれぞれに対応する入力実体の１又は２以上のマッピングされた入力属性を決定すること、及びマッピングされた入力属性を入力実体の１又は２以上のキー属性と比較して、マッピングされた入力属性が（１）入力実体のキー属性のすべてを含むのか、又は（２）入力実体のキー属性の一部のみを含むのかを判定することを含む。
【００２４】
態様は、以下の利点のうちの１又は２以上を含む可能性がある。
【００２５】
マッピング技術は、入力データ及び出力データ内に存在する特定の実体の一意のインスタンスを特定するための特定の特徴を保存しながら、入力データを出力データにマッピングする際の柔軟性を与える。入力又は出力データは、１又は２以上の実体を表す「実体データ」を含み得る。実体は、独立して存在することができるか又は一意に特定され得る、情報領域（information domain）における特定の種類の任意の数のアイテム（item）の集合の抽象化と考えられる可能性がある。例えば、「Accounts」実体が、データベースのテーブルによって、又は（例えば、区切られたレコードを有する）ファイルとして記憶されるデータセットによって表される可能性がある。データベースのテーブル又はデータセットのファイルの個々のレコード（又は「行」）は、それぞれ、例えば、財務又は商業データを管理するシステムにおいて特定の口座名義人に関するAccounts実体の異なるインスタンスを表す可能性がある。実体は、特定のクラスのデータオブジェクトの集合などの任意のその他の種類のデータ構造によって表される可能性もあり、実体の異なるインスタンスは、データオブジェクトの異なるインスタンスに対応する。各実体は、任意の数の属性を有する可能性がある。例えば、データベースのテーブルによって表される実体においては、テーブルのフィールド（又は「列」）が、その実体の特定の属性に対応する特定の種類のデータ（例えば、所定のデータ型を有する変数）を記憶するために定義される可能性がある。Accounts実体に関するテーブルは、例えば、「first_name」、「last_name」、及び（社会保障番号のための）「SSN」とラベル付けされたフィールドを含む可能性があり、（Accounts実体のインスタンスを表す）テーブルのレコードは、それぞれ、フィールドのそれぞれに関するそれぞれの値を有する可能性がある。
【００２６】
実体の異なるインスタンスが一意に特定され得ることを保証するために、実体の１又は２以上の属性が、実体に関する一意キーの一部である「キー属性」として特定される。場合によっては、実体は、単一のキー属性を有する。例えば、「master_account_number」とラベル付けされたフィールドは、Accounts実体のインスタンスを表す各口座レコードに一意である値を記憶し得る。そのような単一のキーフィールドは、「単純キー（simple key）」と呼ばれることがある。場合によっては、実体が、（「複合キー」とも呼ばれる）一意キーを一緒に形成する複数のキー属性を有する。例えば、フィールド「first_name」と、「last_name」と、「SSN」との組合せ（例えば、連結）は、Accounts実体のインスタンスを表すレコードを一緒に一意に特定するキー属性として働く可能性がある。（「候補キー」とも呼ばれる）一意の値を有する複数のフィールドが存在し、それらのフィールドのうちの１つ（又はフィールドの組合せ）が、（「主キー」とも呼ばれる）使用される一意キーとして使用するために選択され得る。（「サロゲートキー」とも呼ばれる）一意キーの一部として働く値を記憶するためにレコードにフィールドが追加されることがある。
【００２７】
データ処理システムで特定のデータを処理することを試みるユーザに起こり得る問題は、処理がキー属性として特定のフィールドを必要とする可能性があるが、既存のデータがその他のフィールドをキー属性として有する可能性があることである。しかし、キーフィールドは、データが正しいプロパティを実際に有すること（つまり、キーのそれぞれの一意の値に関して単一のレコードが存在すること）を保証せずに変更され得ない。そのような再編成は、数千又は数百万のレコードが存在する可能性がある現実の産業アプリケーションにおいてユーザが実行するのに実際的でない可能性がある。本明細書において説明される技術は、入力レコードを１レコードずつ再編成すること（又はそのようにするためにプログラムを一から書くこと）をユーザに要求することなく、たとえキーの変更が必要とされるときでも処理が効率的に行われることを可能にする。例えば、技術は、特定の状況で必要とされる可能性がある任意の集約（例えば、特定のキーの値に関して複数のレコードからデータを集約すること）が所望のフィールドをキー属性として使用して適用されることを保証する。
【００２８】
特定の実体及びその実体の属性を表す実体データの構造は、レコード内のフィールドを定義するデータベースのテーブル又はデータセットのファイルのためのレコードフォーマットなどのフォーマット情報によって定義される可能性がある。各フィールドに現れる値のデータ型及びバイト長に加えて、レコードフォーマットは、どのフィールドが主キーを構成するキーフィールドとして使用されるべきであるかを定義する可能性がある。マッピング手順は、ユーザが出力実体のどの属性がキー属性であるべきかを定義することができることを可能にする。それらの出力キー属性の一部は、入力キー属性にマッピングされた可能性があり、又はそれらの出力キー属性の一部は、入力実体の非キー属性にマッピングされた可能性がある。それらの出力キー属性にマッピングされた入力属性を入力キー属性と自動的に比較することによって、システムは、出力実体のインスタンスを一意に特定することができる明確に定義された（well-defined）キー属性を維持するようにしてマッピングに従って出力実体のインスタンスをどのようにして生じさせるべきかを決定することができる。出力データによって表される出力実体への入力データによって表される入力実体のマッピングは、マッピングされた出力データが入力データよりも効率的に処理される及び／又は管理されることを可能にし得る。場合によっては、複数の関連する実体に関する実体データは、下でより詳細に説明されるように、実体のインスタンスの間の階層的関連を定義し得る。マッピング手順は、そのような階層を再編成し、実体が明確に定義されたキー属性を引き続き維持することを保証することができる。
【００２９】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【００３０】
【図１】データ処理システムのブロック図である。
【図２Ａ−２Ｂ】実体関連図である。
【図３Ａ−３Ｄ】ユーザインターフェースの一部の例のスクリーンショットである。
【図４】データフローグラフを生じさせるための手順の流れ図である。
【図５】データフローグラフの図である。
【発明を実施するための形態】
【００３１】
図１Ａは、マッピング技術が使用され得るデータ処理システム１００の例を示す。システム１００は、ストレージデバイス、又はオンラインデータストリームへの接続などのデータの１又は２以上のソースを含み得るデータ管理システム１０２を含み、それらの１又は２以上のソースのそれぞれは、さまざまなフォーマット（例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット）のいずれかでデータを記憶又は提供し得る。実行環境１０４は、マッピングモジュール１０６及び実行モジュール１１２を含む。実行環境１０４は、例えば、ＵＮＩＸオペレーティングシステムのバージョンなどの好適なオペレーティングシステムの制御下の１又は２以上の多目的コンピュータでホストされる可能性がある。例えば、実行環境１０４は、ローカルの（例えば、対称型マルチプロセッシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）又はローカルに分散された（例えば、クラスタ若しくは超並列処理（ＭＰＰ，massively parallel processing）システムとして接続された複数のプロセッサか、或いは遠隔の又は遠隔に分散された（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／若しくは広域ネットワーク（ＷＡＮ，wide-area network）を介して接続された複数のプロセッサ）か、或いはこれらの任意の組合せのいずれかの複数の中央演算処理装置（ＣＰＵ，central processing unit）或いはプロセッサコアを用いるコンピュータシステムの構成を含むマルチノード並列コンピューティング環境を含む可能性がある。
【００３２】
マッピングモジュール１０６は、データ管理システム１０２から入力データを読み、実行環境１０４によってアクセスされ得るデータストレージシステム１１６に記憶された１又は２以上のマッピング１１４に基づいて入力データの実体を出力データの実体にマッピングするように構成される。マッピング１１４は、それぞれ、入力実体の１又は２以上の入力属性と出力実体の１又は２以上の出力属性との間の対応を定義する。例えば、対応は、２つの属性の間の等式、又は１つの属性を別の属性の関数として定義する式である可能性がある。出力データは、データ管理システム１０２若しくはデータストレージシステム１１６に戻して記憶されるか、又はその他の方法で使用される可能性がある。データストレージシステム１１６は、任意のレベルのキャッシュメモリ、若しくはダイナミックランダムアクセスメモリ（ＤＲＡＭ，dynamic random access memory）内のメインメモリなどの揮発性ストレージ媒体、又は（１若しくは２以上の）磁気ハードディスクドライブなどの不揮発性ストレージを含むストレージ媒体の任意の組合せを含み得る。データ管理システム１０２を提供するストレージデバイスは、実行環境１０４のローカルにあり、例えば、実行環境１０４をホストするコンピュータに接続されたストレージ媒体（例えば、ハードドライブ１０８）に記憶される可能性があり、又は実行環境１０４のリモートにあり、例えば、（例えば、クラウドコンピューティングインフラストラクチャによって提供される）リモート接続を介して実行環境１０４をホストするコンピュータと通信するリモートシステム（例えば、メインフレーム１１０）でホストされる可能性がある。
【００３３】
実行モジュール１１２は、データ処理タスクを実行するためにマッピングモジュール１０６によって生じさせられる出力データを使用し、それらのデータ処理タスクの一部は、マッピング１１４によって定義された出力データのデータフォーマットに依拠する可能性がある。また、システム１００は、ユーザ１２０がマッピング１１４を定義することができるユーザインターフェース１１８（例えば、実行環境１０４と通信するか又は実行環境１０４をホストするコンピュータのディスプレイのスクリーンに表示されるグラフィカルユーザインターフェース）と、実行モジュール１１２によって実行されるべきデータ処理プログラムのその他の態様とを含む。システム１００は、一部の実施形態において、頂点間の（作業要素（work element）、すなわち、データのフローを表す）有向リンクによって接続された（データ処理構成要素又はデータセットを表す）頂点を含むデータフローグラフとしてアプリケーションを開発するために構成される。例えば、そのような環境は、参照により本明細書に組み込まれる「Managing Parameters for Graph-Based Applications」と題された米国特許出願公開第２００７／００１１６６８号明細書により詳細に説明されている。そのようなグラフに基づく計算を実行するためのシステムは、参照により本明細書に組み込まれる「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」と題された米国特許第５，９６６，０７２号明細書に説明されている。このシステムによって作成されるデータフローグラフは、プロセス間で情報を移動するため及びプロセスに関する実行の順序を定義するためにグラフの構成要素によって表される個々のプロセスに情報を出し入れするための方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信の方法を選択するアルゴリズムを含む（例えば、グラフのリンクに従った通信経路は、ＴＣＰ／ＩＰ若しくはＵＮＩＸドメインソケットを使用するか、又はプロセス間でデータを渡すために共有メモリを使用する可能性がある）。
【００３４】
マッピングモジュール１０６は、例えば、データセットファイル又はデータベーステーブルを含む、データ管理システム１０２からアクセス可能な入力データ内で表され得るさまざまな種類の実体の属性をマッピングすることができる。実体のデータ内容は、おそらくはヌル値を含むそれぞれの属性（「フィールド」又は「カラム」とも呼ばれる）に関する値を有するレコードとして編成される可能性がある。マッピングモジュール１０６は、概して、その実体内のレコードについての何らかの最初のフォーマット情報から始める。場合によっては、入力データ内の実体のレコード構造は、最初は知られていない可能性があり、その代わりに、入力データの分析後に決定される可能性がある。レコードについての最初の情報は、例えば、区別可能な値を表すビットの数、レコード内のフィールドの順序、及びビットによって表される値の型（例えば、文字列、符号付き／符号なし整数）を含む可能性がある。
【００３５】
一部の入力データ又は出力データに関して、実体は、実体が階層によって互いに関連付けられる階層構造を有する可能性がある。概して、階層は、頂点が実体を表し、辺が実体の間の関連を表す、有向辺によって接続された頂点のグラフ（例えば、有向非循環グラフ（ＤＡＧ，directed acyclic graph））として表され得る。一部の実施形態において、関連は、実体の間の主キー／外部キーの関連に対応する。その他の実施形態において、関連は、１つの実体のインスタンスの属性内に別の実体のインスタンスを入れ子にすることに対応する。各頂点は、階層の特定のレベルにある。少なくとも１つの実体（例えば、階層が木構造を有する場合の根の実体）は、階層の最も高いレベルにあり、１又は２以上の実体は、階層の最も高いレベル未満の１又は２以上のレベルにある。最も高いレベル未満のレベルの各実体は、単一のより高いレベルの実体（又は「親実体」）の下位実体（又は「子実体」）である。例えば、関連が主キー／外部キーの関連であるとき、子実体のインスタンスは、値が親実体の特定のインスタンスの一意主キーの値である外部キーフィールドを有する。関連が入れ子の関連であるとき、子実体のインスタンスは、（例えば、親インスタンスの属性内に子インスタンスのデータ構造自体又は子インスタンスのデータ構造へのポインタを記憶することによって）親実体の特定のインスタンスの属性内に含まれる。
【００３６】
そのような階層構造は、実体関連（ＥＲ，entity-relationship）図でグラフィカルに表され得る。図２Ａは、木構造を有する実体の入力階層２００の例に関するＥＲ図を示す。最も高いレベルでは、「Accounts」実体が、属性ラベルの後の「(K)」によって示されるキー属性である「master_account_number」とラベル付けされた単一の属性を有する。Accounts実体に関するその他のキー属性が存在しないので、master_account_numberの値は、Accounts実体の異なるインスタンスを一意に特定する。Accounts実体は、２つの子実体、すなわち、「CheckingAccounts」実体及び「SavingsAccounts」実体への関連に関する属性も有する。親実体とそれぞれの子実体との間の図２００のコネクタ（connector）は、一対多の関連を示し、一対多の関連とは、親実体の１つのインスタンスに関して、子実体のゼロ個、１個、又は多くの関連するインスタンスが存在することを意味する。この一対多の関連は、子実体においてカラスの足（crow’s foot）で終わる、親実体と子実体との間の線として示される。
【００３７】
CheckingAccounts実体は、２つのキー属性、すなわち、「master_account_number」とラベル付けされた属性及び「acct_id」とラベル付けされた属性を有する。master_account_number属性は、親Accounts実体の関連するインスタンスの主キーの特定の値を記憶する外部キーである。acct_id属性は、異なる当座預金口座（checking account）を、たとえそれらの当座預金口座がAccounts実体の同じ統括口座（master account）のインスタンスの子であるとしても（例えば、特定の統括口座に関連する口座名義人が複数の当座預金口座を有する場合）互いに一意に区別する複合キーを形成する追加のキー属性である。同様に、SavingsAccounts実体は、２つのキー属性、すなわち、任意の数の普通預金口座（savings account）が互いに一意に区別されることをやはり可能にする「master_account_number」とラベル付けされた属性及び「acct_id」とラベル付けされた属性を有する。CheckingAccounts実体及びSavingsAccounts実体のそれぞれは、これらの実体に関する非キー属性であるその他の属性、すなわち、「first_name」、「last_name」、「SSN」、「balance」、及び「interest_rate」も有する。
【００３８】
図２Ｂは、やはり木構造を有する実体であるが、入力階層２００とは異なる数の実体の出力階層２１０の例に関するＥＲ図を示す。マッピングモジュール１０６は、出力階層２１０の一部として生じさせられるべき「AccountHolders」出力実体を指定するマッピングを（例えば、ユーザから）受け取った。この例において、出力階層２１０の一部であるその他の出力実体（すなわち、最高レベルの実体Accounts並びにその子実体CheckingAccounts及びSavingsAccounts）は、入力階層２００に見られた対応するラベル付けされた実体からマッピングされる。AccountHolders実体は、CheckingAccounts実体の１若しくは２以上のインスタンス及び／又はSavingsAccounts実体の１若しくは２以上のインスタンスから導出される各口座名義人に関する属性を有するインスタンスを有する。特に、以下でより詳細に説明されるように、AccountHolders実体のインスタンスの属性のうちの４つ（「master_account_number」、「first_name」、「last_name」、及び「SSN」）は、CheckingAccounts又はSavingsAccounts実体のうちの１つのインスタンスの対応するラベル付けされた属性から導出され、AccountHolders実体のインスタンスの属性のうちの１つ（「balance」）は、複数のインスタンスに対する集約機能に基づいて計算される。AccountHolders実体は、２つのキー属性、すなわち、master_account_number及びSSNを有する。master_account_number属性は、やはり、親Accounts実体の関連するインスタンスの主キーの特定の値を記憶する外部キーである。（口座名義人の社会保障番号を記憶する）SSN属性は、異なる口座名義人（すなわち、AccountHolders実体のインスタンス）を、たとえそれらの口座名義人がAccounts実体の同じ統括口座のインスタンスの子であるとしても、互いに一意に区別する複合キーを形成する追加のキー属性である。
【００３９】
図３Ａは、入力セクション３０２Ａ内に表示された入力階層によって出力セクション３０２Ｂ内に表示される出力階層を定義するためのユーザインターフェース３００の例のスクリーンショットを示す。スクリーンショットに示されるユーザインターフェース３００の状態は、ユーザがソーストゥターゲット（Source-to-Target）マッピングセクション３０４内で所望のマッピング１１４を定義する情報を供給し、入力階層のレコードから出力階層のレコードを生じさせるための変換を実行した例に対応する。入力階層は、システム１００によって解釈され得る構文規則（例えば、データ操作言語（ＤＭＬ，Data Manipulation Language）の構文規則若しくは拡張可能マークアップ言語（ＸＭＬ，Extensible Markup Language）構文規則）によって定義されたレコードフォーマット、又はデータベーステーブルのスキーマなどの記憶されたフォーマット情報に従って表示される。以下は、この例においては、入力レコードのフィールドとして入力属性を定義するＤＭＬ構文規則を用いて入力階層を指定するレコードフォーマットの例である。
record 
decimal(",") master_account_number; 
record   
string(",") first_name; 
string(",") last_name; 
string(",") SSN; 
string(",") acct_id; 
decimal(",") balance; 
decimal(",") interest_rate; 
end[decimal(4)] checking_accounts; 
record   
string(",") first_name; 
string(",") last_name; 
string(",") SSN; 
string(",") acct_id; 
decimal(",") balance; 
decimal(",") interest_rate; 
end[decimal(4)] savings_accounts; 
string("\n") new_line= "\n"; 
end;
【００４０】
「record」及び「end」キーワードの外側のペアは、最高レベルの（「in」）実体を表すレコードを定義する。「record」及び「end」キーワードの内側のペアは、子（checking_accounts及びsavings_accounts）実体を表すレコードを定義する。実体の属性を表すフィールドは、「record」キーワードと「end」キーワードとの間に列挙される。レコードフォーマットは、必ずしもそのレコードによって表される高レベルの実体の一部とは限らない値を記憶するためにレコードに含まれるべきフィールドを定義する可能性がある。この例においては、new_lineフィールドが、レコードフォーマットにおいてchecking_accounts及びsavings_accountsレコードの後に現れ、「in」実体の属性として使用されるのではなく、むしろ、例えば、テキストエディタに表示されるリスト内の「in」実体のインスタンスを表す異なる実際のレコードの間のハードコーティングされた改行文字を与えるための構文規則要素として使用される。
【００４１】
マッピングモジュール１０６は、ソーストゥターゲットマッピングセクション３０４内で定義されたマッピング１１４従って、「out」実体のインスタンスを表すレコードのために使用されるべき適切なレコードフォーマットを生じさせる。以下は、この例においては、出力レコードのフィールドとして出力属性を定義する同じＤＭＬ構文規則を用いて出力階層を指定するレコードフォーマットの例である。
record 
decimal(",") master_account_number; 
record 
string(",") first_name; 
string(",") last_name; 
string(",") SSN; 
decimal(",") balance; 
end[decimal(4)] account_holders; 
record   
string(",") acct_id; 
string(",") SSN;
decimal(",") balance; 
decimal(",") interest_rate; 
end[decimal(4)] checking_accounts; 
record   
string(",") acct_id; 
string(",") SSN; 
decimal(",") balance; 
decimal(",") interest_rate; 
end[decimal(4)] savings_accounts; 
string("\n") new_line= "\n"; 
end;
【００４２】
この出力レコードフォーマットは、ユーザが出力階層内のさまざまな実体の属性のためのマッピングを与えた後に生じさせられ、ユーザは、各出力実体の属性のうちのどれがキー属性として使用されるべきかを（例えば、出力セクション３０２Ｂ内で）特定することができる。出力実体のどの属性がキー属性であるかについてのこの情報及び入力実体のどの属性がそれらのキー属性にマッピングされたかについての情報（出力キーの「逆像（inverse image）」と呼ばれる）が、データフローグラフを生じさせるために使用され、そして、そのデータフローグラフは、以下でより詳細に説明されるように、出力階層の実体のインスタンスを表す実際のレコードを生じさせるために実行される。
【００４３】
表示されるユーザインターフェース３００は、「in」とラベル付けされた入力セクション３０２Ａの一番上の入力階層の最高レベルの実体を表す（テーブルを示す）アイコンと、「out」とラベル付けされた出力セクション３０２Ｂの一番上の出力階層の最高レベルの実体を表す（テーブルを示す）アイコンとを含む。各実体のインスタンスの数が、ラベルの隣に角括弧に入れて表示される。例えば、出力階層のレコードが生じさせられた後、「[5 recs]」が、両方の最高レベルの実体に関して表示され、その実体の異なるそれぞれのインスタンスの内容を記憶する５つのレコードが存在することを示す。この例において、最高レベルの入力実体及び出力実体は、図２Ａ及び２ＢのＥＲ図のAccounts実体にそれぞれ対応する。これらの最高レベルの実体のそれぞれは、最高レベルの実体に関するアイコンの直下に現れるアイコンの後に表示されるキー属性master_account_numberを表すフィールドを含む、ＥＲ図に示される同じ属性及び下位実体を表すフィールドを含む。属性に対応するフィールドは、そのフィールドが「string」型の値としてレコードに現れることを示す文字「Ａ」を示すアイコンを伴って、又はそのフィールドが「decimal」型の値としてレコードに現れることを示す数字「１２」を示すアイコンを伴って表示される。ユーザインターフェース３００において、キーの一部である各フィールド（すなわち、キー属性）は、フィールドのアイコンの隣に現れるキーを示すアイコンによってユーザインターフェース３００内で特定される。
【００４４】
ユーザインターフェース３００は、入力セクション３０２Ａ及び出力セクション３０２Ｂが、それぞれオプションセクション３０６Ａ及びオプションセクション３０６Ｂにおいて選択可能である異なるビューモードで見られることを可能にする。「階層ビューモード」においては、親実体の下位実体に関するテーブルアイコンが、その親実体の属性と同じ量だけ字下げされて表示され、親実体のキー属性を指すキー属性は、子実体においては示されない。図３Ａは、入力セクション３０２Ａと出力セクション３０２Ｂとの両方を階層ビューモードで示す。入力セクション３０２Ａに関しては、checking_accounts実体及びsavings_accounts実体に関するテーブルアイコンが、下に現れ、master_account_numberキー属性に関するアイコンと水平方向に位置合わせされる。出力セクション３０２Ｂに関しては、account_holders実体及びchecking_accounts実体及びsavings_accounts実体に関するテーブルアイコンが、下に現れ、master_account_numberキー属性に関するアイコンと水平方向に位置合わせされる。
【００４５】
少なくとも１つの下位実体を有する各実体は、１又は２以上のキー属性からなるキーを有する。これは、各下位実体が、下位実体の各インスタンスに関してその下位実体に関連する親実体の一意のインスタンスを特定する対応する外部キー属性を持つことを可能にする。親実体のキーの（外部キー）値を記憶するキー属性の存在は、そのような属性を表示しない階層ビューモードにおいては暗黙的である。例えば、入力階層と出力階層との両方に関して、checking_accounts下位属性は、一緒に複合キーを形成するキーアイコンを伴うキー属性acct_idと親の最高レベルの「in」又は「out」実体のmaster_account_numberキー属性の値を記憶する別のキー属性とを有する。階層ビューモードにおいては、テーブルアイコンが、その実体の属性及び下位実体（もしあれば）を示すか又は隠すためにその実体を展開するか又は折りたたむための三角形と共に表示される。
【００４６】
「実体ビューモード」においては、階層の異なるレベルの実体に関するテーブルアイコンが、互いに同じ量だけ字下げされて表示され、親実体のキー属性を指すキー属性は、子実体において示される。図３Ｂは、入力セクション３０２Ａと出力セクション３０２Ｂとの両方を実体ビューモードで示す。入力セクション３０２Ａに関しては、checking_accounts実体及びsavings_accounts実体に関するテーブルアイコンが、下に現れ、「in」実体に関するアイコンと水平方向に位置合わせされる。出力セクション３０２Ｂに関しては、account_holders実体及びchecking_accounts実体及びsavings_accounts実体に関するテーブルアイコンが、下に現れ、「out」実体に関するアイコンと水平方向に位置合わせされる。実体ビューモードにおいて、親実体のキーの（外部キー）値を記憶するキー属性の存在は、明示的に示される（例えば、「in.master_account_number」及び「out.master_account_number」と名付けられたフィールド）。実体ビューモードにおいては、テーブルアイコンが、その実体の属性を示すか又は隠すためにその実体を展開するか又は折りたたむための三角形と共に表示されるが、いずれの下位実体も、独立して展開される／折りたたまれる。
【００４７】
図３Ａと図３Ｂとの両方に示されたように、ソーストゥターゲットマッピングセクション３０４は、ソースとターゲットとの間のマッピングを定義するための、行番号３０８によってラベル付けされた行を含む。マッピングは、任意の順序で入力される可能性があり、ユーザは、定義されるマッピングの種類を説明するためのコメントを与えるためにいくつかの行を使用する可能性があってもよい。マッピングを定義することの一部として、ユーザは、出力階層の実体のどの属性が実体の異なるインスタンスを一意に特定するためのキー属性であるべきかを示す。マッピングモジュール１０６は、以下でより詳細に説明されるように、キー属性のこの指示に基づいて、どのマッピングが「マッピング」であり、どのマッピングが「集約されたマッピング（aggregated mapping）」であるかを決定する。そのままのマッピング（straight mapping）に関しては、入力階層の実体のインスタンスと出力階層の対応する実体のインスタンスとの間に既定の一対一の関連がある。しかし、以下でより詳細に説明されるように、例えば、入力実体の一部のインスタンスが、対応する出力実体のインスタンスとして現れないように除去される場合、必ずしも常に一対一の関連があるとは限らず、対応する実体は、同じ属性又は下位実体のすべてを必ずしも持たない。集約されたマッピングに関して、実行モジュール１１２は、以下でより詳細に説明されるように、入力実体及び／又は一時的実体によって出力実体のインスタンスを生じさせるプロセスにおいて、マッピングモジュール１０６によって指定されたように１又は２以上の集約操作を実行する。集約されたマッピングに関しては、概して、入力階層の実体のインスタンスと出力階層の対応する実体のインスタンスとの間に一対一の関連がない。
【００４８】
ソーストゥターゲットマッピングセクション３０４は、ユーザが入力階層からの入力実体又は一時的実体をソースとして特定するためのソース列３１０と、ユーザが出力階層からの出力実体又は一時的実体をターゲットとして特定するためのターゲット列３１２とを含む。一時的実体は、例えば、ターゲットとして定義されたが、出力階層内に含まれない一時的実体である可能性がある。除去され、マッピングされたターゲットのレコードとして伝えられないソースの特定のレコードを特定するフィルタリング機能を適用するオプションのフィルタをユーザが定義することを可能にするフィルタ列３１４が存在する。それぞれのソース及びターゲットの実体のインスタンスに対応するレコードの数をそれぞれ提供するレコードカウント列３１６Ａ及び３１６Ｂが存在する。対応するソース又はターゲットの実体のインスタンス（すなわち、レコード）のビューにナビゲートするためにユーザがインタラクションすることができるアイコンをそれぞれ提供するビュー列３１８Ａ及び３１８Ｂが存在する。
【００４９】
図３Ｃ及び３Ｄは、ソーストゥターゲットマッピングセクション３０４の特定の行で特定されたソースとターゲットとの間のマッピングを定義するためのユーザインターフェース３２０の例のスクリーンショットを示す。ユーザは、例えば、特定の行に関するマッピング列３１９のアイコンを選択することによってこのユーザインターフェース３２０にナビゲートすることができる。図３Ｃにおいて、スクリーンショットは、（ソーストゥターゲットマッピングセクション３０４の行４に関する）「in.checking_accounts」から「out.checking_accounts」へのマッピングを示す。実体名をプレフィックスとして、属性又は下位実体が属する実体を明示的に示すために、特定の文脈でドット記法が使用される。一部の文脈では、属性又は下位実体が属する実体についての曖昧性がない場合、その属性又は下位実体の名前が、プレフィックスなしに表示される（又は入力として受け取られる）可能性がある。入力セクション３２２は、式／規則列３２４にユーザによって入力された式で使用されるべき入力として利用可能な実体及びそれらの実体の属性を列挙する。出力／内部名列３２６は、式／規則列３２４のそれぞれの式によって計算されている出力実体out.checking_accountsの各属性を別々の行に含む。この例は、入力実体in.checking_accountsの対応するインスタンスと同じ値を有するものとして定義されている出力実体out.checking_accountsのインスタンスの５つの属性を含む。特に、次の属性、すなわち、out.master_account_number（親実体「out」の対応する属性の値を参照する外部キー）、out.checking_accounts.acct_id、out.checking_accounts.SSN、out.checking_accounts.balance、及びout.checking_accounts.interest_rateが定義される。in.checking_accounts実体の対応する属性だけが、式／規則列３２４に列挙される（入力階層からのものであると仮定されるこれらの属性名に関しては前に付く「in.」プレフィックスが必要とされない）。それは、この特定の例においてout.checking_accounts実体の対応する属性として定義されないin.checking_accounts実体の２つのその他の属性、すなわち、checking_accounts.first_name及びchecking_accounts.last_nameを残す。ユーザインターフェース３２０は、各行で定義された対応する出力属性の値を示す計算された値列３２８も含む。それらの出力属性が計算される入力属性の値も、入力セクション３２２において、その属性を表すフィールドの名前の後に括弧に入れて示される。種類列３３０は、その行で定義されたマッピングが（矢印アイコンを有する）「単純マッピング（simple mapping）」であるか又は（点で描かれたアイコンを有する）「複雑マッピング（complex mapping）」であるかを示すアイコンを示す。単純マッピングは、出力属性を同じ名前の入力属性にマッピングするか又は出力属性に一定の値を割り振る単純マッピングである。すべてのその他のマッピングは、複雑マッピングである。ユーザインターフェース３００の行に関するマッピング列３１９は、そのマッピング列３１９の対応するユーザインターフェース３２０で定義されたマッピングのすべてが単純マッピングである場合、単純マッピングのアイコンを有し、そのマッピング列３１９の対応するユーザインターフェース３２０で定義されたマッピングのいずれかが複雑マッピングである場合、複雑マッピングのア��コンを有する。
【００５０】
図３Ｄにおいて、スクリーンショットは、（ソーストゥターゲットマッピングセクション３０４の行２に関する）「in.checking_accounts」から「account_holders」へのマッピングを示す。このマッピングに関する出力／内部名列３２６は、式／規則列３２４のそれぞれの式によって計算されている出力実体out.account_holdersの各属性を別々の行に含む。この例は、定義されている出力実体out.account_holdersの５つの属性を含む。５つの属性のうちの４つは、入力実体のインスタンスの対応する属性（つまり、同じフィールド名を有する）によって定義された出力実体のインスタンスの属性との単純マッピングである。５つの属性のうちの１つは、潜在的に複数の入力実体のインスタンスの属性によって（out.account_holders実体のインスタンスに関する）属性out.account_holders.balanceを定義する複雑マッピングである。この例において、out.account_holders.balanceに関する式／規則列３２４の式は、以下の通りである。
sum(in.checking_accounts.balance,in.checking_accounts.SSN) + 
sum(in.savings_accounts.balance,in.savings_accounts.SSN==in.checking_accounts.SSN)
【００５１】
この式は、実行モジュール１１２が出力階層の出力実体のインスタンスを生じさせるときに実行されるべき集約操作を定義する。集約操作は、次の構文規則、すなわち、sum(<aggregation_attr>,<match_attr>==<key_attr>)を有するsum関数を用いて定義される合計である。この関数の第１の引数「<aggregation_attr>」は合計の被加数（summand）であるべき属性である。総和は、１つの引数の実体又は複数の引数の実体（すなわち、属性が引数<aggregation_attr>として提供される任意の実体）の複数のインスタンスに対して行われる。この関数の第２の引数「<match_attr>==<key_attr>」は、それ自体、第１の被加数引数が合計に含まれるために満たされなければならない条件を示す式である。キー属性<key_attr>は、マッピングで使用される入力実体のキー属性であり、属性<match_attr>は、そのキー属性とマッチングされるべき引数の実体の「マッチ属性（match attribute）」である。このsum関数は、属性<match_attr>が<key_attr>と同じである特別な場合にだけその属性<match_attr>が列挙されることを許容するオプションの構文規則を有する。もちろん、ユーザは、逆順の式「<key_attr>==<match_attr>」を入力することができ、効果は同じである。したがって、上の式に関して、実行される集約は、in.checking_accounts実体か又はin.savings_accounts実体かのどちらかのすべてのインスタンスの「balance」属性の値を見つけ、それらの実体のそれぞれのインスタンスのSSN属性が同じである場合にそれらの値を足し合わせる。これは、SSNの値をその実体のout.account_holders.SSN属性として有するout.account_holders実体のインスタンスのout.account_holders.balance属性に割り振られるべき、SSNのそれぞれの一意の値に関する１つの合計された総合結果をもたらす。
【００５２】
この例において、出力階層の出力実体のインスタンスを生じさせる実行モジュール１１２の結果は、集約操作が、５つの最高レベルの「in」レコードの中から見つかった８つのin.checking_accountsレコード及び４つの普通預金口座レコードの中からSSN属性の９つの一意の値を見つけたことを示す９つのout.account_holdersレコードを生じる。ユーザによって定義されたマッピングを実行した結果として生じさせられたレコードの数は、出力セクション３０２Ｂ内に表示され、ユーザが生じさせられたレコードの数が予測された通りであったかどうかを判定し、入力された式が正しかったことを確認するのを助けるための貴重なフィードバックを提供する。各実体に関するレコードの総数に加えて、さまざまな階層の統計（例えば、最小値及び最大値）が、入力階層と出力階層との両方に関して計算され、ユーザインターフェース３００に表示される可能性がある。フィルタが使用される場合、フィルタによって拒絶された及び／又は許容されたレコードの数が、表示され得る。
【００５３】
一部の実施形態において、ユーザインターフェース３２０は、フィールドに関連する名前（例えば、ビジネスネーム（business name）、テクニカルネーム（technical name））の間の類似性の分析、及び／又はキーフィールドの間の分析に基づいて自動的に生じさせられる、入力実体のフィールドと出力実体のフィールドとの間の既定のマッピングから始める可能性がある。ユーザは、もしあれば、既定のマッピングのうちのどれを認めるかを決定することができ、又は自動マッピングの特徴をオフにすることができる。自動マッピングの特徴は、ユーザがフィールドのすべてに関するマッピングを手動で与える必要性をなくし、その代わりに、関心のある特定のフィールドに関するマッピングを与えることに集中することができる。
【００５４】
一部の実施形態において、実行モジュール１１２は、入力レコード（すなわち、入力階層の入力実体のインスタンス）を処理して出力レコード（すなわち、出力階層の出力実体のインスタンス）を生じさせるためにマッピングモジュール１０６によって生じさせられたデータフローグラフを実行する。図４は、そのようなデータフローグラフを自動的に生じさせるためにマッピングモジュール１０６によって使用される手順４００の例を示す。手順４００は、図５に示される例示的なデータフローグラフ５００を生じさせることの説明の中で下でより詳細に説明される、データフローグラフを構築することに関わる異なるステップを含む。手順４００のその他の例は、同じステップを異なる順序で実行する可能性があり、異なるループ構成を使用する可能性があり、又はデータフローグラフ（若しくはそれらのデータフローグラフの均等物）を構築する異なるステップを異なる順序で含む可能性がある。
【００５５】
手順４００は、入力階層の実体のインスタンスを表すレコードを記憶する入力データセットを表す入力構成要素、及び出力階層の実体のインスタンスを表すレコードを記憶する出力データセットを表す出力構成要素を提供するステップ（４０２）を含む。手順４００は、入力構成要素に接続された分割構成要素及び出力構成要素に接続された合成構成要素を提供するステップ（４０４）も含む。分割構成要素は、別の実体のインスタンスのデータ構造内に埋め込まれた下位実体のインスタンスを表す任意のレコード（又はその他のベクトルデータ構造）を抽出するように構成される。マッピングモジュール１０６は、マッピングの入力属性に基づいて分割構成要素を構成する。したがって、分割構成要素の出力ポートの少なくとも一部は、マッピングのうちの１つのソースとして使用される入力実体のインスタンスを表すレコードのフローを提供する。より低いレベルの実体のインスタンスを表すレコードがそのレコードの親レコードから取り除かれ、より高いレベルの実体のインスタンスを表すレコードがいかなる埋め込まれた子レコードも含まないように、その他のレコード内に入れ子にされたすべてのレコードが抽出される。合成構成要素は、より高いレベルの実体のインスタンスのデータ構造に下位実体のインスタンスを表す任意のレコードを挿入することによって分割構成要素の逆のプロセスを実行するように構成される。マッピングモジュール１０６は、マッピングの出力属性に基づいて合成構成要素を構成する。
【００５６】
手順４００は、合成構成要素への入力が処理される外側のループ４０６と、分割構成要素の出力が処理される内側のループ４０８とを有する。外側のループ４０６のループ条件４１０は、処理される必要がある合成構成要素に関するいずれかのさらなる入力ポートが存在するかどうかを判定し、入力ポートの数は、概して、根のレベルの直下の出力階層の最も高いレベルに関して生じさせられる出力実体の数に基づく。外側のループ４０６において、マッピングモジュール１０６は、各出力実体をマッピングするための入力として使用されるべき分割構成要素の出力の数にかかわらず必要とされるデータフローグラフの任意の構成要素を生じさせる（４１０）。内側のループ４０８において、マッピングモジュール１０６は、マッピングへの入力として働く分割構成要素の各出力に関するさまざまな計算を実行するために必要とされるデータフローグラフの任意の構成要素を生じさせる（４１２）。上述のように、マッピングされた入力属性（すなわち、出力実体のキー属性にマッピングされた入力属性）が入力実体のキー属性の一部のみを含む各マッピングに関しては、少なくとも１つの構成要素が、マッピングされた入力属性に関して同じ値を共有する入力実体の複数のインスタンスを集約するための集約操作を実行する。分割構成要素によって与えられるレコードの入力属性の特徴に依存して、必要に応じて、その他の構成要素が含まれる可能性もある。
【００５７】
図５は、ユーザによって定義されたマッピング１１４の論理を具現化するためにマッピングモジュール１０６によって生じさせられ、それから、出力データを生じさせるために実行モジュール１１２によって実行されるデータフローグラフ５００の例を示す。データフローグラフ５００は、InputAccounts.datと呼ばれる入力階層の実体のインスタンスを表すレコードを記憶する入力データセットを表す入力構成要素５０２Ａ、及びOutputAccounts.datと呼ばれる出力階層の実体のインスタンスを表すレコードを記憶する出力データセットを表す出力構成要素５０２Ｂを含む。
【００５８】
マッピングモジュール１０６は、Ｓｐｌｉｔ構成要素５０４を使用して入力構成要素５０２Ａから入力レコードを取り出し、Ｃｏｍｂｉｎｅ構成要素５０６を使用して出力構成要素５０２Ｂに出力レコードを記憶する。この例において、Ｓｐｌｉｔ構成要素５０４は、上で示されたＤＭＬ入力レコードフォーマットに従ってフォーマットされたフィールドの値の入れ子にされたベクトルとして任意のより低いレベルの実体の埋め込まれたレコードを含む最高レベルのレコードのフローをそのＳｐｌｉｔ構成要素５０４の入力ポートにおいて受け取る。代替的に、例えば、実体がデータベース内のテーブルに対応し、それらの実体のインスタンスがそれらのテーブルの行に対応する場合の、データベースを読むか又は書く構成要素などのその他の種類の構成要素が、入力レコードを受け取り、出力レコードを記憶するために使用され得る。
【００５９】
Ｓｐｌｉｔ構成要素５０４の各出力ポートは、マッピング１１４のうちの１つのソースとして使用される入力実体のインスタンスを表すレコードのフローを提供する。より低いレベルの実体のインスタンスを表すレコードがそのレコードの親レコードから取り除かれ、より高いレベルの実体のインスタンスを表すレコードがいかなる子レコードも含まないように、その他のレコード内に入れ子にされたすべてのレコードが抽出される。マッピングモジュール１０６は、特定のマッピング１１４がそのままのマッピングであるか又は集約されたマッピングであるかを含め、定義されたそれらの特定のマッピング１１４の構造に基づいてＳｐｌｉｔ構成要素５０４のために必要とされる出力ポートの数を決定する。マッピングモジュール１０６は、Ｃｏｍｂｉｎｅ構成要素５０６のために必要とされる入力ポートの数を決定する（この例においては４つ）。
【００６０】
マッピングモジュール１０６は、（出力階層の実体又は任意の一時的実体を含む）少なくとも１つのマッピングのターゲットである実体に関してユーザが定義したキー属性に基づいて、マッピングがそのままのマッピングであるか又は集約されたマッピングであるかを判定する。（ターゲットの実体の主キーを一緒に構成する）そのターゲットの実体の各キー属性に関して、マッピングモジュール１０６は、そのマッピングのソースである実体（入力階層の実体又は一時的実体）の対応する入力属性を決定する。これらの「マッピングされた入力属性」は、（例えば、単純マッピングにおいて）ターゲットの実体のキー属性に直接マッピングされる可能性があり、又は（例えば、複雑マッピングにおいて）ターゲットの実体のキー属性を決定するための式で使用される可能性がある。
【００６１】
これらのマッピングされた入力属性の特徴に依存して、マッピングモジュール１０６は、マッピングを「そのままのマッピング」又は「集約されたマッピング」として分類する。マッピングモジュール１０６は、マッピングされた入力属性を（ソースの実体の主キーを一緒に構成する）ソースの実体の１又は２以上のキー属性と比較して、マッピングされた入力属性がソースの実体の主キーを包含するかどうかを判定する。マッピングされた入力属性は、ソースの実体のキー属性のすべてを含む場合、主キーを包含する。マッピングされた入力属性は、ソースの実体のキー属性の一部のみを含む場合、主キーを包含しない。マッピングされた入力属性が主キーを包含する場合、マッピングは、（特定のターゲットの主キーを有する）ターゲットの実体の各インスタンスに関して（特定のソースの主キーを有する）ソースの実体の一意のインスタンスを見つけることを保証され、マッピングは、「そのままのマッピング」として分類される。マッピングされた入力属性が主キーを包含しない場合、マッピングは、ターゲットの実体の各インスタンスに関してソースの実体の一意のインスタンスを発見することを保証されず、マッピングは、「集約されたマッピング」として分類される。
【００６２】
マッピングされた入力属性が主キーを包含するか否かを判定するとき、ターゲットの実体のキー属性とソースの実体のキー属性との間にどの種類のマッピングが存在するかを判定することも必要である可能性がある。マッピングが一対一のマッピングでない（例えば、その代わりに、多対一のマッピングである）場合、１つの主キーの値が別の主キーの値と同じ値にマッピングされ、したがって、ターゲットの実体の各インスタンスに関してソースの実体の一意のインスタンスの保証がないことがあり得る。マッピングは、ユーザによって与えられた式によって定義された関数f(x)が数学的な意味で一対一である（つまり、「!=」が等しくないことを意味する場合、x != yがf(x) != f(y)であることを示唆する）場合、一対一のマッピングである。マッピングが一対一のマッピングである場合、１又は２以上のマッピングされた入力属性は、出力実体のそれぞれのキー属性との一対一の対応を有する。
【００６３】
集約されたマッピングに関して、ソースの実体の複数のインスタンスがターゲットの実体の特定のインスタンスの計算に情報（例えば、ソースの実体のそれらの複数のインスタンスの属性値）を提供することを潜在的に許容するために集約操作が実行される。ターゲットの実体の主キーに合致するソースの実体の単一のインスタンスのみが存在することが判明する場合、集約操作は、単純に、マッピングで使用するためにその１つのインスタンスから情報を取得する。場合によっては、たとえターゲットの実体の主キーに合致するソースの実体の複数のインスタンスが存在するとしても、集約操作は、単純に、マッピングで使用するためにそれらのインスタンスのうちの１つだけを選択する可能性がある。
【００６４】
この例において、マッピングモジュール１０６は、３つのそのままのマッピング及び２つの集約されたマッピングが存在すると判定し、それらのマッピングを実行するために必要とされるデータフローグラフ５００の構成要素を生じさせる。１つの出力ポートが、ソーストゥターゲットマッピングセクション３０４の行１のそのままのマッピングのためにＭａｐ構成要素５１２Ａに最高レベルの「in」実体のインスタンスを表すレコードを提供する。その他の出力ポートは、ソーストゥターゲットマッピングセクション３０４の行４及び５のそのままのマッピングのためにＭａｐ−３構成要素５１２Ｂ及びＭａｐ−４構成要素５１２Ｃにin.checking_accounts及びin.savings_accounts実体のインスタンスを表すレコードをそれぞれ提供する。これらのそのままのマッピングのための構成要素（Ｍａｐ構成要素５１２Ａ、Ｍａｐ−３構成要素５１２Ｂ、及びＭａｐ−４構成要素５１２Ｃ）は、ソースの実体のインスタンスからマッピングされた属性値を読み、Ｃｏｍｂｉｎｅ構成要素５０６のポートで受け取られるターゲットの実体の対応するインスタンスにそれらのマッピングされた属性値を書き込む操作を実行する。これらの構成要素が、対応するマッピングのために定義された任意のフィルタを適用してもよいように構成される可能性があり、又は別個の構成要素が、そのようなフィルタリングを適用するためにデータフローグラフ５００に追加される可能性がある。これら３つのマッピングがそのままのマッピングである理由は、出力実体の主キーを形成するキー属性が入力実体の完全な主キーを一緒に形成するそれぞれのキー属性にマッピングされるからである。例えば、行４のマッピングに関して、out.checking_accounts実体の主キーは、キー属性in.checking_accounts.acct_id及びin.master_account_numberからなるin.checking_accounts実体の完全な主キーにマッピングされるキー属性out.checking_accounts.acct_id及びout.master_account_numberからなる。
【００６５】
Ｓｐｌｉｔ構成要素５０４のその他の出力ポートは、ソーストゥターゲットマッピングセクション３０４の行２及び３の２つの集約されたマッピングに関する式で参照される使用される実体のインスタンスを表すレコードを提供する。これら２つのマッピングが集約されたマッピングである理由は、出力実体の主キーを形成するキー属性が入力実体のキー属性のすべては含まないそれぞれの属性にマッピングされるからである。例えば、行２のマッピングに関して、out.account_holders実体の主キーは、in.checking_accounts実体の主キーのキー属性のうちの１つ（すなわち、in.checking_accounts.acct_id属性）を含まないキー属性out.account_holders.SSN及びout.master_account_numberからなる。データフローグラフ５００が特定の集約されたマッピングのための集約操作をどのようにして実行すべきかを決定するために、マッピングモジュール１０６は、初めに、ユーザインターフェース３２０においてユーザによって与えられた式が集約されたマッピングで使用されるソース及びターゲットの実体の属性に関してそのような集約操作を定義するかどうかを判定する。そうである場合、マッピングモジュール１０６は、マッピングされた入力属性に関して同じ値を共有する入力実体の複数のインスタンスを集約するための集約操作（「ロールアップ（rollup）」操作とも呼ばれる）を実行するロールアップ構成要素をデータフローグラフ５００に追加する。ユーザによって与えられた式がそのような集約操作を定義する集約されたマッピングで使用される属性に関する式を提供しない場合、マッピングモジュールは、データフローグラフ５００によって実行されるべき既定の集約操作を適用する。例えば、「重複排除」操作が、ロールアップ構成要素によって実施されるいずれかの集約操作の一部として含まれる可能性があり、複数のインスタンスのうちの最後のインスタンスからの属性値が、使用される。それぞれの集約されたマッピングに関するそのようなロールアップ構成要素のこの挿入は、ソース及びターゲットの実体の属性をマッピングするための明示的な集約操作をユーザが与えるか否かにかかわらず、特定の主キーを有するターゲットの実体の単一の一意のインスタンスが存在することを保証する。
【００６６】
Ｓｐｌｉｔ構成要素５０４の出力ポートは、ソーストゥターゲットマッピングセクション３０４の行２の集約されたマッピングのためにＲｏｌｌｕｐ構成要素５１４Ａ及びＲｏｌｌｕｐ−１構成要素５１４Ｂにin.checking_accounts及びin.savings_accounts実体のインスタンスを表すレコードをそれぞれ提供する。このマッピングの属性に関する式が２つの総和の形態の集約操作を含む（つまり、式/規則列３２４の行４の）１つの式を含むので、マッピングモジュール１０６は、ターゲットの実体の主キーを形成するキー属性に対するロールアップを実行する総和のそれぞれのためのロールアップ構成要素を追加する。この例において、ターゲットの実体の主キーは、属性out.account_holders.SSN及びout.master_account_numberからなる。Ｒｏｌｌｕｐ構成要素５１４Ａは、これらのキー属性に基づいて被加数の条件を満たすすべてのインスタンスに関して被加数の引数in.checking_accounts.balanceを足すことによって第１の総和を実行する。この例において、出力実体out.account_holdersは、その出力実体の主キーにSSNを含むが、SSNは、入力実体in.checking_accountsの主キーの一部でなく、これは、SSNをマッチ属性として使用する定義された総和が同じSSN値を有する複数の入力実体のインスタンスを見つける可能性があることを意味する。Ｒｏｌｌｕｐ−１構成要素５１４Ｂは、これらのキー属性に基づいて被加数の条件を満たすすべてのインスタンスに関して被加数の引数in.savings_accounts.balanceを足すことによって第２の総和を実行する。
【００６７】
マッピングモジュール１０６は、集約操作を完了するためのその他の構成要素を追加する。Ｊｏｉｎ構成要素５１６Ａは、キー属性値が同じである場合にロールアップ構成要素によって実行される２つの総和の結果を足し、一緒にされた出力レコードをそのＪｏｉｎ構成要素５１６Ａの出力ポートでＭａｐ−１構成要素５１２Ｄに提供する。Ｍａｐ−１構成要素５１２Ｄは、一緒にされたレコードの２つの値の合計を実行し、その最終結果に関連するキー属性の特定の値と一緒に、その最終結果をout.account_holders.balance属性の値として、そのＭａｐ−１構成要素５１２Ｄの出力ポートでレコードを提供する。
【００６８】
同様に、その他の出力ポートは、ソーストゥターゲットマッピングセクション３０４の行３の集約されたマッピングのためにＲｏｌｌｕｐ−３構成要素５１４Ｃ及びＲｏｌｌｕｐ−４構成要素５１４Ｄにin.savings_accounts及びin.checking_accounts実体のインスタンスを表すレコードをそれぞれ提供する。また、このマッピングの属性に関する式は、２つの総和の形態の集約操作を含む１つの式を含む。したがって、上で説明されたのと同様の操作を実行する対応するロールアップ構成要素（Ｒｏｌｌｕｐ−３構成要素５１４Ｃ及びＲｏｌｌｕｐ−４構成要素５１４Ｄ）並びに結合及びマップ構成要素（Ｊｏｉｎ−２構成要素５１６Ｂ及びＭａｐ−２構成要素５１２Ｅ）が存在する。
【００６９】
マッピングモジュール１０６は、同じターゲットの実体（out.account_holders）のための２つの連続するマッピングの結果を集めるためにデータフローグラフ５００に収集構成要素５１８を挿入し、この収集構成要素５１８は、（例えば、一方のフローからのすべてのレコードの後に他方のフローからのレコードを付加することによって、又はフローの間で交互にレコードを合併することによって）受け取られたレコードの２つのフローからレコードの単一のフローを形成する。マッピングモジュール１０６は、２つのマッピングによって生じさせられたすべての重複するレコードを取り除くための重複排除構成要素４２０も挿入する。例えば、行２からのマッピングは、同じSSNを有する対応する普通預金口座のない当座預金口座を見つけた可能性があり、行３からのマッピングは、同じSSNを有する対応する当座預金口座のない普通預金口座を見つけた可能性があるが、両方のマッピングが、同じSSNを有する当座預金口座及び普通預金口座のペアを見つけた可能性がある。
【００７０】
一部のマッピングに関して、マッピングモジュール１０６は、生じさせられるデータフローグラフにさらなる構成要素を追加する必要がある可能性がある。例えば、入力階層の入力レベル及び出力階層の出力レベルに基づいて、グラフは、指定されたマッピング規則によって、出力レコードの正しいフィールドに、入力レコードのフローから特定の情報を得るためにさまざまな操作を実行する必要がある可能性がある。集約されたマッピングに関して、ロールアップ構成要素が、関連する集約操作を実行するために必要とされる可能性があるが、さらなる集約操作を実行するために必要とされるその他のロールアップ構成要素も、存在する可能性がある。出力フィールドの情報が２つの異なる入力フィールドからの情報から導出される場合、結合構成要素が必要とされる可能性がある。例えば、ソート構成要素を含むべきかどうかを判定するために、マッピングモジュール１０６は、（ソート構成要素によって実行される）ソート操作が必要とされるかどうか、及び（ソート構成要素によって実行される）ソート操作がどこで必要とされるかを判定するために、ソートキーがどのようにマッピングされるかを比較する。一部の実施形態において、マッピングモジュール１０６は、冗長性を減らすために一部を削除する、又はより少ない若しくはより効率的な構成要素によって一部を置き換えるなど、計算の特定の部分を最適化するために生じさせられるデータフローグラフを変更する。データフローグラフ５００の構成要素を生じさせ、それらの構成要素のポートを適切に接続することに加えて、マッピングモジュール１０６は、マッピングされた出力データを生じさせるため又はユーザに追跡情報を提供するために必要とされる可能性があるその他のデータ構造を生じさせ得る。例えば、マッピングモジュールは、出力実体の特定のインスタンス（すなわち、出力レコード）が生じさせられた入力実体の対応するインスタンス（すなわち、入力レコード）と、それらのレコード及び任意の中間レコードに対して実行された操作とを示すそれらの出力実体の特定のインスタンスの系統（lineage）の表現を生じさせるために使用されるべき系統情報を記憶するように構成される可能性がある。
【００７１】
これらのマッピング技術は、データフローグラフの一部がメタプログラミングされる（つまり、いくつかのユーザによって定義された制約に基づいて自動的に生じさせられる）状況で使用される可能性がある。１つのそのような例において、データフローグラフは、入力データを、ユーザによって定義された変換に従って、ユーザによって定義された入力フォーマットからユーザによって定義された出力フォーマットに変換するために構築される。データフローグラフは、例えば、参照により本明細書に組み込まれる、「MANAGING INTERFACES FOR SUB-GRAPHS」と題した、２０１４年１２月５日に出願した米国特許出願第１４／５６１，４３５号明細書に記載されているように、部分グラフインターフェース（sub-graph interface）を含むジェネリックコンテナグラフ（generic container graph）を含む可能性がある。部分グラフインターフェースは、部分グラフの特定の実施形態がランタイムの前にコンテナグラフ（container graph）に挿入されることを可能にし、少なくとも部分的にユーザ入力から導出される。ランタイムの直前に、ユーザは、入力フォーマット、出力フォーマット、及び／又は入力フォーマットのフィールドと出力フォーマットのフィールドとの間のマッピングに関連するいくつかの質問をされる可能性がある。質問へのユーザの答えに基づいて、サブグラフの実施形態が、マッピング技術を用いて自動的に生じさせられる（つまり、メタプログラミングされる）。
【００７２】
上述のマッピング手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）少なくとも１つのデータストレージシステム、（少なくとも１つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを用いて出力を与えるための）少なくとも１つのユーザインターフェースを含む（分散、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある）１又は２以上のプログラミングされた又はプログラミング可能なコンピューティングシステムで実行される１又は２以上のコンピュータプログラムの手順を含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含む可能性がある。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【００７３】
ソフトウェアは、ＣＤ−ＲＯＭ又は（例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な）その他のコンピュータ可読媒体などの有形の非一時的媒体で提供されるか、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される（例えば、伝搬信号に符号化される）可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）などの専用のハードウェアを用いて実行される可能性がある。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセス可能なストレージデバイスのコンピュータ可読ストレージ媒体（例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの１又は２以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
【００７４】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって定義される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実行される可能性がある。
【図１】
0006488317.tif 000002
【図２Ａ】
0006488317.tif 000003
【図２Ｂ】
0006488317.tif 000004
【図３Ａ】
0006488317.tif 000005
【図３Ｂ】
0006488317.tif 000006
【図３Ｃ】
0006488317.tif 000007
【図３Ｄ】
0006488317.tif 000008
【図４】
0006488317.tif 000009
【図５】
0006488317.tif 000010