本明細書には、記憶システム又はメモリに記憶された物理データセットを表す論理データを生成するためのシステムが記載される。論理データは、これらの物理データセットを、とりわけ、物理データセットの属性を含めることによって、これらの物理データセットの記憶場所のアドレスを指定するポインタを含めることによって、又は物理データセットにどのようにアクセスするかを表す他の情報を指定することによって、又はそれらの組み合わせによって表す。この例では、論理データ又は論理データの一部分は、どのデータセット(又はデータセットの属性)が使用され、アクセスされるかを指定する仕様の開発を可能にするために、開発環境においてアクセス可能である。概して、仕様は、データセット又はデータセットの属性に対して実行される動作(例えば、計算論理)を指定する。仕様は、コンピューティングシステム上で実行することができるコンピュータプログラム(例えば、実行可能なデータフローグラフ)にコンパイルされるか、さもなければそれを作成するために使用される。いくつかの例では、コンピュータプログラムは、実行可能なマシンコードを含む。論理データが、データセット又はそれらの属性に物理的にアクセスする必要なく開発環境においてアクセス可能であるため、論理データは、物理的負担を伴わずに論理アクセスを提供する。
便宜上、限定するものではないが、本明細書に記載の特徴のうちのいくつかの視覚表現は、特徴自体と称され得る。例えば、データフローグラフの視覚表現は、データフローグラフと称され得る。論理データの視覚表現は、論理データと称され得る。データベーススキーマの視覚表現は、データベーススキーマと称され得る。コンポーネントの視覚表現は、コンポーネントと称され得、以下同様である。
図1を参照すると、スキーマ2が示されており、スキーマ2は、記憶システムに記憶されたデータセット6a、6b、6c、6dの間の階層的関係などの関係4a、4b、4cを指定する。いくつかの例では、スキーマ2は、データベース管理システム(Database Management System、DBMS)によってサポートされる形式言語でデータベースの構造を記述するデータベーススキーマである。スキーマ2は、記憶システムに記憶されたデータセット6a、6b、6c、6d、及びそれらのデータセットの関係4a、4b、4cに関する情報に基づいて生成することができる。いくつかの例では、記憶されたデータセットの各々に関する情報は、他の情報の中でもとりわけ、データセットの名前、データセットのアクセスパラメータ(例えば、ファイル名、場所)、データセットのレコードフォーマット、データセットに含まれるデータタイプ、又はそれらの組み合わせを含む。いくつかの例では、データセット間の関係に関する情報は、データセット間の関係のタイプ(例えば、関係4b及び4cなどの1対1、1対多、関係4aなどの多対多)若しくはデータセット内のデータを結合するためのキー(例えば、主キー、外部キー)、又はその両方についての情報など、データセットをどのように結合することができるかに関する情報を含む。
スキーマ2を生成するために使用される情報は、ユーザ(例えば、技術ユーザ)によって指定されるか、(例えば、記憶システムに結合された1つ以上のコンピューティングシステムによって)記憶システムから自動的に取得されるか、又はその両方が可能である。例えば、いくつかの例では、記憶システムに通信可能に結合された1つ以上のコンピューティングシステムは、データ検出技術、セマンティック検出技術、又は他の機械学習技術を使用してスキーマ2を生成するために、データセット6a、6b、6c、6dに関するメタデータ又は他の情報をインポートすることができる。いくつかの例では、情報を処理すること、データセット6a、6b、6c、6dのうちの1つ以上に対する計算又はデータセット6a、6b、6c、6dのうちの1つ以上の変換などが、(例えば、技術ユーザによって)指定され、スキーマ2に含まれる。例えば、スキーマ2は、計算又は動作を実行するための命令(又は動作を実行するために、実行可能なデータフローグラフなどのコンピュータプログラムを呼び出すための命令)を含む。これらの計算又は変換は、データセット6a、6b、6c、6d内の既存のフィールドを修正し、データセット内に新しいフィールド(仮想フィールド又は計算フィールドと称されることもある)を作成し、又は完全に新しいデータセットを作成することができる。いくつかの例では、修正された又は新たに作成されたフィールド又はデータセットの値は、以下に記載されるように、ランタイム(例えば、フィールド又はデータセットを使用するコンピュータプログラムによって実行されるとき)までデータ入力されない。
図2Aは、記憶システム12及びクライアントデバイス14を有する環境10を示している。この例では、環境10はまた、論理データジェネレータ16を含んでいる。論理データジェネレータ16は、例えば、実際の物理データセット(又は物理データセットに基づく論理データセット)の属性に関する情報を含む論理データを生成するように構成されている。この例では、論理データは、記憶システム12からのデータセットへの物理アクセスを必要とせずに、例えば、記憶システム12に記憶され得る物理データセットへの論理アクセスを提供する。この例では、論理アクセスとは、それ自体が記憶システム12に記憶される物理データセットの属性のリスト又は他の仕様を指す。別の例では、論理データは、論理データで表される物理データセットが、記憶システム12からアクセスされ得るアドレス又は場所を識別するポインタ若しくは他の情報、又は物理データセットにアクセスするための命令若しくはパラメータ、又はその両方を含み得る。
この例では、記憶システム12は、論理データジェネレータ16と通信するように構成され、論理データジェネレータに、他の情報の中でもとりわけ、物理データセットの位置を指定する情報、物理データセットの属性を指定する情報、物理データセットの間の関係を指定する情報、又は物理データセット自体、又はそれらの組み合わせなどの、論理データの生成に使用する情報を提供する。クライアントデバイス14はまた、論理データジェネレータ16と通信するように構成され、それにより、クライアントデバイス14は、論理データジェネレータ16に、他の情報の中でもとりわけ、論理データからどの物理的データセット又は物理データセットのどの属性を含む(又は省略する)のかを指定する情報、論理データのルートノードを指定する情報、又はそれらの組み合わせなど、論理データを生成するための情報を送信し得る。
環境10はまた、開発環境18を含み、開発環境18は、ユーザ(例えば、開発環境18に通信可能に結合され得るクライアントデバイス14のユーザ)が、データフローグラフなどのコンピュータプログラムを生成する際に、論理データにおいて表されるどのデータセット(又はデータセットの属性)にユーザがアクセス又は使用したいかを指定するためのグラフィカルユーザインターフェース又は他のユーザインターフェースをユーザに提供する。開発環境18は、グラフジェネレータ22と結合され、グラフジェネレータ22は、開発環境18から受信した情報からデータフローグラフを生成するように構成されている。開発環境18から受信した情報は、この情報がコンピュータプログラム(例えば、実行可能なデータフローグラフ)の機能を指定し、実行又はアプリケーション自体への仕様のコンパイル中にどのデータセット(又は属性)がアクセスされるべきかを指定するため、仕様と称されることが多い。
環境10はまた、コンパイラ24を含み、コンパイラ24は、仕様及び/又はデータフローグラフを、データ処理システム26によって(例えば、マシンコードで)実行可能なコンピュータプログラムにコンパイルするように構成されている。この例では、開発環境18は、仕様をデータフローグラフを生成するグラフジェネレータ22に送信し、グラフジェネレータ22がデータフローグラフを生成する。次に、グラフジェネレータ22は、データフローグラフをコンパイラ24に送信し、コンパイラ24は、データフローグラフをコンピュータプログラム(例えば、実行可能なデータフローグラフ)にコンパイルする。コンパイラ24は、コンピュータプログラムを実行及び/又は記憶するために、コンピュータプログラムをデータ処理システム26に送信する。この例では、コンピュータプログラムは、記憶システム12から、属性が論理データに含まれた、又は仕様において指定された、又はその両方であった複数のデータセットのうちの少なくとも1つにアクセスするように構成されている。
図2Bを参照すると、環境20は、環境10の更なる詳細を示している。この例では、記憶システム12は、スキーマ21を論理データジェネレータ16に送信する。データベーススキーマ21は、階層関係など、記憶システム12に記憶されたデータセット21a、21b、21c、21dの間の関係を指定する。例では、スキーマ21は、データベーススキーマである。スキーマ21は、図1を参照して記載されたスキーマ2と同じ又は類似であってもよい。
クライアントデバイス14はまた、選択データ23を論理データジェネレータ16に送信する。選択データ23は、ルートノード、例えば、論理データを定義する際に親ノードとなるデータセットを指定する。この例では、ルートノードは、論理データ内のルートノードである初期データセットを定義するパースペクティブである。この例では、パースペクティブは情報の抽出であり、スキーマ内に選択された開始点を指定する。パースペクティブは、スキーマ内に選択された開始点を含み、対象のルート論理エンティティを表す。選択データ23を生成するために、クライアントデバイス14は、グラフィカルユーザインターフェース27を表示する。グラフィカルユーザインターフェース27は、データセット部分28と、データセット21dが論理データのルートノードとして選択されることを表すアイコン29aで更新される選択されたパースペクティブ部分29とを含む。データセット部分28は、それぞれ、データセット21a、21b、21c、21dの視覚表現28a、28b、28c、28dを表示する。選択されたパースペクティブ部分29は、ボタンであり得る選択可能な部分29bを含む。選択可能な部分29bが選択されると、ユーザは、視覚表現28a、28b、28c、28dのうちの1つを論理データのルートノードとして選択することができる。この例では、ユーザは視覚表現28dを選択して、データセット21dが論理データのルートノードであることを指定する。視覚表現28dが選択され、選択可能な部分292bと対話されると、選択されたパースペクティブ部分29は、データセット21dが論理データのルートノードであることを指定するアイコン28aを表示するように更新される。選択データ23は、ルートノードがデータセット21dであることを指定する。
対象のルート論理エンティティが論理データに対して指定されると、論理データは、対象のそのルート論理エンティティに関連する他のデータセットの情報を含むように拡張される。本明細書に記載されるように、その、他の情報は、属性、フィールド、ソース、命令、パラメータ又は対象のルート論理エンティティ及び関連データセットへのポインタなどを含み得る。この例では、論理データは、対象のルート論理エンティティのフィールド及び対象のルート論理エンティティに関連する他のデータセットのフィールドのエントリを有するワイドレコードに具体化することができる。概して、ワイドレコードは、同じ構造内に保持される関連データのグループを含む。論理データはまた、対象の論理エンティティ及び他の関連データセットのメモリ内の物理的場所へのポインタなど、他の属性のワイドレコードに具体化することができる。
論理データジェネレータ16は、スキーマ21及び選択データ23を使用して、論理データ25を生成する。例えば、論理データジェネレータ16は、データセット21dがルートノードであることを特定する選択データ23を受信し、データセット21dの属性又は利用可能なフィールドに関する情報を論理データ25に含める。いくつかの例では、情報は、データセット21dの利用可能な属性又はフィールドのベクトルを含む。論理データジェネレータ16は、スキーマ21を使用して、データセット21dに関連する他のデータセットを識別する。例えば、この例では、論理データジェネレータ16は、データセット21a、21b、21cがデータセット21dに関連していると判定し、したがって、データセット21a、21b、及び21cの属性又は利用可能なフィールドに関する情報を論理データ25に含める。この例では、論理データ25は、データセット21a、21b、及び21cの各々の属性又は利用可能なフィールドを指定するベクトルを含む。属性又は利用可能なフィールドのこれらのベクトルは、フィールド自体内のフィールド又はデータに実際にアクセスすることなく、属性又はフィールド名を指定し、属性又はフィールド名にどのようにアクセスするかを命令し、さもなければ属性又はフィールド名を表す。このため、論理データ25は、記憶システム12からこれらのデータセットに実際にアクセスする物理的負担を伴わずに、データセット21a、21b、21c、及び21dへの論理アクセスを提供する。
図2Cを参照すると、環境30は、論理データ25を受信する開発環境18を示している。例えば、開発環境18は、論理データジェネレータ16から、又は記憶装置(例えば、記憶システム12)から論理データ25を受信する。この例では、ビジネスルールエディタインターフェース32が、ビジネスルール及び他の論理ルールを定義するために開発環境18によって生成される。概して、エディタインターフェース32は、式を含むセルをグラフィカルに識別し得る。これは、ユーザが、それ自体で真又は偽に評価されることになる式と、列変数に対して比較される値を返す式との間の差を理解するのに役立つことになる。ユーザがタイプ入力しているとき、ユーザは、例えば、式の始めにアスタリスクをタイプ入力することによって、特定のセルが式セルであることを示すことができる。この例では、エディタインターフェース32は、入力部分33及びルール定義部分34を含む。入力部分33は、それらの属性(例えば、フィールド)及び論理データ25において表されるデータセット、並びに他のデータソース(論理データに対応してもしていなくてもよい)の視覚表現を提供する。例えば、入力部分33は、データセット21a(図2Bに示される)を表す視覚表現35を含む。入力部分33はまた、データセット21aの「フィールドA」を表す視覚表現35aを含む。この例では、視覚表現35aは、視覚表現35からインデントされることによって、データセット21a内のフィールドであるように視覚的に描かれている。入力部分33はまた、それぞれ、データセット21b及びデータセット21b内の「フィールドB」を表す視覚表現36及び36aを含む。入力部分33はまた、それぞれ、データセット21c及びデータセット21c内の「フィールドC」を表す視覚表現37及び37aを含む。入力部分33はまた、それぞれ、データセット21d及びデータセット21d内の「フィールドD」を表す視覚表現38及び38aを含む。この例では、入力部分33内の視覚表現は、ビジネスルールを定義する際にユーザに利用可能なデータセット及びフィールドを表す。入力部分33に表される利用可能なデータセット及びフィールドは、論理データ25から識別され、それによって、物理的メモリからデータセット(又はフィールド)にアクセスする必要なくデータセット及びフィールドへのアクセスをユーザに提供する。
ルール定義部分34は、一連のルールケースを含む。この例では、ルール定義部分34は、スプレッドシートフォーマットを含む。スプレッドシート内のトリガ列は、利用可能なデータ値に対応し、行は、ルールケース、例えば、利用可能なデータ値を関連付ける基準のセットに対応する。ルールケースは、所与のレコードのデータ値が、ルールケースが基準を有する各トリガ列のトリガ基準を満たす場合、そのレコードに適用される。ルールケースが適用される場合、出力列に基づいて出力が生成される。その入力関係の全てが満たされているルールケースは、「トリガされた」と称され得る。出力列は、潜在的な出力変数に対応し、該当する行の対応するセル内の値は、もしあれば、その変数の出力を決定する。セルは、変数に割り当てられた値を含むことができ、又は以下で考察されるように、出力値を生成するために評価されなければならない式を含むことができる。図2Cには1つのみが示されているが、2つ以上の出力列があってもよい。
ルール定義部分34内のセルの入力を指定することによってルールの定義が完了すると、開発環境18は、ルールケースを指定し、ルールを実装するためにどのフィールドがアクセスする必要があるかを指定するルール仕様39aを生成する。しかしながら、ルールを定義するこの段階では、論理データ25は、ユーザに、物理アクセスなしにそれらのフィールドへの論理アクセスを提供する。例えば、ユーザは、入力部分33内の記憶システム12に記憶された様々なデータセットから利用可能なフィールドを閲覧することができることによって、論理アクセスが提供された。開発環境18は、ルール仕様39aをグラフジェネレータ22に送信する。開発環境18はまた、論理データ25をグラフジェネレータ22に送信する。
図2Dを参照すると、環境40は、開発環境18の別の例を示している。この例では、開発環境18は、コンポーネント部分42、入力部分43、及びキャンバス区画44を有するグラフィカルユーザインターフェース41を描画している。コンポーネント部分42は、計算論理を定義するために利用可能な様々な動作を表す視覚表現42a~42fを含む。入力部分43は、論理データ25において表されるデータセット及び属性(例えば、フィールド)の視覚表現45、45a、46、46a、47、47a、48b、48aを表示している。入力部分43はまた、他のデータソース(例えば、論理データ25以外のデータソース)において表されるデータセット及びフィールドの視覚表現49及び49aを表示している。すなわち、入力部分43内の視覚表現は、計算論理を定義するために利用可能なデータセット及びフィールドを表す。
キャンバス部分44は、データフローグラフの形態で計算論理を定義するために使用され、視覚化44aとして視覚的に描かれる(以下、便宜上、限定することなく、「データフローグラフ44a」と称される)。視覚化44aによって表されるデータフローグラフは、ノードを有するデータ構造を含む。ノードの各々は、少なくとも1つの動作プレースホルダフィールド及び少なくとも1つのデータプレースホルダフィールドを含み、これらは、キャンバス部分44においてユーザによって指定された動作及びデータ(例えば、論理データ、「データセットV」などの他のデータソース)が入力される。この例では、データフローグラフ44aは、視覚表現42a~42fのうちの1つ以上を、コンポーネント部分42からキャンバス部分44上にドラッグ及びドロップすることによって生成される。視覚表現42a~42fの各々は、データ構造によって又はデータ構造に対して実行される動作を表す。視覚表現がキャンバス部分44上に配置されると、それらは、キャンバス部分44上のアイコンになる。開発環境18は、データフローグラフ44aによって視覚的に表される計算論理を使用して、仕様39bを生成する。仕様39bは、キャンバス部分44において視覚的に描かれた計算論理を指定する。開発環境18は、仕様39b及び論理データ25をグラフジェネレータ22に送信する。グラフジェネレータ22は、仕様39b及び論理データ25を使用して、以下に記載のように、データフローグラフ44aの各ノードの動作フィールド及びデータプレースホルダフィールドにデータ入力することができる。
図2Eを参照すると、環境50は、環境10の更なる詳細を示している。この例では、グラフジェネレータ22は、開発環境18(例えば、仕様及び論理データ)から受信した情報からデータフローグラフ52を生成する。コンパイラ24は、データフローグラフ52を受信し、それを実行可能プログラム54(例えば、実行可能なデータフローグラフなどのコンピュータプログラム)にコンパイルする。コンパイラ24は、実行可能プログラム54を、コンピュータプログラムの実行及び/又は記憶のためにデータ処理システム26に送信する。この例では、コンピュータプログラムは、記憶システム12から、属性が論理データに含まれた、又は仕様において指定された、又はその両方であった複数のデータセットのうちの少なくとも1つにアクセスするように構成されている。
図3を参照すると、スイムレーン図300は、論理データを生成し、その論理データを使用して、最適化されたデータフローグラフを生成するためのプロセスを例示している。動作中、記憶システム12は、スキーマを論理データジェネレータ16に送信する(302)。論理データジェネレータ16は、スキーマを受信する(304)。論理データジェネレータ16は、スキーマを表すデータを提示するためのグラフィカルユーザインターフェース(Graphical User Interface、GUI)データを生成する(306)。論理データジェネレータ16は、GUIデータをクライアントデバイス14に送信する(308)。クライアントデバイス14は、ユーザに表示されるようにGUIデータを描画する(310)。クライアントデバイス14は、(例えば、クライアントデバイス上に描画されたGUIと対話するユーザから)ルートノード選択データを受信する(312)。ルートノード選択データは、論理データのルートノードに選択されるデータセットを指定するデータを含む。クライアントデバイス14は、ルートノード選択データを論理データジェネレート16に送信する(314)。論理データジェネレータ16は、ルートノード選択データを受信する(316)。次いで、論理データジェネレータ16は、受信したルートノード選択データ及びスキーマを使用して論理データを生成する(318)。論理データジェネレータ16は、論理データを開発環境18及びグラフジェネレータ22に送信する(320)。いくつかの例では、論理データジェネレータ16は、論理データを開発環境18に送信し、次いで、開発環境18が、論理データをグラフジェネレート22に渡す。
開発環境18及びグラフジェネレータ22の各々は、論理データを受信する(322、324)。開発環境18は、論理データのフィールド又は他の属性を表示するためのGUIデータを生成する(326)。開発環境18は、GUIデータをクライアントデバイス14に送信する(328)。GUIデータは、フィールド属性などの属性、又は論理データに含まれる他の属性を表し、それにより、物理的負担を伴わずに論理アクセスを提供する。クライアントデバイス14は、受信されたGUIデータを描画し(330)、選択されたフィールド、データセット、又は他の属性を指定する選択データを受信する(332)。明確にするために、本明細書に記載の選択されたフィールド又はデータセットは、論理データ自体から選択された情報を指す。いくつかの例では、選択データはまた、選択されたフィールドに対して実行される動作又は論理を指定する。クライアントデバイス14は、選択されたファイルを指定する選択データを開発環境18に送信する(334)。開発環境18は、選択されたフィールドを指定する選択データを受信し(336)、選択されたフィールド(及び選択されたフィールドに対して実行される動作)で仕様を生成する(338)。開発環境18は、仕様をグラフジェネレータ22に送信する(340)。
グラフジェネレータ22は、仕様(102)を受信する(342)。グラフジェネレータ22は、仕様及び論理データを使用してデータフローグラフを生成する(344)。概して、データフローグラフ(又は永続的コンピュータプログラム)は、以下のような仕様から生成される。仕様は、構造化データ項目(例えば、データレコード)内の1つ以上のフィールドの1つ以上の値を処理するためにコンピュータプログラムによって実装される複数のモジュールを指定する。これらの複数のモジュールは、ルール、命令、データフローグラフのコンポーネントなどを含み得る。本明細書に記載のシステムは、仕様を、複数のモジュールを実装するコンピュータプログラムに変換し、変換することは、複数のモジュールのうちの1つ以上の第1のモジュールの各々について、第1のモジュールの出力に少なくとも部分的に基づく入力を各々が受信する複数のモジュールのうちの1つ以上の第2のモジュールを識別することと、各々が(i)第1のモジュールにアクセス可能であり、(ii)第1のモジュールの出力に少なくとも部分的に基づいて1つ以上の第2のモジュールのうちの少なくとも1つへの入力として指定される構造化データ項目の1つ以上のフィールドの1つ以上の値のみを第1のモジュールが出力するように、第1のモジュールの出力データフォーマットをフォーマットすることと、「Transforming a Specification into a Persistent Computer Program」と題された米国特許出願公開第2019/0130048(A1)号に記載されているように、1つ以上の第1のモジュールの各々についてフォーマットされた出力データフォーマットを指定する保存されたコンピュータプログラムを用いて、コンピュータプログラムを永続メモリに保存することとを含み、その全容は参照により本明細書に組み込まれる。システムはまた、各モジュールのコンテンツがコンピュータプログラムに含まれ、かつ/又はコンピュータプログラムの適切なフォーマットにある命令に変換されることを指定する様々なルールを含む。この例では、グラフジェネレータ22は、最初に、論理データにおいて表されるデータソースでデータフローグラフを生成する。グラフジェネレータ22はまた、データフローグラフがデータシンクを必要とするため、データフローグラフにデータシンクを追加する。次いで、グラフジェネレータ22は、データフローグラフに、ソートコンポーネントなどのデータフローグラフの計算効率を増加させるためにグラフジェネレータ22が自動的に追加するように構成された様々なコンポーネントを追加する。グラフジェネレータ22はまた、様々なデータソースからのデータを適切に結合するために、結合コンポーネントを追加するように構成されている。データソースにアクセス又は結合するための命令、パラメータ、又は他の情報を論理データに含めることができる。最後に、グラフジェネレータ22は、仕様において指定された計算論理を含む変換コンポーネントを追加する。変換コンポーネント自体は、仕様が上記のようにデータフローグラフに変換されるとき、別のデータフローグラフを表す様々なコンポーネント又はサブコンポーネントを含み得る。
例では、グラフジェネレータ22は、最適化されたデータフローグラフを生成するためにデータフローグラフを最適化する(346)。概して、グラフジェネレータ22は、仕様を分析して、どのフィールド及び関連付けられたデータソース、仕様がアクセスされているかを識別しているかを識別することによって、データフローグラフを最適化するオプティマイザを実行する。次に、オプティマイザは、フィールドが仕様において参照されていないデータソースを識別し、オプティマイザは、データフローグラフから、フィールドが仕様において参照されていないデータソースを除去する。いくつかの例では、オプティマイザは、仕様において参照されるデータセット及びフィールドのみが取り出されるように、選択ステートメント(例えば、データベースの言語で発行されたデータベース選択ステートメント)を最小化する。いくつかの例では、オプティマイザは、「Systems and Methods for Dataflow Graph Optimization」と題された米国特許出願第2019/0370407(A1)号に記載されるように、一連の最適化ルールを適用することによってこれを行い、その全容は参照により本明細書に組み込まれる。そうすることで、オプティマイザは、所望の出力を作成するために論理データが論理アクセスを提供するデータのサブセットのみを最小限にロードし結合するデータフローグラフを作成することができる。オプティマイザはまた、計算効率を改善するために、データフローグラフ内のコンポーネントの順序を再配置するなど、他の最適化を実行し得る。例えば、フィルタコンポーネントが結合コンポーネントの前にくることが計算上より効率的であり得、その結果、結合コンポーネントは最終的にフィルタ除去されるデータを結合しない。こうして、オプティマイザは、フィルタコンポーネントを結合コンポーネントの前にくるように移動させ得る。
図4Aを参照すると、環境60は、論理データ23を使用してデータセット21dを論理データのルートノードとして識別する論理データジェネレータ16を例示している。これは、図4Aにおいて星印及び輪郭付けされているデータセット21dによって示されている。論理データジェネレータ16はまた、データセット21dに関連する他のデータセットを識別するためにスキーマ21を使用する。他の関連データセットは、データセット21a、21b、及び21cを含む。データセット21dをルートノードとして使用して、論理データジェネレータ16は、論理データ25を生成する。前述のように、論理データ25は、データセット21dが論理データ25のパースペクティブ又はルートノードであることを指定するエントリ25aを含む。エントリ25aは、データセット21dのフィールド及び/又は属性を含む。データセット(例えば、データセット21d)の属性は、データセット内のフィールドの名前、又はデータセット内のフィールドを表す他の情報を含むことができる。他の情報の中でもデータセット21d内のフィールドの名前を含めることによって、論理データ25は、記憶装置内のデータセット21dに物理的にアクセスする必要なく、データセット21d内のフィールドへのアクセスを提供する。論理データ25はまた、それぞれ、データセット21c、21b、及び21aに対応するエントリ25b、25c、及び25dを含む。この例では、エントリ25b、25c、25dは、データセット21dとの関係に従って順序付けられる。この例では、データセット21dはルートノードであり、データセット21cは子ノードである。こうして、データセット21cを表すエントリ25bは、論理データ25においてエントリ25aの直下に順序付けられる。加えて、データセット21a、21bは、データセット21cの子である。こうして、エントリ25c、25dは、データセット21a、21b、及び21cの間の関係を表すために、エントリ25bの下に順序付けられている。エントリ25b、25c、及び25dの各々は、それぞれのデータセットの属性及び/又はフィールドを含む。前述のように、これらの属性及び/又はフィールドは、フィールドの名前又は他の識別情報であり得、これにより、論理データ25が、データセットデータセット21a、21b、21c、及び21dに記憶装置から実際にアクセスする負担を伴わずに、それらのデータセットへの論理アクセスを提供することが可能になる。論理データ25は、データセット21a、21b、21c、及び21dの属性又はフィールドを識別するために使用することができ、かつ/又は必要に応じてそれらのデータセットにアクセスするために使用することができる情報を含むため、論理アクセスを提供することができる。
図4Bを参照すると、環境70は、環境60(図4A)の変動を示し、環境70において、データセット21bが、破線及び星印の輪郭によって示されるように、ルートノードとして選択されている。データセット21bは、例えば、ユーザが図2Bの視覚表現28bを選択するときに、ルートノードとして選択される。データセット21bがルートノードとして選択されると、論理データジェネレータ16は、論理データ72を生成し、論理データ72において、図4Aに示されるように、データセット21bがルートノードとして指定され、論理データにおける他のデータセットの順序が、論理データ25におけるデータセットの順序に対して変更されている。この例では、論理データ72は、データセット21bを表すエントリ72aを含む。この例では、データセット21bは、データセット21cの子であり、エントリ72bは、データセット21cを表す論理データ72に含まれる。データセット21aは、データセット21cの子であり、エントリ72cは、データセット21aを表す論理データ72に含まれる。データセット21cは、データセット21dの子であり、エントリ72dは、データセット21dを表す論理データ72に含まれる。図4Aを参照して上述したように、エントリ72a、72b、72c、及び72dの各々は、それぞれのデータセットの各々についての属性又はフィールドに関する情報、及び/又はデータセットの特性若しくはデータセットにどのようにアクセスするかを指定する他の情報を含む。
図4Cを参照すると、環境80は、データベーススキーマ84に対する論理データ82の生成を例示している。この例では、論理データジェネレータ16は、データベーススキーマ84を受信し、また、(破線及び星印の輪郭によって示されるように)スキーマ84においてデータセット84dがルートノードであることを指定する選択データ23を受信する。この例では、スキーマ84は、データセット84a、84b、84c、84d、及び84eを含む。例では、スキーマ84は、データセット84d(例えば、データセット84dのフィールドのフィールド又は値)に対して計算を実行すること、さもなければデータセット84dを変換してデータセット84eを作り出すことを行うための命令を含む。例えば、スキーマ84は、1つ以上の動作を実行するための命令、又は入力としてデータセット84d(又はその一部)を含み、出力としてデータセット84e(又はその一部)を作り出す実行可能プログラム(例えば、データフローグラフ)を呼び出す命令を含むことができ。いくつかの例では、これらの計算、変換、又は他の動作は、スキーマ84において動作を指定する命令を含むことなどによって、スキーマ84において直接定義される。いくつかの例では、スキーマ84は、動作を実行する命令にアクセスするためのリンク、ポインタ、又は他の情報を含むことができる。いくつかの例では、これらの動作は以前に実行され、動作によって作り出されたデータセット84eは、記憶システムに記憶された物理データセットである。いくつかの例では、データセット84eは、1つ以上の計算された属性若しくは仮想属性、仮想フィールド、又は実行中にデータ入力される他の仮想要素(例えば、データセット84eがデータフローグラフなどのコンピュータプログラムで使用されるとき)など、仮想データを含む。
データセット84dがルートノードであるため、論理データジェネレータ16は、エントリ82a~82eを有する論理データ82を生成する。エントリ82aは、ルートノードであるデータセット84dを表す。エントリ82aは、データセット84dの属性を含むことができる。本明細書で前述したように、属性は、フィールドの名前、フィールドへのポインタなどを含む。データセット84c及び84eがデータセット84dの子であるため、論理データ82における次のエントリは、データセット84eを表すエントリ82b及びデータセット84cを表すエントリ82cである。エントリ82b及び82eの各々は、フィールド属性を含む。データセット84a及び84bがデータセット84cの子であるため、論理データ82における次のエントリは、データセット84bを表すエントリ82d及びデータセット84aを表すエントリ82eである。エントリ82d及び82eの各々は、フィールド属性を含む。
図5Aを参照すると、環境90は、論理データを生成し、論理データを使用して最適化されたデータフローグラフを生成する実際の実施例の概要を示している。この例では、論理ジェネレータ16は、スキーマ91を記憶システムから受信する。論理データジェネレータ16はまた、クライアントデバイス14から選択されたルートノードを示す選択データ92を受信する。このスキーマ91及び選択データ92を使用して、論理データジェネレータ16は、本明細書に記載の技術に従って論理データ94を生成する。論理データジェネレータ16は、論理データ94を開発環境18に送信する。この論理データ94を使用して、開発環境18は、記憶の基礎となる物理データセットにアクセスすることなく、属性又はフィールドなど、論理データ94に含まれる情報を、(例えば、クライアントデバイス14を使用して)開発環境18と対話することができるユーザによって閲覧可能又はアクセス可能にするグラフィカルユーザインターフェース又は他のユーザインターフェースを生成する。ユーザは、選択された属性の実行又は使用のために、開発環境18を使用して、論理データ94内の属性のうちの少なくとも1つ並びに1つ以上の動作を選択する。この情報に基づいて、開発環境18は、論理データ94の属性及び/又はフィールドのうちのどれがデータフローグラフを生成する際に含まれるべきかを指定する仕様96aを作り出す。グラフジェネレータ22は、論理データ94及び仕様96aを受信し、仕様96aにおいて指定された属性と関連付けられた(さもなければ、仕様96aで動作を実行するために必要とされる)物理データセットのみにアクセスするように最適化されたデータフローグラフ98aを作り出す。
同じ又は異なるユーザが、開発環境18を使用して、論理データ94の1つ以上の異なる属性、選択された属性に対して実行する1つ以上の異なる動作、又はその両方を選択し得る。例えば、ユーザは、データフローグラフ98aの処理において識別されたエラーに応答して、仕様96aにおいて指定された選択された属性又は動作を変更してもよく、又は異なる属性及び動作を選択して、完全に新しいデータフローグラフを作り出してもよい。この情報を使用して、開発環境は、仕様96aとは異なる仕様96bを作り出す。グラフジェネレータ22は、論理データ94及び仕様96bを受信し、仕様96bにおいて指定された属性と関連付けられた物理データセットのみにアクセスするために、データフローグラフ98aとは異なるように最適化されたデータフローグラフ98bを作り出す。このようにして、論理データ94は、そこに含まれるデータセット及び属性の全てへの論理アクセスを可能にするが、それを行う物理的負担を伴わない。これは、エンドユーザ(例えば、開発環境18のユーザ)に多大な柔軟性を提供し、エンドユーザは、論理データ94に含まれる全ての物理データを(そのようなデータに物理的にアクセスする負担を伴わずに)閲覧及び選択することができ、それらの仕様を遂行するために必要な物理データのみにアクセスするように個別対応された高度に最適化されたデータフローグラフを取得することができる。
図5Bを参照すると、環境100は、環境90の更なる詳細を示している。この例では、記憶システム12は、スキーマ91をデータセット101、102、103、104と共に記憶する。「オファー状況」データセット101は、「キー」フィールド101a及び「オファー受入」フィールド101bを含む。フィールド101aは、例えば、主キー、外部キー、又はその両方(別個のフィールドで定義され得る)を含むことができる。「分数」データセット102は、フィールド102a、102b、102c、及び102dを含む。「顧客」データセット103は、フィールド103a及び103bを含む。「リロード日」データセット104は、フィールド104a及び104bを含む。この例では、「残りの分数」フィールド102dは、例えば、上記のようにスキーマ91において定義された仮想フィールド又は計算フィールドである。例えば、スキーマ91は、1つ以上の動作又は、データセット102若しくは別のデータセット内の1つ以上の他のフィールドからフィールド102dを生成する、他の命令を指定し得る。特に、スキーマ91は、フィールド102bと102cとの間の差としてフィールド102dを定義し得る。この例では、正方形の括弧を使用して、フィールド102dが仮想フィールド又は計算フィールドであることを示している。この例では、データセット101、102、103、104は、それらのキーの値を介して互いに関連している。すなわち、データセット101、102、103、104の各々は、互いに一致するキーの値を有し、1つのデータセットからのデータを別のデータセットと結合するために使用することができる。
論理データジェネレータ16は、スキーマ91を記憶システム12から受信する。クライアントデバイス14は、(例えば、論理データジェネレータ16(図示せず)から受信されたスキーマ91にどのデータセットが含まれるかを指定するGUIデータに基づいて)グラフィカルユーザインターフェース105を表示する。GUI105は、データセット部分106及び選択されたパースペクティブ部分107を含む。データセット部分106は、それぞれ、データセット101、102、103、104の視覚表現106a、106b、106c、106dを含む。選択されたパースペクティブ部分107は、ボタン107aを含み、その選択により、閲覧者が視覚表現106a~106dのうちの1つを選択することが可能になる。この例では、ユーザは、データセット103を表す視覚表現106cを選択している。これが選択されると、選択されたパースペクティブ部分107は、論理データジェネレータ16によって生成される論理データのルートノードとしてデータセット107が選択されていることを指定しているアイコン107bで更新される。クライアントデバイス14は、データセット103がルートノードとして選択されることを指定する選択データ92を生成する。クライアントデバイス14は、選択データ92を論理データジェネレータ16に送信する。論理データジェネレータ16は、スキーマ91及び選択データ92を使用して、論理データ94を作り出す。
図5Cを参照すると、環境110は、スキーマ91及び選択データ92から論理データ94を生成する例示を示している。この例では、論理データ94は、図5Bに示されるように、データセット101、102、103、104及びそれぞれのフィールドにどのようにアクセスするかを指定する一連の命令、パラメータ、又は他の情報を含む。いくつかの例では、論理データ94は、命令、パラメータ、又はフィールド102dなどの仮想フィールド若しくは計算フィールドをどのように生成するか、さもなければどのようにアクセスするかを指定する他の情報を含む。いくつかの例では、論理データは、基礎となるデータセットの属性、フィールド、又は他の特徴を含むワイドレコードに具体化される。論理データジェネレータ16は、論理データ94を開発環境18に送信する。
図5Dを参照すると、環境120は、ビジネスルール及び他の論理ルールを定義するために開発環境18によって生成されたビジネスルールエディタインターフェース121の例を示している。概して、エディタインターフェース121は、式を含むセルをグラフィカルに識別し得る。これは、ユーザが、それ自体で真又は偽に評価されることになる式と、列変数に対して比較される値を返す式との間の差を理解するのに役立つことになる。ユーザがタイプ入力しているとき、ユーザは、例えば、式の始めにアスタリスクをタイプ入力することによって、特定のセルが式セルであることを示すことができる。この例では、エディタインターフェース121は、入力部分122及びルール定義部分123を含む。入力部分122は、論理データ94で表されるフィールド及びデータセット(下向きの矢印によって示されるような拡張ビューに示されている)、並びに他のデータソースの視覚表現(右向きの矢印によって示されるような折り畳みビューに示されている)を提供する。例えば、入力部分122は、(図5Bに示される)データセット101を表す視覚表現124を含む。入力部分122はまた、データセット101において「オファー受入」フィールド101bを表す視覚表現124aを含む。この例では、視覚表現124aは、視覚表現124からインデントされることによって、データセット101においてフィールドであるとして視覚的に描かれている。入力部分122はまた、それぞれ、データセット102及びフィールド102b、102c、及び102dを表す視覚表現125及び125a、125b、及び125cを含む。入力部分122はまた、それぞれ、データセット103及びフィールド86bを表す視覚表現126及び126aを含む。入力部分122はまた、それぞれ、データセット104及びフィールド104bを表す視覚表現127及び127aを含む。この例では、入力部分122内の視覚表現は、ビジネスルールを定義する際にユーザに利用可能なデータセット及びフィールドを表す。入力部分122において表される利用可能なデータセット及びフィールドは、論理データ94から識別され、それによって、データセット及びフィールドへのアクセスをユーザに提供するが、それらのデータセット(又はフィールド)に物理的メモリから実際にアクセスする必要はない。
ルール定義部分123は、一連のルールケースを含む。この例では、ルール定義部分106は、スプレッドシートフォーマットを含む。スプレッドシート内のトリガ列128a、128b、及び128cは、利用可能なデータ値に対応し、行129c~129gは、ルールケース、例えば、利用可能なデータ値を関連付ける基準のセットに対応している。ルールケースは、所与のレコードのデータ値が、ルールケースが基準を有する各トリガ列のトリガ基準を満たす場合、そのレコードに適用される。ルールケースが適用される場合、出力列129aに基づいて出力が生成される。その入力関係の全てが満たされているルールケースは、「トリガされた」と称され得る。出力列129aは、潜在的な出力変数に対応し、該当する行の対応するセル内の値は、その変数について、存在する場合、出力を決定する。セルは、変数に割り当てられた値を含むことができ、又は以下で考察されるように、出力値を生成するために評価されなければならない式を含むことができる。図5Dには1つのみが示されているが、2つ以上の出力列があってもよい。
特に、行129aは、ルールの相対的な入力及び出力を指定する。行129bは、ルールを定義する際に使用されるフィールド及び出力が何であるかを指定する。この例では、行129bは、セル128a、128b、及び128cを含む。セル128aは、入力部分122において視覚表現126aの周りの点線によって視覚的に描かれるように、視覚表現126aのユーザ選択時にルール定義部分123に追加される。この選択の結果として、セル128aは、「名前」フィールド103beが(図5Bに示される)、ルール定義部分123において指定されたルールを定義する際の入力として使用されることを指定する。セル128bは、「残りの分数」フィールド102d(図5Bに示される)はまた、ルール定義123において示されるルールを定義する際の入力として使用されることを指定する。この例では、視覚表現125cが選択されると、セル128bは、「残りの分数」フィールド102dがルールへの入力として使用されることを表すように更新される。同様に、セル128cは、「使用された分数」フィールド102c(図5Bに示される)を表す視覚表現125bが選択された後に、「使用された分数」102cもまた、ルール定義123において示されるルールを定義する際の入力として使用されることを指定する。セル128a、128b、及び128cは、ユーザが、記憶システム12に記憶されたデータセットからフィールドの属性(フィールドの名前など)にアクセスすることができることを例示するが、それらのデータセット(又はフィールド)自体に物理的にアクセスする必要はない。ルール定義部分123はまた、ルールケースの様々な基準が満たされたときに様々なルールケース及び出力を指定する行129c、129d、129e、129f、及び129gを含む。
ルール定義部分123においてセルの入力を指定することによってルールの定義を完了すると、開発環境18は、ルールケース、及びルールを実装するためにどのフィールドにアクセスすることが必要になるかを指定するルール仕様96aを生成する。この例では、ルール仕様96aは、「名前」フィールド103b、「残りの分数」フィールド102d、及び「使用された分数」フィールド102c(各々、図5Bに示される)をルールの入力として使用されることを指定する。すなわち、これらのフィールドの値は、ルールの入力として使用される。こうして、ルール自体を実行すると、それらのフィールドは、ルールを実行するときに物理的にアクセスすることが必要となる。しかしながら、ルールを定義するこの段階では、論理データ94は、ユーザに、物理アクセスなしにそれらのフィールドへの論理アクセスを提供する。例えば、ユーザは、入力部分122において記憶システム12に記憶された様々なデータセットから利用可能なフィールドを閲覧することができることによって、論理アクセスが提供された。開発環境18は、ルール仕様96aをグラフジェネレータ22に送信する。開発環境18はまた、論理データ94をグラフジェネレータ22に送信する。
図5Eを参照すると、環境130は、ルール仕様96a及び論理データ94からデータフローグラフを生成及び最適化する例を示している。グラフジェネレータ22は、ルール仕様96a及び論理データ94を受信する。グラフジェネレータ22は、最適化されたデータフローグラフ98aを生成する際に、オプティマイザ132をルール仕様96a及び論理データ94の両方に適用する。この例では、グラフジェネレータ22は、データフローグラフ134を生成するためにルール仕様96a及び論理データ94を使用する。この例では、データフローグラフ134は、コンポーネント134a~134mを含む。次いで、グラフジェネレータ22は、オプティマイザ132をデータフローグラフ134に適用する。概して、オプティマイザ132は、データフローグラフ(例えば、データフローグラフ134)における冗長性を低減し、データフローグラフによって使用されていないデータソースを排除する。すなわち、ルールが特定のデータソースからフィールド(例えば、データセット)にアクセスすることをルール仕様96aが指定しない場合、オプティマイザ132は、そのデータソースをデータフローグラフから除去することになる。いくつかの例では、オプティマイザ132は、(例えば、ソースデータがリレーショナルデータベースに記憶されているときに)選択ステートメントを最小化することによってこれを行い、それにより、ルール仕様96aにおいて指定され、論理データ94に含まれているデータセット及びフィールドのみがアクセスされる。
初期に、グラフジェネレータ22は、例えば、論理データ94において指定されたデータセットにアクセスするための命令、パラメータ、又は他の情報に基づいて、データソースとして論理データ94に含まれるデータセット及びフィールドでデータフローグラフ134を生成する。この例では、データフローグラフ134内のコンポーネント134a~134mは、論理データ94において表されるデータソース(例えば、データセット)に基づいている。いくつかの例では、グラフジェネレータ22はまた、仕様96a又は論理データ94、又はその両方に含まれる情報をデータフローグラフ134にどのように変換するかを指定する組み込み機能に依存し得る。例えば、組み込み機能は、例えば、仕様96a若しくは論理データ94、又はその両方からの情報に基づいて、とりわけ、ソート、パーティション、又は結合動作などの様々な動作をデータフローグラフに挿入する機能を含むことができる。
データフローグラフ134はまた、1つ以上の変換コンポーネントを含むことができる。概して、変換コンポーネントは、1つ以上のデータソース、例えば、入力データセットから入力レコードを受信し、計算論理に基づいて出力レコードを作り出す。変換コンポーネントを作り出すために、グラフジェネレータ22は、入力に適用されるように、論理の仕様(例えば、仕様96aからのルールセット、又は論理データ94からの命令、パラメータ、又は他の情報)を受信することができる。次いで、グラフジェネレータ22は、データフローを表すリンク要素によって接続されたデータ処理コンポーネントを有するグラフベースの計算として変換を生成し実装することができる。この例では、データフローグラフ134は、ルール仕様96aにおいて指定されたルールを実行する論理を含む変換コンポーネント134lを含む。この例では、データフローグラフ134はまた、計算フィールド102dを生成するための論理を含む変換コンポーネント134iを含む。この例では、生成された変換は、データフローグラフ134におけるコンポーネント(例えば、コンポーネント134l)である。グラフジェネレータ22はまた、例えば、ルールセットが編集されたときに変換を更新し得る。例えば、ルールセットが編集されたとき、エディタ(例えば、開発環境18)は、ルールセット全体をグラフジェネレータ22に提供するか、又は新しい若しくは修正されたルール若しくはルールケースのみを提供してもよい。グラフジェネレータ22は、変換を使用するシステムの能力及びニーズに応じて、元の変換を置き換えるために完全に新しい変換を生成してもよく、又はグラフジェネレータ22は、変換を含む新しいコンポーネントを提供してもよい。
グラフジェネレータ22は、オプティマイザ132をデータフローグラフ134に適用して、データフローグラフ136を生成する。オプティマイザ132は、データフローグラフ136のクロスアウト部分によって示されるように、データフローグラフ134からコンポーネント134a、134c、134f、134g、134jを除去する。オプティマイザ132は、これらのコンポーネントがルール仕様96aによって参照又は使用されないデータセットに関連するため、これらのコンポーネントを除去することを決定する。すなわち、ルール仕様96aは、除去されるデータセットに含まれるいずれのフィールドへの参照も含まない。いくつかの例では、ルートノード(例えば、この例におけるデータセット103又はコンポーネント134b)としての役割を果たすデータセットは、ルール仕様96aによって使用されるかどうかにかかわらず、最適化されない場合があることに留意されたい。最適化の最終結果は、ルール仕様96aによって指定されたルールを実行するために必要とされないデータセットの全て、並びにそれらのデータセットにアクセスするためにインスタンス化された他のコンポーネント(例えば、ソート、結合など)を除去するように最適化されたデータフローグラフ98aである。
図5Fを参照すると、環境140は、ビジネスルール及び他の論理ルールを定義するために開発環境18によって生成されたビジネスルールエディタインターフェース121の別の例を示している。環境140では、ルール定義123は、図5Dに示される環境120におけるルール定義に対して変更されている。具体的には、トリガセル128b及び128cが削除されており、セル128aは、「使用された分数」フィールド102c(図5Bに示される)が、「使用された分数」フィールド102cを表す視覚表現125bを選択した後にルール定義123に示されるルールを定義する際の唯一の入力であることを指定するように修正されている。列129d、129e、129f、及び129gのルールケースも更新されている。そのため、開発環境18は、図5Dに示されるルール仕様96aの修正バージョンであるルール仕様142を生成する。この例では、ルール仕様142は、「使用された分数」フィールド102cがルールの唯一の入力として使用されることを指定する。開発環境18は、ルール仕様142をグラフジェネレータ22に送信する。開発環境18はまた、論理データ94をグラフジェネレータ22に送信する。
図5Gを参照すると、環境150は、修正された仕様142及び論理データ94からデータフローグラフを生成及び最適化する例を示している。初期に、グラフジェネレータ22は、修正された仕様142において指定されたルールを実行する論理を含む変換コンポーネント152lを除いて、図5Eに示されるデータフローグラフ134に類似したデータフローグラフ152を生成する。この例では、修正された仕様142において指定され、コンポーネント152lによって実装されるルールが、仕様96aで指定され、コンポーネント134lによって実装されるルールとは異なるため、変換コンポーネント152lは、変換コンポーネント134l(図5Eに示される)とは異なる。グラフジェネレータ22は、オプティマイザ132をデータフローグラフ152に適用して、データフローグラフ154を生成する。そうすることで、オプティマイザ132は、データフローグラフ154のクロスアウト部分によって示されるように、データフローグラフ154からコンポーネント134a、134c、134f、134g、134j、及び134iを除去する。オプティマイザ132は、これらのコンポーネントがルール仕様142によって参照又は使用されないデータセットに関連するため、これらのコンポーネントを除去することを決定する。ルートノード(例えば、この例におけるデータセット103又はコンポーネント134b)として役割を果たすデータセットが仕様140において参照されていないが、最適化されていないことに留意されたい。最適化の最終結果は、ルール仕様142によって指定されたルールを実行するために必要とされないデータセットの全て、並びにそれらのデータセットにアクセスするためにインスタンス化された他のコンポーネント(例えば、ソート、結合など)を除去するように最適化されたデータフローグラフ156である。データフローグラフ156は、それぞれのグラフの仕様96a、142において依存される異なる属性に起因して、同じ論理データ94ソースを使用するにもかかわらず、データフローグラフ98aとは異なる。
図5Hを参照すると、環境160は、ビジネスルール及び他の論理ルールを定義するために開発環境18によって生成されたビジネスルールエディタインターフェース121の更に別の例を示している。環境140において、ルール定義123は、それぞれ、図5D及び図5Fに示される環境120及び140におけるルール定義に対して変更されている。ここで、セル128aは、「最終リロード」フィールド103b(図5Bに示す)を表す視覚表現127aを選択した後に、「最終リロード」フィールド103bが、ルール定義123に示されるルールを定義する際の唯一の入力であることを指定する。列129c、129d、129e、129f、及び129gのルールケースも変更されている。そのため、開発環境18は、ルール仕様96a(図5Aに最初に示されている)、142の各々とは異なるルール仕様96bを生成する。この例では、ルール仕様96bは、「最終リロード」フィールド103bがルールの唯一の入力として使用されることを指定する。開発環境18は、ルール仕様96bをグラフジェネレータ22に送信する。開発環境18はまた、論理データ94をグラフジェネレータ22に送信する。
図5Iを参照すると、環境170は、仕様96b及び論理データ94からデータフローグラフを生成及び最適化する例を示している。初期に、グラフジェネレータ22は、修正された仕様96b(この例では、変換コンポーネント134l及び152lの各々とは異なる)において指定されたルールを実行する論理を含む変換コンポーネント172lを除いて、それぞれ、図5E及び図5Gに示されるデータフローグラフ134及び152に類似するデータフローグラフ172を生成する。グラフジェネレータ22は、オプティマイザ132をデータフローグラフ172に適用して、データフローグラフ174を生成する。そうすることで、オプティマイザ132は、データフローグラフ174のクロスアウト部分によって示されるように、データフローグラフ154からコンポーネント134a、134c、134f、134e、134h、及び134iを除去する。オプティマイザ132は、これらのコンポーネントがルール仕様96bによって参照又は使用されないデータセットに関連するため、これらのコンポーネントを除去することを決定する。ルートノード(例えば、この例におけるデータセット103又はコンポーネント134b)として役割を果たすデータセットが仕様140において参照されていないが、最適化されていないことに留意されたい。最適化の最終結果は、ルール仕様96bによって指定されたルールを実行するために必要とされないデータセットの全て、並びにそれらのデータセットにアクセスするためにインスタンス化された他のコンポーネント(例えば、ソート、結合など)を除去するために最適化されたデータフローグラフ98b(図5Aに最初に示されている)である。データフローグラフ98bは、それぞれのグラフの仕様において依存される異なる属性に起因して、同じ論理データ94ソースを使用するにもかかわらず、データフローグラフ98a及び156とは異なる。
図5Jを参照すると、環境180は、データフローグラフ96aの実行の結果を示している。グラフ生成システム18は、データフローグラフ96aをコンパイラ24に送信する。コンパイラ24は、以下のように、データフローグラフ96aを実行可能プログラム182にコンパイルする。
データフローグラフは、計算プロセスを表す複数の頂点であって、各頂点が、関連付けられたアクセス方法を有する頂点として、及び、複数のリンクであって、リンクの各々が、互いに少なくとも2つの頂点を接続し、接続された頂点間のデータの流れを表す、複数のリンクとして、計算を表す。データフローグラフは、(1)データフローグラフをユーザ入力としてコンピューティングシステムに受け取ることと、(2)各頂点が実行可能状態になり、各リンクが、リンクによって接続された頂点のアクセス方法と互換性のある少なくとも1つの通信方法と関連付けられるまでに、グラフ変換ステップをコンピューティングシステム上で実行することによって、実行のためのデータフローグラフを準備することと、(3)コンピューティングシステムによって、リンクの通信方法に応じて、通信チャネル及び/又はデータストアの組み合わせを作成することによって、各リンクを起動することと、(4)プロセスの実行を呼び出すことによってコンピューティングシステム上で各プロセスを起動することと、によって実行される。
概して、実行のためのデータフローグラフは、以下のように準備される。
ドライバプログラム(又は、単に、略して「ドライバ」)は、ユーザインターフェースを通して受信されたユーザからの入力に基づいて、データフローグラフを描くための手段を提供する。データフローグラフの視覚表現を表す1つ以上のデータフローグラフデータ構造が、ドライバによって生成される。ドライバは、初期にユーザによって描かれたデータフローグラフにアクセスし、グラフ変換を適用することによって実行のためのデータフローグラフを準備する。これらの変換を実行するときに、初期データフローグラフを定義するデータフローグラフデータ構造は、各頂点及び任意の関連付けられたリンクをフェッチするために、既知の様式でトラバースされる。いくつかの例では、以下に記載されるように、実行のためのデータフローグラフを準備するために、フェッチされたデータ構造に対して5つのデータフローグラフ変換が使用される。
データフローグラフは依然として実行可能な形態ではないが、以下に記載される5つのデータフローグラフ変換が、実行可能なデータフローグラフが取得されるまで、任意の順序で、しばしば必要に応じて(全くないことを含む)、選択及び適用され得る。5つのデータフローグラフ変換は、(1)ファイルアダプタを挿入することと、(2)通信アダプタを挿入することと、(3)ファイル頂点の状態をCompleteに設定することと、(4)プロセス頂点の状態をRunnable又はUnrunnableに設定することと、(5)データリンクの通信方法を設定することと、を含む。これらの変換の各々及び各々が実行され得る条件をここに記載する。
ファイルアダプタを挿入すること
この変換では、ドライバは、リンクをファイルアダプタに(すなわち、リンク、ファイル頂点、及び別のリンクに)置き換える。すなわち、データフローグラフデータ構造のトラバース中にリンクを表す各データフローグラフデータ構造がフェッチ又はアクセスされるとき、元のデータ構造を修正、拡張、又は置換する新しいデータ構造が作成され得る。
ソース(宛先)ファイルアダプタの場合、ファイル頂点のホストは、ソース(宛先)頂点のホストと同じであり、ファイル頂点のファイルは、ソース(宛先)頂点の作業ディレクトリ内に位置する新しいファイルである。この変換は、
(1)ソースが、ファイル頂点又はDone状態にないプロセス頂点のいずれかである場合、及び
(2)宛先が、Incomplete状態のファイル頂点又はDone状態にないプロセス頂点のいずれかである場合、に実施され得る。
通信アダプタを挿入すること
この変換では、ドライバは、リンクを通信アダプタに(すなわち、リンク、プロセス頂点、及び別のリンクに)置換する。プロセス頂点は、コピープログラムを実行し、コピープログラムはデータをその入力からその出力へコピーするものであり、基礎となるサブストレイトによって支持される通信チャネル又はデータストアのうちのいずれかから読み取り/そこに書き込みすることができる。ソース(宛先)通信アダプタの場合、プロセス頂点のホストは、ソース(宛先)頂点のホストと同じであり、作業ディレクトリは、ソース(宛先)頂点の作業ディレクトリと同じである。プロセス頂点は、Enabled状態で作成される。この変換は、
(1)ソースが、Done以外の状態のプロセス頂点、又はファイル頂点のいずれかである場合、及び
(2)宛先が、Done以外の状態のプロセス頂点、又はIncomplete状態のファイル頂点のいずれかである場合、に作成され得る。
ファイル頂点の状態をCompleteに設定すること
この変換では、ファイル頂点の状態がCompleteに設定される。この変換は、ファイル頂点の状態が不完全であり、ファイル頂点への全ての入力がDone状態のプロセス頂点である場合に実行され得る。
プロセス頂点の状態をRunnable又はUnrunnableに設定すること
この変換において、プロセス頂点の状態は、Runnable又はUnrunnableのいずれかに設定される。この変換は、プロセス頂点の状態がEnabledである場合に実行され得る。
データリンクの通信方法を設定すること
この変換では、通信方法がデータリンクに設定される。この変換は、データリンクの通信方法がUnboundである場合に実行され得る。
以下の3つのプロパティを有するデータフローグラフが実行される。
(1)全てのプロセス頂点が、次の状態、すなわち、Done、Runnable、Unrunnable、又はDisabledのうちの1つにある。
(2)全てのデータリンクが、以下の基準の全てを満たす。
1)データリンクのソース又は宛先がRunnableプロセス頂点である場合、データリンクの通信方法は、特定の通信方法にバインドされなければならない。
2)データリンクの通信方法がFile以外のものである場合、そのソース及び宛先の両方がプロセス頂点でなければならず、1つのプロセス頂点がRunnableである場合、両方のプロセス頂点がRunnableでなければならない。
3)データリンクの通信方法がFileである場合、そのソース又は宛先がファイル頂点でなければならない。宛先がRunnableプロセス頂点である場合、ソースはCompleteファイル頂点でなければならない。ソースがRunnableファイル頂点である場合、宛先がIncompleteファイル頂点でなければならない。
(3)通信方法にバインドされた全てのリンクは、通信方法に固有の制約を満たす。
1)通信方法が、そのソース及び宛先ポートのアクセス方法と互換性がなければならない(これは、プログラムテンプレートを参照することによって決定され得る)。前述の拡張サブストレイトの場合、全ての通信方法が、SOCアクセスと互換性があり、Shared Memory以外の全てが、File Descriptorアクセスと互換性があり、NamedPipe及びFileが、NamedPipeアクセスと互換性があり、ファイルのみがFileアクセスと互換性がある。
2)いくつかの通信方法は、ソース及び宛先の頂点のノードが同一であることを必要とする。前述の拡張サブストレイトの場合、これは、TCP/IP以外の全ての通信方法について当てはまる。
データフローグラフ変換は、実行可能グラフが取得されるまで、任意の順序で適用され得る(例えば、データフローグラフデータ構造は、全ての変換が完了するまで繰り返しトラバースされ得る)。いくつかの例では、データフローグラフ変換は、以下の順序、すなわち、(1)ファイルアダプタを挿入すること、(2)ファイル間リンクを置換すること、(3)Completeファイル頂点を識別すること、(4)Unrunnableプロセス頂点を識別すること、(5)Runnableプロセス頂点を識別すること、(6)残りのEnabled頂点をUnrunnableに設定すること、(7)条件が満たされる場合、更にファイルアダプタを挿入すること、(8)通信方法を選択すること、及び(9)通信アダプタを挿入すること、で適用される。ここで、この例のステップをより詳細に記載する。
(1)ファイルアダプタを挿入すること
ファイルアダプタを挿入するために、データフローグラフ内の全てのリンクについて、以下のステップが実行される。リンクのソースポートがファイルの使用を必要とするデータアクセス方法を有し、宛先が同じノード上のファイルではない場合、ソースファイルアダプタを挿入する。リンクの宛先ポートがファイルの使用を必要とするデータアクセス方法を有し、ソースが同じノード上のファイルではない場合、宛先ファイルアダプタを挿入する。リンクの宛先がDisabled状態のプロセス頂点であり、ソースがEnabled状態のプロセス頂点である場合、宛先ファイルアダプタを挿入する。
(2)ファイル間リンクを置換すること
ファイル間リンクを置換するために、データフローグラフの全てのリンクについて、以下のステップが実行される。ソース及び宛先が両方ともファイル頂点である場合、ソース通信アダプタを挿入する。(加えて、ソース及び宛先が異なるノード上にある場合、宛先通信アダプタも挿入する、図示せず)。
(3)Completeファイル頂点を識別すること
Completeファイル頂点を識別するために、データフローグラフの全てのファイル頂点について、以下のステップが実行される。全てのアップストリーム頂点がDone状態にあるプロセス頂点である場合、その状態をCompleteに設定する。
(4)Unrunnableプロセス頂点を識別すること
Unrunnableプロセス頂点を識別するために、データフローグラフの全てのリンクについて、以下のステップが実行される。「Unrunnability」テストは、次のように実行される、すなわち、リンクのソースがIncompleteファイル頂点であり、その宛先がEnabled状態のプロセス頂点である場合、プロセス頂点の状態をUnrunnableに設定し、ソースがEnabled以外の任意の状態のプロセス頂点であり、宛先がEnabled状態のプロセス頂点である場合、宛先プロセス頂点をUnrunnableとしてマーク付けする。Unrunnableとしてマーク付けされ得る頂点がなくなるまで、このテストを繰り返す。
(5)Runnableプロセス頂点を識別すること
Runnableプロセス頂点を識別するために、データフローグラフ内の全てのプロセス頂点について、以下のステップが実行される。「Runnability」テストは、以下のように実行される、すなわち、頂点がEnabled状態にあり、全てのアップストリーム頂点がCompleteファイル頂点又はRunnableプロセス頂点のいずれかである場合、頂点の状態をRunnableに設定する。Runnableとしてマーク付けされ得る頂点がなくなるまで、このテストを繰り返す。
(6)残りのEnabled頂点をUnrunnableに設定すること
残りのEnabled頂点をUnrunnableに設定するために、グラフ内の全てのプロセス頂点について、以下のステップが実行される。頂点がEnabled状態にある場合、その状態をUnrunnableに設定する。
(7)更にファイルアダプタを挿入すること
更にファイルアダプタを挿入するために、データフローグラフ内の全てのリンクについて、以下のステップが実行される。リンクのソースがRunnableプロセス頂点であり、宛先がUnrunnableプロセス頂点である場合、ソースファイルアダプタを挿入する。
(8)通信方法を選択すること
通信方法を選択するために、データフローグラフ内の全てのリンクについて、以下のステップが実行される。このステップは、いずれかの終了時に、実行可能なプロセスに取り付けられ、かつ通信方法にバインドされていないリンクにのみ適用される。リンクのソース(宛先)がファイル頂点であり、その宛先(ソース)が同じノード上のプロセス頂点である場合、リンクの通信方法をFileに設定する。そうでない場合、利用可能な通信方法のうちの1つを選択し、それにより、その方法の制約の全てが満たされる。速度について、通信方法は、Shared Memory、NamedPipe、及びTCP/IPの順序で考慮され得る。いくつかの例では、上術の制約を満たす第1の方法が選択される。基準サブストレイトでは、以下のルールが使用され得る。まず、リンクがSOC接続を受け入れるポートに取り付けられている場合、リンクは、ソース及び宛先が同じノード上にある場合はShared Memoryを使用し、それらが異なるノードにある場合はTCP/IPを使用することになる。そうでない場合、ソース及び宛先が同じノード上にある場合、NamedPipe方法が使用されることになる。全ての他の場合において、単一の通信方法では十分ではなく、システムは通信アダプタ(以下)に戻すことになる。
(9)通信アダプタを挿入すること
通信方法を選択する前のステップにおいて単一の通信方法が選択されておらず、全てが試みられた場合、ソース通信アダプタを挿入し、アダプタの2つのリンクの通信方法を選択しようと試みることによって継続する。これが失敗した場合、新たに挿入されたソース通信アダプタを宛先通信アダプタに置換することを試みる。これが失敗した場合、ソース通信アダプタ及び宛先通信アダプタの両方を挿入し、結果として生じる二重アダプタ内の3つのリンクの通信方法を選択する。基準サブストレイトにおいて、通信アダプタが、ソース及び宛先が異なるノード上にあり、リンクが、SOC接続方法を受け入れないファイル頂点又はプロセス頂点のいずれかに接続される場合にのみ必要とされる。この場合、アダプタは以下のように選択され得る。
ソースがファイル頂点である場合、ソース通信アダプタを挿入する。ソース通信アダプタ内の2つのリンクは、次に、File及びTCP/IP通信方法を使用することになる。
ソースがSOC通信方法を受け入れないポートである場合、ソース通信アダプタを挿入する。ソース通信アダプタ内の2つのリンクは、次に、TCP/IP及びFile通信方法を使用する。
宛先がファイル頂点である場合、宛先通信アダプタを挿入する。
アダプタ内の2つのリンクは、次に、TCP/IP及びFile通信方法を使用する。
宛先がSOC通信方法を受け入れないポートである場合、宛先通信アダプタを挿入する。アダプタ内の2つのリンクは、次に、TCP/IP及びNamedPipe通信方法を使用する。
フェーズC:データリンクを起動すること
データリンクは、Unlaunched状態で作成され、起動されなければならない。リンクを起動するために、リンクをスキャンして、Unlaunchedであり、通信方法にバインドされ、Runnableソース又は宛先を有するリンクを見つける。全てのそのようなリンクについて、様々な通信方法によって使用され得る識別子が生成される。上記の拡張サブストレイトの場合、識別子は以下のように作成される。全てのリンクは、2つの識別子、すなわち、ストリームオブジェクト識別子及び通信チャネル/ファイル識別子を有する。ストリームオブジェクト識別子は、SOCメカニズムによって使用され、リンクの名前と同一である。チャネル/ファイル識別子は、リンクによって用いられるFile、NamedPipe、Shared Memory区域、又はTCP/IP接続を識別するために使用される。加えて、プロセス頂点がNamedPipe又はFile通信方法を必要とする場合、チャネル/ファイル識別子は、プロセス頂点が、起動されると、UNIXファイルシステムを使用してチャネル/ファイルに取り付けることができるように、利用可能にされることになる。
識別子が生成された後、チャネル又はストリームオブジェクトを作成するために、サブストレイトが呼び出される。通信方法がNamedPipeである場合、NamedPipeを作成するために、サブストレイトがまたも呼び出される。
実行可能プログラム182が生成されると、コンパイラ24は実行可能プログラム182をデータ処理システム26に送信する。データ処理システム26は、記憶システム12からレコードを受信し、実行可能プログラム136をバッチモードで実行して、例えば、バッチ結果184を作り出す。バッチ結果184は、特定のルールケース「始動」(例えば、処理されたデータレコードによってルールが何回トリガされたか)の回数を示す。この例では、「ゴールド」オファーは、他のルールと比較して、途方もない時間量をトリガした。そのため、ユーザは、例えば、ゴールドオファーがトリガされる時間数を減少させるために変更を行うことができるかどうかを決定するために、自分が作成したルールをテストすることを望む場合がある。
図5Kを参照すると、環境190は、ビジネスルール及び他の論理ルールを定義及びテストするために開発環境18によって生成されたビジネスルールエディタ及びテストインターフェース191の例を示している。この例では、インターフェース191は、レコード192aによるテスト、式192bによってテスト、エラー192cによってテスト、ベースラインデルタ192dによってテストし、ルールケース192eによるテストを含む、様々なテストカテゴリ192を可能にする。この例では、開発環境18のユーザは、ルールケース192eによってテストするように選択され、ケース2(ゴルフオファーに対応する)を指定している。ここから、ユーザは、図5Lに示されるように、ボタン193aと対話することによって、指定されたルールケース(すなわち、ルールケース2)をトリガしたレコード193をステップスルーすることができる。この例では、インターフェース191のルール定義部分123において影付き塗りつぶしの太い輪郭によって示されるように、レコード4が、ルールケース2をトリガしている。データフローグラフが実行された(これにより、物理データがアクセスされた)ため、入力部分122において示されるフィールドは、現在のレコード(図5Lのレコード4)のデータ値194が入力される。これらの値から分かるように、レコード4は、トリガケース2の定義されたルール内に十分に含まれる。図5Mに示されるように、ボタン193aと対話することにより、ケース2をトリガした次のレコードに進む。データ値194から、レコード24がルールケース2の「使用された分数」閾値に有意に近いことが分かる。
そのため、ゴールドオファーの数を減少させるために、ユーザは、図5Nに示されるように「使用された分数」閾値を増加させ得る。この例では、ユーザは、太枠の網掛けセル195に示されるように、ルールケース2における「使用された分数」のトリガ値を「>400」に変更している。変更の全体的な結果を見るために別のバッチテストを実行する前に、ユーザは、ルールが予想通りに機能していることを確実にするために、個々のレコード又は少数のレコードに対するルール変更を望む場合がある。そうするために、ユーザは、テストされるレコードをウィンドウ193に入力し、「テストレコード」ボタン196と対話することができる。この例では、ユーザは、レコード24をテストするように選択している。「テストレコード」ボタン196を選択したことに応答して、開発環境18は、修正された仕様197を生成し、仕様197をグラフジェネレータ22に送信する。開発環境18は、仕様197全体又は修正された部分のみを伝送することができる。その修正された仕様197及び論理データ(図示せず)を使用して、グラフジェネレータ22は、修正されたデータフローグラフ198を作り出した。データフローグラフ198は、コンパイル及びその後の実行のためにコンパイラに送信される。開発環境18はまた、テストされるレコードを指定するデータ199を、実行のためにデータ処理システム26に送信する。
図5Oを参照すると、環境200は、指定されたテストレコード204に対するデータフローグラフ198の実行を示している。この例では、コンパイラ24は、データフローグラフ198を受信し、それをコンパイルして実行可能プログラム202を作り出し、実行可能プログラム202は、データ処理システム26に送信される。データ処理システム26は、テストされるレコードを指定するデータ199を受信し、記憶システム12から指定されたテストレコード204(例えば、この例ではレコード24)を取り出す。次いで、データ処理システム26は、テストレコード204を使用して実行可能プログラム202を実行して、更新された結果206、すなわち、指定されたレコードを更新された実行可能データフローグラフで処理した結果を作り出す。これらの結果は、図5Pに示されるように、インターフェース191においてテストを実行したユーザに提示される。図5Pに見られるように、レコード24は、修正されたルールの下でケース2(ゴールドオファーを表す)ではなく、ケース3(シルバーオファーを表す)をトリガする。
修正されたルールケース及びデータフローグラフが意図されるように機能していることを確認すると、図5Qに示されるように、バッチテストを実行することができる。そうするために、データ処理システム26は、記憶システム12からレコードを受信し、バッチモードで実行可能プログラム202を実行してバッチ結果208を作り出す。バッチ結果208は、ゴールドオファーの数が、図5Jに示される修正前のバッチ結果184と比較して著しく減少していることを示している。
図6Aを参照すると、環境210は、ビジネスルール及び他の論理ルールを定義するために開発環境18によって生成されたビジネスルールエディタインターフェース121の別の例を示している。この例では、論理データ211は、「取引先データ」データセットをルートノードとして含み、「取引先データ」データセットは、「取引」データセット、「支払データ」データセット、及び「出金データ」データセットを含む様々な他のデータセットに関連している。これらのデータセットの各々及びそれらのそれぞれのフィールドは、インターフェース121の入力部分122において視覚化される。具体的には、入力部分122は、「取引先データ」及びそのフィールドの視覚表現212、212a、212b、及び212c、「取引」及びそのフィールドの視覚表現213、213a、及び213b、「支払データ」及びそのフィールドの視覚表現214及び214a、並びに「出金データ」及びそのフィールドの視覚表現215及び215aを含む。
ルール定義部分123は、一連の入力及びルールケースを含む。この例では、それぞれ、「価格」フィールド及び「場所」フィールドは、セル128a及び128bに示されるように、ルールを定義する際の入力として使用される。「取引先場所」及び「取引先口座残高」フィールドは、ルール定義部分120において指定されたルールケースを定義する際の式の一部として使用される。ルールケースが適用される場合、出力列129aに基づいて出力が生成される。この列に示されるように、ルールケース129c、129d、129eの各々の出力は、指定されたトリガ基準に基づいて、レビューのためのある特定の取引の承認、否認、又はフラグ付けに関連する。ルール定義部分123においてセルの入力を指定することによってルールの定義を完了すると、開発環境18は、ルールケースと、ルールを実装するためにどのフィールドにアクセスする必要があるかを指定するルール仕様216を生成する。開発環境18は、ルール仕様216をグラフジェネレータ22に送信する。開発環境18はまた、論理データ211をグラフジェネレータ22に送信する。
図6Bを参照すると、環境220は、ルール仕様216及び論理データ211から連続動作のために構成されたデータフローグラフを生成及び最適化する例を示している。グラフジェネレータ22は、ルール仕様216及び論理データ211を受信する。バッチ又は非連続設定と同様に、グラフジェネレータ22は、初期に、例えば、論理データ211において指定されたデータセットにアクセスするための命令、パラメータ、及び他の情報に基づいて、データソースとして論理データ211に含まれるデータセット及びフィールドにアクセスするように構成されたデータフローグラフ222を生成する。しかしながら、データフローグラフ222のコンポーネント及びデータがアクセスされ、処理される様式は、連続設定では異なる。この例では、サブスクライブコンポーネント222aを使用して、ルートノードである「取引先データ」からのデータのフローをサブスクライブしている。次いで、ルートノードからの各着信フローユニット(又はその一部分)は、例えば、ルックアップコンポーネント222cを使用して、論理データ211において定義された関連レコードの後続のルックアップに使用するために、複製コンポーネント222bを通して複製される。
初期データフローグラフ222を生成した後、グラフジェネレータ22は、データフローグラフ224を生成するために、オプティマイザ132をデータフローグラフ222に適用する。オプティマイザ132は、データフローグラフ224のクロスアウト部分によって示されるように、データフローグラフ222からコンポーネント222d、222f、222g、222h、及び222iを除去する。オプティマイザ132は、これらのコンポーネントがルール仕様216によって参照又は使用されないデータセットに関連するため、これらのコンポーネントを除去することを決定する。すなわち、ルール仕様216は、除去されたデータセットに含まれるいずれのフィールドへの参照も含まない。最適化の最終結果は、ルール仕様96aによって指定されたルールを実行するために必要とされないデータセットの全て、並びにそれらのデータセットにアクセスするためにインスタンス化された他のコンポーネント(例えば、ソート、結合など)を除去するように最適化されたデータフローグラフ226である。これにより、本明細書に記載の論理データは、入力データが連続的、半連続的、又は非連続的であるかどうかにかかわらず、物理的負担を伴わずに論理アクセスを提供し、最適化を容易にするのに有効である。
図6Cを参照すると、環境230は、連続データフローグラフ226の実行の結果を示している。グラフ生成システム18は、データフローグラフ226をコンパイラ24に送信し、コンパイラ24は、データフローグラフ96aを実行可能プログラム232(例えば、実行可能なデータフローグラフ)にコンパイルする。コンパイラ23は、実行可能プログラム232をデータ処理システム26に送信する。データ処理システム26は、データストリーム12(例えば、連続データ)を受信し、実行可能プログラム232を実行して、データストリームを処理し、リアルタイム又はほぼリアルタイムの結果234を作り出す。
図7Aを参照すると、環境240は、仕様252を生成する開発環境18の別の実世界の例を示している。この例では、開発環境18は、コンポーネント部分242、入力部分243、及びキャンバス部分244を有するグラフィカルユーザインターフェース241を描画している。コンポーネント部分242は、計算論理を定義するために利用可能な様々な動作を表す視覚表現242a~242fを含む。入力部分243は、論理データ94において表されるデータセット及びフィールドの視覚表現245、245a、246、246a、246b、246c、247、247a、248、248aを表示している。入力部分243はまた、他のデータソースにおいて表されるデータセット及びフィールドの視覚表現249及び249aを表示している。すなわち、入力部分243における視覚表現は、計算論理を定義するために利用可能なデータセット及びフィールドを表す。
キャンバス部分244は、データフローグラフの形態で計算論理を定義するために使用され、視覚化250として視覚的に描かれる(以下、便宜上、及び限定することなく、「データフローグラフ250」と称される)。視覚化250によって表されるデータフローグラフは、ノードを有するデータ構造を含む。ノードの各々は、少なくとも1つの動作プレースホルダフィールド及び少なくとも1つのデータプレースホルダフィールドを含み、これらは、キャンバス部分244においてユーザによって指定された動作及びデータが入力される。この例では、データフローグラフ250は、視覚表現242a~242fのうちの1つ以上を、コンポーネント部分242からキャンバス部分244上にドラッグ及びドロップすることによって生成される。視覚表現242a~242fの各々は、データ構造によって又はデータ構造に対して実行される動作を表す。視覚表現がキャンバス部分244上に配置されると、それらは、キャンバス部分244上のアイコンになる。アイコン251aなどのこれらのアイコンのうちのいくつかは、特定のデータセット又はフィールドに関して実行する動作(例えば、フィルタ動作)を指定する。この例では、アイコン251aは、入力部分243において視覚表現246aによって表される「追加された分数」に対してフィルタ動作が実行されることを指定する。アイコン251bは、論理データ部分243において視覚表現246cによって表される「残りの分数」フィールドに対してフィルタ動作が実行されることを指定する。開発環境18は、データフローグラフ250によって視覚的に表される計算論理を使用して、仕様252を生成する。仕様252は、キャンバス部分244において視覚的に描かれた計算論理を指定する。開発環境18は、仕様252及び論理データ94をグラフジェネレータ22に送信する。グラフジェネレータ22は、仕様252及び論理データ94を使用して、データフローグラフ250の各ノードの動作フィールド及びデータプレースホルダフィールドにデータ入力することができる。
図7Bを参照すると、環境260は、最適化されたデータフローグラフを生成するグラフジェネレータ22の例を例示しており、その視覚化は、視覚化268(本明細書では、便宜上、及び限定することなく、「データフローグラフ268」と称される)によって示される。グラフジェネレータ22は、仕様252及び論理データ94を受信する。その仕様252及び論理データ94を使用して、グラフジェネレータ22は、図7Cに示されるように、コンポーネント262a~262rを含むデータフローグラフ262を生成する。特に、グラフジェネレータ22は、データフローグラフ252の各ノードについて動作フィールド及びデータプレースホルダフィールドにデータ入力し、かつ前述の技術を使用することによって、仕様252及び論理データ94からデータフローグラフ262を生成する。例えば、指定された計算論理が変換コンポーネント134lによって実装されるデータフローグラフ98aとは異なり、データフローグラフ262は、仕様252において指定された計算論理に基づいて別個のコンポーネント262o、262p、262qを含む。データフローグラフ262は、論理データ94において表され、別個の「オファー」データセット249及びその「月次」フィールド249aと結合されるデータセットを表し、データフローグラフ262はまた、データフローグラフ(例えば、ソート、パーティションなど)を生成するために必要な追加の組み込み機能を表す。
この例では、グラフジェネレータ22は、最適化されたデータフローグラフ268を作り出すために、オプティマイザ132を図7Cに示されるデータフローグラフ262に適用する。最適化の様々な中間段階が図7D及び図7Eに示されている。オプティマイザ132は、仕様252若しくは論理データ94、又はその両方を分析して、仕様252において使用されるフィールドを識別し、次に、それらのフィールドを含むデータセットを識別する。オプティマイザ132は、データフローグラフ262から、仕様252によって使用又は参照されないデータセットを除去する。オプティマイザ132はまた、必要に応じてグラフにパーティションコンポーネントを追加することを担うことができる。いくつかの例では、オプティマイザ132は、ルール仕様252において指定され、論理データ94に含まれるデータセット及びフィールドのみがアクセスされるように、選択ステートメントを最小限に抑えることによってこれを行う。図7Dに示されるように、オプティマイザ132は、データフローグラフ262からコンポーネント262a、262s、262c、262f、262i、262v、及び262hを除去する(それにより、時間T2においてデータフローグラフ264を作り出す)。これは、コンポーネント262aがデータセット「オファー状況」を表し、そのフィールド「オファー受入」が、仕様252によって参照又は使用されないためである。同様に、コンポーネント262cは、データセット「リロード日」を表し、そのフィールド「最終リロード」は、仕様によって参照又は使用されない。これらの入力ソース(すなわち、コンポーネント262a及び262iによって表されるもの)を除去することにより、残りのコンポーネントを不要なもの(「デッドコンポーネント」と称されることもある)として描写し、したがって、これらのコンポーネント(すなわち、262s、262c、262v、262h)も除去することができる。
オプティマイザ132はまた、コンポーネント262kによって指定された結合動作の前にフィルタコンポーネント262o及び262pを移動させる更なる最適化を実行し、それによって、図7Eに示されるように、時間T3においてデータフローグラフ266を作り出す。そうすることによって、フィルタ動作が結合動作の前に実行されて、結合される必要のあるデータの量を低減するため、オプティマイザ122は、より高速で、より効率的で、より少ない計算リソースを使用するデータフローグラフを作り出す。フィルタ動作が結合動作の後に実行される場合、システムが最終的にフィルタ除去されるデータを結合しなければならないため、より多くの組成リソースが使用される。最適化の結果は、データフローグラフ268である。
概して、オプティマイザ132は、データフローグラフにおいて指定された動作のうちの1つ以上に従ってデータを処理するために必要とされ得る最適化若しくは他の変換を実行するか、又は最適化若しくは変換、又はその両方を伴わずにデータを処理することと比較して、データフローグラフにおいて指定された動作のうちの1つ以上に従ってデータを処理することを改善する。例えば、オプティマイザは、データフローグラフ262の所望の機能を有する変換されたデータフローグラフ268を作り出すために、とりわけ、1つ以上のソート動作、データタイプ動作、データフローグラフにおいて指定されたキーに基づく結合動作を含む結合動作、パーティション動作、自動並列処理動作、又はメタデータを指定する動作を追加する。いくつかの実装形態では、変換されたデータフローグラフ268sは、最適化を適用する前の変換されたデータフローグラフの計算効率と比較して、変換されたデータフローグラフの計算効率を改善するために、1つ以上のデータフローグラフ最適化ルールを変換されたデータフローグラフに適用することによって最適化されたデータフローグラフである(又は最適化されたデータフローグラフに変換される)。データフローグラフ最適化ルールは、例えば、「Editor for Generating Computational Graphs」と題された米国特許出願第62/966,768号に記載されるように、とりわけ、デッドコンポーネント又は冗長コンポーネントの削除、早期フィルタリング、又はレコードの絞り込みを含むことができ、その全容は参照により本明細書に組み込まれる。
本明細書に記載の技術は、開発環境を使用してユーザ(例えば、ビジネスユーザ)の生産性を改善し、最適化されたデータ処理を可能にするために、データセット間の関係についての情報を使用する。ユーザ(例えば、技術ユーザ)は、初期に、開発環境に公開する論理データを(例えば、ルートノードとして使用するためにデータセットを選択するか、又は仮想フィールドを定義することによって)定義する必要があり得るが、ビジネスユーザは、公開された論理データから自身の計算論理を柔軟に開発する権限を与えられ、その論理に基づいて、最適化された様式で論理を実行するために、多種多様なデータフローグラフを生成することができる。
本明細書に記載される技術は、ユーザが、記憶システムに記憶されたデータセットの複雑なセットから、迅速かつ強力に、論理データを開発環境に公開する権能を与えるものである。いくつかの例では、技術ユーザは、作業に関心がある一組のデータセットを選択し、これらのデータセットの全ての中からスキーマ定義が発見されるか、さもなければ取得される。例えば、スキーマは、データベース内にあるこれらのデータセットからエクスポートされ、データ発見、セマンティック発見、若しくは他の機械学習を使用して、又は技術ユーザからの追加の入力を受信することによって、又はそれらの組み合わせによって発見することができる。いくつかの例では、技術ユーザは、他のデータ要素の中からのアグリゲーションなど、追加の計算フィールド又は仮想フィールドをスキーマ内に生成することができる。いくつかの例では、技術ユーザは、論理データのルートノード又はパースペクティブを選択することができる。
次いで、開発環境において動作するビジネスユーザは、論理データ(実際の物理データ要素又は技術ユーザが定義した論理データ要素に対応し得る)に含まれる属性のいずれかを使用して、自分のビジネスニーズに適用可能な計算論理を開発することができる。いくつかの例では、ビジネスユーザは、出力を視認し、開発環境で書いた論理(例えば、ルール)をテストすることができる。
ビジネスユーザが、自分が開発した(及び任意選択的にテストされた)計算論理に満足すると、最適化されたデータフローグラフは、そのデータフローグラフに必要とされるデータセットのみを処理するグラフジェネレータによって生成することができる。例えば、ビジネスユーザは、計算論理を開発するときに、不要であることが判明した多数のデータセットにアクセスし得る。グラフジェネレータ及びオプティマイザが論理データからのデータセットについて詳細な情報を有するため、データセットが生成するデータフローグラフは、劇的に最適化することができる。
最適化されたデータフローグラフが生成されると、最適化されたデータフローグラフは、例えば、データ処理システムによって実行することができる。いくつかの例では、データフローグラフは、2つの異なるモード、すなわち、バッチ又はリアルタイムで実行することができる。いくつかの例では、ビジネスユーザが異なるセットのデータに依存する異なるセットのルールに関心があった場合、ビジネスユーザは、所望のデータフローグラフを生成することができ、そのデータフローグラフも、技術ユーザが関与する必要なく最適化することができる。
図8は、論理データを作り出し、論理データを使用してコンピュータプログラムを生成するための例示的なプロセス800のフローチャートを例示している。プロセス800は、図1~図7を参照して記載された技術を実装するように構成されたコンピューティングシステムのうちの1つ以上を含む、本明細書に記載のシステム及びコンポーネントのうちの1つ以上によって実装することができる。
プロセス800の動作は、スキーマにおいて表されるデータセット間の関係を指定するスキーマ、1つ以上のデータセットに対する1つ以上の計算、又は1つ以上のデータセットに対する1つ以上の変換にアクセスすること(802)を含む。例では、スキーマは、データベーススキーマである。例では、データセットのうちの1つ以上に対する1つ以上の計算又はデータセットの1つ以上の1つ以上の変換は、複数のデータセットのうちの少なくとも1つの論理フィールド、仮想フィールド、又は計算フィールドを定義する。
記憶装置内のデータセットの中からの複数のデータセットは、データセットの中からデータセットを選択することと、スキーマから、選択されたデータセットに関連する1つ以上の他のデータセットを識別することと、によって識別される(802)。例では、選択されたデータセットは、論理データのルートノードであり、1つ以上の他のデータセットのうちの少なくとも1つは、選択されたデータセットに結合される。例では、選択されたデータセットを指定する選択データは、クライアントデバイスから受信される。例では、選択されたデータセットと1つ以上の他のデータセットとを結合するための、1つ以上のキーなどの1つ以上のパラメータが、スキーマから識別される。
複数のデータセットの属性が識別される(806)。例では、1つ以上の属性は、複数のデータセットのフィールド名を含む。例では、1つ以上の属性は、複数のデータセットにアクセスするための情報を含む。複数のデータセットの識別された属性を表し、属性間の1つ以上の関係を更に表す論理データが生成される(808)。
論理データは、開発環境に提供される(810)。開発環境は、複数のデータセットの識別された属性を表す論理データのうちの1つ以上の部分へのアクセスを提供する(812)。例では、開発環境は、複数のデータセットに記憶装置からアクセスすることなく、論理データのうちの1つ以上の部分へのアクセスを提供する。例では、開発環境は、論理データをデータソースとして読み取る。
動作を実行するときに、識別された属性のうちの少なくとも1つを指定する仕様が、開発環境から受信される(814)。仕様と、論理データによって表される識別された属性間の1つ以上の関係に基づいて、複数からの少なくとも1つのデータセットに記憶装置からアクセスすることによって動作を実行するように構成されているコンピュータプログラムが生成され(816)、アクセスされた少なくとも1つのデータセットが、仕様において指定された属性のうちの少なくとも1つを有する。例では、コンピュータプログラムは、記憶装置からアクセスされた少なくとも1つのデータセットを使用して実行される。例では、動作は、仕様において指定された属性のうちの少なくとも1つを含む複数のデータセットから1つのデータセットを識別することと、識別されたデータセットに記憶装置からアクセスすることと、を含む。
例では、コンピュータプログラムは、仕様において指定された属性のうちの少なくとも1つを有する複数のデータセット内のデータセットのみに記憶装置からアクセスすることによって動作を実行するように構成されている最適化されたコンピュータプログラムを作り出すように最適化される。例では、仕様において指定された属性のうちの少なくとも1つを含まない複数のデータセット内の少なくとも1つのデータセットに記憶装置からアクセスする動作は、コンピュータプログラムから除去される。例では、コンピュータプログラムは、選択ステートメントによって複数からの少なくともいくつかのデータに記憶装置からアクセスするように構成され、選択ステートメントは、仕様において指定された属性のうちの少なくとも1つのみを選択するように最小化される。例では、動作は、仕様と、論理データによって表される識別された属性間の1つ以上の関係に基づいて、動作を実行するように構成されている実行可能なデータフローグラフを生成することを含み、実行可能なデータフローグラフは、1つ以上の属性のうちの少なくとも1つを入力として含む。
本明細書に記載の主題及び動作の実装形態は、本明細書に開示された構造及びそれらの構造的等価物を含むデジタル電子回路、又はコンピュータソフトウェア、ファームウェア、若しくはハードウェア、又はそれらのうちの1つ以上の組み合わせで実装することができる。本明細書に記載の主題の実装形態は、1つ以上のコンピュータプログラム(データ処理プログラムとも称される)(すなわち、データ処理装置によって実行するために、又はデータ処理装置の動作を制御するためにコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の1つ以上のモジュール)として実装することができる。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムアクセス若しくはシリアルアクセスメモリアレイ若しくはデバイス、又はそれらのうちの1つ以上の組み合わせであってもよく、又はそれらに含まれてもよい。コンピュータ記憶媒体はまた、1つ以上の別個の物理的コンポーネント又は媒体(例えば、複数のCD、ディスク、又は他の記憶デバイス)であってもよく、又はそれらに含まれてもよい。本主題は、非一時的コンピュータ記憶媒体に記憶されたコンピュータプログラム命令に実装され得る。
本明細書に記載の動作は、1つ以上のコンピュータ可読記憶デバイス上に記憶された、又は他のソースから受信されたデータに対してデータ処理装置によって実行される動作として実装することができる。
「データ処理装置」という用語は、データを処理するためのあらゆる種類の装置、デバイス、及びマシンを包含し、例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又は前述のものの複数のもの、又は組み合わせを含む。装置は、専用論理回路(例えばFPGA(Field Programmable Gate array、フィールドプログラマブルゲートアレイ)又はASIC(Application Specific Integrated Circuit、特定用途向け集積回路)を含むことができる。装置はまた、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を提供するコード(例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、又はそれらのうちの1つ以上の組み合わせを構成するコード)を含むことができる。装置及び実行環境は、ウェブサービス、分散コンピューティング、及びグリッドコンピューティングインフラストラクチャなどの様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとしても知られている)は、コンパイル言語若しくはインタープリタ言語、宣言型言語若しくは手続き型言語を含む任意の形式のプログラミング言語で書くことができ、スタンドアロンプログラムとして、又はモジュール、コンポーネント、サブルーチン、オブジェクト、若しくはコンピューティング環境での使用に好適な他のユニットとして含む、任意の形態で展開することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、対応する必要がない場合がある。プログラムは、他のプログラム又はデータ(例えば、マークアップ言語文書に記憶された1つ以上のスクリプト)を保持するファイルの一部分、問題のプログラム専用の単一のファイル、又は複数の協調ファイル(例えば、1つ以上のモジュール、サブプログラム、又はコードの一部分を記憶するファイル)に記憶することができる。コンピュータプログラムは、1つのコンピュータ上で、又は1つのサイトに位置するか、又は複数のサイトに分散され、通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することができる。
本明細書に記載のプロセス及び論理フローは、入力データに対して動作し、出力を生成することによってアクションを実行するために、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行することができる。プロセス及び論理フローはまた、専用論理回路(例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって実行することができ、装置は専用論理回路として実装することができる。
コンピュータプログラムの実行に好適なプロセッサは、例として、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、並びに任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサを含む。概して、プロセッサは、リードオンリーメモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信するであろう。コンピュータの必須要素は、命令に従ってアクションを実行するためのプロセッサと、命令及びデータを記憶するための1つ以上のメモリデバイスとを含む。一般に、コンピュータはまた、データを記憶するための1つ以上の大容量記憶デバイス(例えば、磁気ディスク、光磁気ディスク、又は光ディスク)を含むか、それらからデータを受信するか、それらにデータを転送するか、又はその両方を行うように動作可能に結合することになるが、コンピュータは、そのようなデバイスを有する必要はない。更に、コンピュータは、別のデバイス(例えば、携帯電話、携帯情報端末(Personal Digital Assistant、PDA)、モバイルオーディオ若しくはビデオプレーヤ、ゲームコンソール、全地球測位システム(Global Positioning System、GPS)受信機、又は携帯型記憶デバイス(例えば、ユニバーサルシリアルバス(Universal Serial Bus、USB)フラッシュドライブ))に組み込むことができる。コンピュータプログラム命令及びデータを記憶するのに好適なデバイスは、例として、半導体メモリデバイス(例えば、EPROM、EEPROM、及びフラッシュメモリデバイス)、磁気ディスク(例えば、内蔵ハードディスク又はリムーバブルディスク)、光磁気ディスク、並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリ、媒体及びメモリデバイスを含む。プロセッサ及びメモリは、専用論理回路によって補完され得るか、又は専用論理回路に組み込まれ得る。
本明細書に記載の主題の実装形態は、バックエンドコンポーネント(例えば、データサーバとして)を含むか、又はミドルウェアコンポーネント(例えば、アプリケーションサーバ)を含むか、又はフロントエンドコンポーネント(例えば、ユーザが本明細書に記載の主題の実装形態と対話することができるグラフィカルユーザインターフェース又はWebブラウザを有するユーザコンピュータ)、又は1つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネント、若しくはフロントエンドコンポーネントの任意の組み合わせを含む、コンピューティングシステムに実装することができる。システムのコンポーネントは、デジタルデータ通信(例えば、通信ネットワーク)の任意の形態又は媒体によって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(Local Area Network、LAN)及びワイドエリアネットワーク(Wide Area Network、WAN)、インターネットワーク(例えば、インターネット)、及びピアツーピアネットワーク(例えば、アドホックピアツーピアネットワーク)が含まれる。
コンピューティングシステムは、ユーザ及びサーバを含むことができる。ユーザ及びサーバは、一般に、互いに遠隔であり、典型的には、通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じ得る。いくつかの実装形態では、サーバは、データ(例えば、HTMLページ)をユーザデバイスに送信する(例えば、ユーザデバイスと対話するユーザにデータを表示し、ユーザデバイスと対話するユーザからユーザ入力を受信する目的で)。ユーザデバイスにおいて生成されたデータ(例えば、ユーザ対話の結果)は、サーバにおいてユーザデバイスから受信することができる。
本明細書は多くの特定の実装形態の詳細を含むが、これらは、任意の実装形態又は特許請求され得るものの範囲に対する限定として解釈されるべきではなく、特定の実装形態に特有の特徴の記載として解釈されるべきである。別個の実施態様の文脈において本明細書に記載されるある特定の特徴はまた、単一の実装形態において組み合わせて実装することができる。逆に、単一の実施態様の文脈において記載される様々な特徴はまた、複数の実装形態において別々に、又は任意の好適な二次組み合わせにおいて実装することができる。更に、特徴は、ある特定の組み合わせにおいて作用するものして上述され、初めにそのように特許請求され得るが、特許請求される組み合わせからの1つ以上の特徴は、場合によっては、組み合わせから切除することができ、特許請求される組み合わせは、二次組み合わせ又は二次組み合わせの変形を対象とし得る。
同様に、動作は、特定の順序で図面に描かれているが、望ましい結果を達成するために、そのような動作が示された特定の順序で又は連続した順序で実行されるか、又は全ての例示された動作が実行されることを必要とするものとして理解されるべきではない。ある特定の状況では、マルチタスク処理及び並列処理が有利であり得る。更に、上記の実装態様における様々なシステムコンポーネントの分離は、全ての実装形態においてそのような分離を必要とするものとして理解されるべきではなく、記載されたプログラムコンポーネント及びシステムは、一般に単一のソフトウェア製品に共に統合されるか、又は複数のソフトウェア製品にパッケージ化され得ることを理解されたい。
他の実装形態は、以下の特許請求の範囲の範囲内である。