(57)【要約】【課題】リアルタイムデータストリームに対して実行するためのクエリを選択するための方法を提案する。【解決手段】この方法は、２つ以上のデータ項目が２つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる状態で、ストリーム内の様々な場所に位置するデータ項目の２つ以上に対するクエリを１つ又は複数のコンピュータシステムによって時々実行すること、クエリの実行結果を示す情報を生成すること、クエリが実行され続けるとき、ほぼリアルタイムのデータストリーム内で前に登場したデータ項目に対してクエリを実行した過去の結果とその結果を集約することによってクエリ実行の中間結果を生成すること、及びクエリの実行が完了する前にクエリ実行の中間結果を１つ又は複数のクライアント装置に伝送することを含む。【選択図】図２
2018528506.tif 000002
【特許請求の範囲】
【請求項１】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するためのコンピュータによって実装される方法であって、
前記ストリーム内の様々な場所に位置する前記データ項目の２つ以上に対する前記クエリを１つ又は複数のコンピュータシステムによって時々実行すること、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を１つ又は複数のクライアント装置に伝送すること
を含む、コンピュータによって実装される方法。
【請求項２】
その後の時点において、前記中間結果を前記その後の時点における前記クエリの実行結果と集約して最終結果を生成すること
を更に含む、請求項１に記載のコンピュータによって実装される方法。
【請求項３】
前記最終結果を記憶し、前記中間結果を破棄すること
を更に含む、請求項１乃至２の何れか一項に記載のコンピュータによって実装される方法。
【請求項４】
前記クエリを時々実行することが、
（ｉ）前記データストリーム内の１つ又は複数の第１のデータ項目であって、前記ストリームの第１の部分に位置する、１つ又は複数の第１のデータ項目と、（ｉｉ）前記データストリーム内の１つ又は複数の第２のデータ項目であって、前記ストリームの第２の部分に位置する、１つ又は複数の第２のデータ項目とに前記クエリを実行すること
を含む、請求項１乃至３の何れか一項に記載のコンピュータによって実装される方法。
【請求項５】
前記クエリを実行することが、
前記クエリを表すデータフローグラフを周期的に実行することを含み、前記データフローグラフは前記クエリを実装するための実行可能コンピュータコードを含み、前記クエリに関するクエリ仕様を入力として受信する、請求項１乃至４の何れか一項に記載のコンピュータによって実装される方法。
【請求項６】
前記データフローグラフが前記第１のクエリを実行する際に行われる操作を表す成分を含み、前記方法が
或る成分に関して、
前記成分のローカル状態を保存するチェックポイント操作を実行して前記データフローグラフの状態の回復性を有効にすること
を更に含む、請求項５に記載のコンピュータによって実装される方法。
【請求項７】
前記クエリが或る期間中に前記データストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知である、請求項１乃至６の何れか一項に記載のコンピュータによって実装される方法。
【請求項８】
前記クエリが実行される前記ストリーム内のデータ項目の量は前記クエリの実行開始時には未知である、請求項１乃至７の何れか一項に記載のコンピュータによって実装される方法。
【請求項９】
前記集約済みの結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスすること、
前記集約済みの結果に対して前記ユーザ定義カスタム操作を実行すること、及び
前記ユーザ定義カスタム操作に従って前記集約済みの結果を変換すること
を更に含む、請求項７又は８に記載のコンピュータによって実装される方法。
【請求項１０】
既定条件の検出を利用者に知らせるためのほぼリアルタイムの警告を前記集約済みの結果に基づいて生成すること
を更に含む、請求項１乃至９の何れか一項に記載のコンピュータによって実装される方法。
【請求項１１】
前記データストリームは、データ項目が（ｉ）様々な時点において周期的に受信される、又は（ｉｉ）様々な時点において継続的に受信されるデータストリームを含む、請求項１乃至１０の何れか一項に記載のコンピュータによって実装される方法。
【請求項１２】
前記データストリームをデータ待ち行列、データリポジトリ、又はデータフィードから受信することを更に含む、請求項１乃至１１の何れか一項に記載のコンピュータによって実装される方法。
【請求項１３】
前記クエリが第１のクエリであり、前記方法が
前記ストリーム内の様々な位置に登場する前記データ項目の２つ以上に対して実行するための第２のクエリを選択すること、及び
前記ストリームの前記データ項目に対して前記第１のクエリ及び前記第２のクエリをほぼリアルタイムで実行すること
を更に含む、請求項１乃至１２の何れか一項に記載のコンピュータによって実装される方法。
【請求項１４】
表示装置上でレンダリングされるとき、
前記データストリームに対して実行されるクエリを定める情報を入力するための入力フィールド
を含むユーザインタフェース用の情報を生成すること
を更に含む、請求項１乃至１３の何れか一項に記載のコンピュータによって実装される方法。
【請求項１５】
前記データストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスすること
を更に含む、請求項１乃至１４の何れか一項に記載のコンピュータによって実装される方法。
【請求項１６】
前記データがほぼリアルタイムのデータであり、前記中間結果がほぼリアルタイムの中間結果であり、前記２つ以上のデータ項目が前記２つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる、請求項１乃至１５の何れか一項に記載のコンピュータによって実装される方法。
【請求項１７】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するためのシステムであって、
１つ又は複数の処理装置と、
前記ストリーム内の様々な場所に位置する前記データ項目の２つ以上に対する前記クエリを１つ又は複数のコンピュータシステムによって時々実行すること、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
ほぼリアルタイムの前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を１つ又は複数のクライアント装置に伝送すること
を含む操作を実行するために前記１つ又は複数の処理装置によって実行可能な命令を記憶する１つ又は複数の機械可読ハードウェア記憶装置と
を含む、システム。
【請求項１８】
前記操作が、
その後の時点において、前記中間結果を前記その後の時点における前記クエリの実行結果と集約して最終結果を生成すること
を更に含む、請求項１７に記載のシステム。
【請求項１９】
前記操作が、
前記最終結果を記憶し、前記中間結果を破棄すること
を更に含む、請求項１８に記載のシステム。
【請求項２０】
前記クエリを時々実行することが、
（ｉ）前記データストリーム内の１つ又は複数の第１のデータ項目であって、前記ストリームの第１の部分に位置する、１つ又は複数の第１のデータ項目と、（ｉｉ）前記データストリーム内の１つ又は複数の第２のデータ項目であって、前記ストリームの第２の部分に位置する、１つ又は複数の第２のデータ項目とに前記クエリを実行すること
を含む、請求項１７乃至１９の何れか一項に記載のシステム。
【請求項２１】
データ記憶域を更に含み、
前記クエリを実行することが、
前記クエリに関連するグラフベースの計算を実装するデータフローグラフを実行することを含み、前記グラフベースの計算は前記クエリを実装するための実行可能コンピュータコードを含み、
前記データフローグラフは前記データ記憶域内のデータ構造によって規定され、前記データ構造によって規定され且つ１つ又は複数のリンクによって接続されるデータ処理グラフ成分を表す複数の頂点を有し、前記リンクは前記データ構造によって規定され、前記グラフ成分間のデータフローを表し、
前記データフローグラフは前記クエリに関するクエリ仕様を入力として受信し、前記グラフベースの計算は、１つ又は複数の入力データセットから前記データ処理グラフ成分の前記データフローグラフを介して１つ又は複数の出力データセットに流れる前記データストリームに対して実行される、
請求項１７乃至２０の何れか一項に記載のシステム。
【請求項２２】
前記データ記憶域に結合され、前記１つ又は複数の処理装置上にホストされるランタイム環境であって、前記データフローグラフを規定する前記記憶済みのデータ構造を読み取り、実行時前モジュールによって前記データフローグラフに指定される前記グラフ成分の前記計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び
前記指定された計算の実行をスケジュールし管理するための実行モジュールを含む、ランタイム環境
を更に含む、請求項２１に記載のシステム。
【請求項２３】
前記データフローグラフが前記第１のクエリを実行する際に行われる操作を表す成分を含み、前記操作が
或る成分に関して、
前記成分のローカル状態を保存するチェックポイント操作を実行して前記データフローグラフの状態の回復性を有効にすること
を更に含む、請求項２１又は２２に記載のシステム。
【請求項２４】
前記クエリが或る期間中に前記データストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知である、請求項１７乃至２３の何れか一項に記載のシステム。
【請求項２５】
前記クエリが実行される前記ストリーム内のデータ項目の量は前記クエリの実行開始時には未知である、請求項１７乃至２４の何れか一項に記載のシステム。
【請求項２６】
前記データがほぼリアルタイムのデータであり、前記中間結果がほぼリアルタイムの中間結果であり、前記２つ以上のデータ項目が前記２つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる、請求項１７乃至２５の何れか一項に記載のシステム。
【請求項２７】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するための１つ又は複数の機械可読ハードウェア記憶域であって、
前記ストリーム内の様々な場所に位置する前記データ項目の２つ以上に対する前記クエリを１つ又は複数のコンピュータシステムによって時々実行すること、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を１つ又は複数のクライアント装置に伝送すること
を含む操作を実行するために１つ又は複数の処理装置によって実行可能な命令を記憶する、１つ又は複数の機械可読ハードウェア記憶域。
【請求項２８】
データ記憶域と、
前記データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、前記グラフベースの計算は前記複数のクエリを実装するための実行可能コンピュータコードを含み、１つ又は複数の入力データセットから処理グラフ成分のグラフを介して１つ又は複数の出力データセットに流れるデータに対して実行され、前記データフローグラフは前記データ記憶域内のデータ構造によって規定され、前記データ構造によって規定され且つ１つ又は複数のリンクによって接続される前記グラフ成分を表す複数の頂点を有し、前記リンクは前記データ構造によって規定され、前記グラフ成分間のデータフローを表す、計算環境と、
前記グラフベースの計算を実行するために１台又は複数台のコンピュータ上にホストされ、前記データ記憶域に結合されるランタイム環境であって、
前記データフローグラフを規定する前記記憶済みのデータ構造を読み取り、実行時前モジュールによって前記データフローグラフに指定される前記グラフ成分の前記計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び
前記指定された計算の実行をスケジュールし管理するための実行モジュールであって、それにより
正規化成分が前記ファイルを複数の作業単位に分けるように構成され、
分割成分が前記作業単位のそれぞれに適用されるように構成され、前記作業単位のそれぞれに前記分割成分を前記適用することは、前記作業単位のそれぞれについてマイクログラフ実行成分の複数の異なるインスタンスにわたって前記複数のクエリを分割することを含み、前記インスタンスのそれぞれは前記作業単位内の前記データに対して実行可能な前記クエリの１つに対応し、
前記マイクログラフ実行成分の前記インスタンスの前記対応するそれぞれのインスタンスによって前記クエリのそれぞれを前記データに対して実行するために、再フォーマット成分が前記作業単位のそれぞれの中の前記データを再フォーマットするように構成され、
前記作業単位のそれぞれについて前記マイクログラフ実行成分の前記インスタンスを実行した後、収集成分が前記作業単位に関する部分結果を生成するように構成され、前記部分結果は前記作業単位内の前記データに対して前記クエリの一部又は全てを実行した結果を含み、
マイクログラフ実行成分が、前記複数のクエリのそれぞれについて、前記部分結果に基づき前記ファイルの全ての前記作業単位に対する前記クエリの総和を計算するように構成される、実行モジュール
を含む、ランタイム環境と
を含む、システム。
【請求項２９】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
再フォーマット成分の複数の異なるインスタンス及び前記マイクログラフ実行成分の前記複数の異なるインスタンスを前記作業単位のそれぞれについて生成することを更に含み、前記再フォーマット成分の前記インスタンスのそれぞれは前記マイクログラフ実行成分の前記インスタンスの１つにリンクされ関連し、前記マイクログラフ実行成分の前記関連インスタンスにおいて前記データが処理される前に、前記作業単位内の前記データを再フォーマットするように構成される、請求項２８に記載のシステム。
【請求項３０】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
前記作業単位内の前記データの属性を決定することを含む前記作業単位を前処理すること、及び
前記決定した属性に基づいて前記インスタンス及び対応するクエリを選択すること
を更に含む、請求項２８又は２９に記載のシステム。
【請求項３１】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
前記インスタンスを前記作業単位に前記割り当てる前に前処理を行うことを更に含み、前記前処理は、前記それぞれのインスタンスに対応する前記クエリのそれぞれを前記実行するのに必要である可能性が高い前記計算資源を明らかにすること、及び前記クエリのそれぞれを実行するための前記明らかにされた計算資源の需要に従って前記インスタンス間で計算資源を分散させることを含む、
請求項２８乃至３０の何れか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本願は、データストリーム、とりわけリアルタイムデータストリームに対して実行するためのクエリを選択するためのコンピュータシステム、方法、及び機械可読ハードウェア記憶域に関する。とりわけ実装形態は、データ源の分散ネットワークから生じ得るデータストリームに対して実行される複数のアクティブクエリを実装するデータフローグラフベースの計算に関する。
【背景技術】
【０００２】
背景
多くのネットワーク化されたデータ処理システムは意思決定のために重要情報への適時のアクセスを必要とする。かかる要件を満たすための従来の手法は、データウェアハウス、データマート、及びレポーティングアプリケーションを構築することである。これらの手法は、パターン又は条件を検索しながら連続して到着するデータストリームをモニタすることができないので、不正検出、サービスモニタリング、ゲーム、リアルタイムトレンディング等、真にリアルタイムのアプリケーションのための厳格なサービスレベル合意書（ＳＬＡ）の要件を満たすことができなかった。
【０００３】
加えて、データベース及び構造化照会言語（ＳＱＬ）はデータの到着を待つための構成体を有さない。ＳＱＬは、クエリが始動されるとき、リポジトリ内にある履歴データに作用する。データウェアハウス内に記憶される履歴データのこの処理は多くの待ち時間要件を満たせないことが多々あり、その理由はデータウェアハウス内のデータを集め、クレンジングし、統合する（ＥＴＬ−抽出・変換・ロードとして一般に知られている）のに時間がかかるからであり、且つウェアハウスに入ったデータを処理するためのクエリを開始するのにも時間がかかるからである。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
一実装形態では、クエリが実行されているとき、クエリの（例えばほぼリアルタイムの）中間結果を与えるために（例えばほぼリアルタイムの）データストリーム内の様々な場所に位置するデータ項目に対してクエリを実行するためのコンピュータによって実装される方法が、任意選択的に２つ以上のデータ項目が２つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる状態で、ストリーム内の様々な場所に位置するデータ項目の２つ以上に対するクエリを１つ又は複数のコンピュータシステムによって時々（例えば周期的に）実行すること、クエリの実行結果を示す情報を生成すること、クエリが実行され続けるとき、（例えばほぼリアルタイムの）データストリーム内で前に登場したデータ項目に対してクエリを実行した過去の結果とその結果を集約することによってクエリ実行の中間結果を生成すること、及びクエリの実行が完了する前にクエリ実行の中間結果を１つ又は複数のクライアント装置に伝送することを含む。動作中にシステムに特定の操作又は動作を実行させるソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せをシステム上にインストールすることにより、それらの動作を実行するように１台又は複数台のコンピュータのシステムを構成することができる。データ処理機器によって実行されるとき機器に特定の操作又は動作を実行させる命令を含めることにより、それらの動作を実行するように１つ又は複数のコンピュータプログラムを構成することができる。
【０００５】
動作は、その後の時点において、中間結果をその後の時点におけるクエリの実行結果と集約して最終結果を生成することを含む。動作は、最終結果を記憶し、中間結果を破棄することも含む。クエリを時々実行することは、（ｉ）（例えばほぼリアルタイムの）データストリーム内の１つ又は複数の第１のデータ項目であって、ストリームの第１の部分に位置する、１つ又は複数の第１のデータ項目と、（ｉｉ）（例えばほぼリアルタイムの）データストリーム内の１つ又は複数の第２のデータ項目であって、ストリームの第２の部分に位置する、１つ又は複数の第２のデータ項目とにクエリを実行することを含む。クエリを実行することは、クエリを表すデータフローグラフを周期的に実行することを含み、データフローグラフはクエリを実装するための実行可能コンピュータコードを含み、クエリに関するクエリ仕様を入力として受信する。データフローグラフは、第１のクエリを実行する際に行われる操作を表す成分を含み、この方法は、或る成分に関して、その成分のローカル状態を保存するチェックポイント操作を実行してデータフローグラフの状態の回復性を有効にすることを更に含む。クエリは、或る期間中にほぼリアルタイムのデータストリーム内に登場するデータ項目に対して実行され、その期間の終わりはクエリの実行開始時には未知である。クエリが実行されるストリーム内のデータ項目の量はクエリの実行開始時には未知である。
【０００６】
動作は、集約済みの結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスすること、集約済みの結果に対してユーザ定義カスタム操作を実行すること、及びユーザ定義カスタム操作に従って集約済みの結果を変換することを含む。動作は、既定条件の検出を利用者に知らせるためのほぼリアルタイムの警告を集約済みの結果に基づいて生成することを含む。ほぼリアルタイムのデータストリームは、データ項目が（ｉ）様々な時点において周期的に受信される、又は（ｉｉ）様々な時点において継続的に受信されるデータストリームを含む。動作は、ほぼリアルタイムのデータストリームをデータ待ち行列、データリポジトリ、又はデータフィードから受信することを含む。クエリは第１のクエリであり、この方法は、ストリーム内の様々な位置に登場するデータ項目の２つ以上に対して実行するための第２のクエリを選択すること、及びストリームのデータ項目に対して第１のクエリ及び第２のクエリを（例えばほぼリアルタイムで）実行することを更に含む。動作は、表示装置上でレンダリングされるとき、ほぼリアルタイムのデータストリームに対して実行されるクエリを定義する情報を入力するための入力フィールドを含む、ユーザインタフェースのための情報を生成することを含む。動作は、ほぼリアルタイムのデータストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスすることを含む。
【０００７】
上記の内容の全て又は一部は、ハードドライブ、ダイナミックランダムアクセスメモリ等のランダムアクセスメモリ記憶装置、機械可読ハードウェア記憶装置、及び他の種類の非一時的機械可読記憶装置である、１つ若しくは複数の非一時的機械可読記憶媒体及び／又は１つ若しくは複数のコンピュータ可読ハードウェア記憶装置上に記憶され、１つ又は複数の処理装置上で実行可能な命令を含むコンピュータプログラム製品として実装することができる。上記の内容の全て又は一部は、１つ又は複数の処理装置及び述べた機能を実装するための実行可能命令を記憶するためのメモリを含み得る機器、方法、又は電子システムとして実装することができる。
【０００８】
大規模なコンピュータネットワークはネットワーク内に分散する様々な情報源（例えば世界中に分散するデータ源）から大量のデータを潜在的に集めることができるが、かかるネットワークは、とりわけデータが継続的に到着するデータストリームを含む場合、集めたデータを抽出し、変換し、ロードする課題に関して言えば待ち時間に悩まされる。かかる分散ネットワークは、ロジスティックネットワーク（例えば空港、鉄道の駅、港、又は他のロジスティックセンタ）、セキュリティ関連ネットワーク（例えばクレジットカード情報の処理、バンキング、又は他の認証システム）、又は産業プロセスを実行する機械のネットワークであり得る。本明細書に記載する実施形態は、データに対して実行される計算の信頼性及び／又は安全性も維持しながら、大量のデータを非常に高速に（例えばリアルタイム／ほぼリアルタイムで）処理することを可能にする。これらの実施形態の脈絡で記載する手法は、データ量、データの発生元である基礎を成すネットワークの大きさ、及びデータストリームに対して実行されるアクティブクエリの量／多様性に関して柔軟なやり方で拡張可能である。
【０００９】
１つ又は複数の実施形態の詳細を添付図面及び以下の説明に記載する。本明細書に記載の技法の他の特徴、目的、及び利点がこの説明、図面、及び添付の特許請求の範囲から明らかになる。
【００１０】
様々な図面内の同様の参照記号は同様の要素を示す。
【図面の簡単な説明】
【００１１】
【図１】データ処理システムのブロック図である。
【図２】データ処理の結果を集約することの概念図である。
【図３】データフローグラフの図である。
【図４】データフローグラフの図である。
【図５Ａ】データフローグラフの図である。
【図５Ｂ】データ処理の結果を集約することの概念図である。
【図６】流れ図である。
【図７】流れ図である。
【図８】データ処理の結果を集約することの概念図である。
【図９】複数のクエリのダイナミック実行の図である。
【図１０Ａ】主要素の相互関係を示す本発明の一実施形態のブロック図である。
【図１０Ｂ】データフローグラフのブロック図である。
【図１１】指定のランタイムパラメータを有する、ロールアップ成分及びソート成分２００４を有する典型的なグラフのブロック図である。
【図１２】グラフに関連付けられるランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【図１３】ランタイムパラメータを使用するプロセスを要約する流れ図である。
【図１４】key（キー）プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【図１５】filter（フィルタ）プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【図１６】rollup（ロールアップ）プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【図１７】reformat（再フォーマット）プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【図１８Ａ】MergeJoin（マージ結合）成分がファイルＡ及びファイルＢからのデータを結合し、結果を出力ファイルに出力する第１のグラフのブロック図である。
【図１８Ｂ】Rollup（ロールアップ）成分がファイルＡからのデータを集約し、結果を出力ファイルに出力する第２のグラフのブロック図である。
【図１８Ｃ】MergeJoin（マージ結合）成分がファイルＡ及びファイルＢからのデータを結合し、その結果生じるデータをRollup（ロールアップ）成分が集約し、最終結果を出力ファイルに出力するグラフのブロック図である。
【図１９】Condition-interpretation（条件解釈）コントロールを有する、条件を提示するグラフィカルダイヤログの一実施形態の図である。
【図２０】汚染が生じる状況を示すグラフの図である。
【図２１】Remove Completely（完全削除）条件付き成分を含むグラフのランタイム準備（runtime preparation）のプロセスを要約する流れ図である。
【図２２】本発明の特定の実施形態に関するReplace With Flow（フローで置換）条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。
【図２３】ランタイムパラメータなしのロールアップアプリケーションを表すグラフの図である。
【図２４】図２３のロールアップアプリケーションのランタイムパラメータ化バージョンを表すグラフの図である。
【図２５】図２４のアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【図２６Ａ】図２５のパラメータグリッド内の情報からウェブインタフェースによって生成されたフォームを表すグラフィカルダイヤログの一実施形態の図である。
【図２６Ｂ】利用者によってパラメータ値で埋められた図２６Ａのフォームの図である。
【図２７】ランタイムパラメータ化ロールアップ及び結合アプリケーションを表すグラフの図である。
【図２８】図２７のアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【図２９】図２８のパラメータグリッド内の情報からウェブインタフェースによって生成されたフォームを表すグラフィカルダイヤログの一実施形態の図である。
【図３０】ランタイムパラメータ化ロールアップ−結合−ソートアプリケーションを表すグラフの図である。
【図３１】図３０に示すアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【図３２Ａ】メタデータが伝搬されるグラフの図である。
【図３２Ｂ】図３２Ａのグラフ内の成分に関する下位グラフの図である。
【図３３】メタデータ伝搬プロセスの流れ図である。
【図３４Ａ】成分内及び成分間の依存関係を有するパラメータを含むグラフである。
【図３４Ｂ】図３４Ａ内のグラフのパラメータ間の依存関係を表す依存関係グラフである。
【図３４Ｃ】図３４Ａ内のグラフのパラメータ間の依存関係を表す依存関係グラフである。
【図３５】修正トポロジカルソートプロセスの図である。
【図３６】データフローグラフが実行されるシステムの構成例のブロック図である。
【図３７】マイクログラフを含む例示的なデータフローグラフの説明図である。
【図３８Ａ】例示的な専用成分の説明図である。
【図３８Ｂ】例示的なマイクログラフの説明図である。
【図３９】メモリ内の複数のマイクログラフを有する例示的な専用成分の説明図である。
【図４０Ａ】データフローを処理する複数のマイクログラフを有する例示的な専用成分の説明図である。
【図４０Ｂ】複数の専用成分を有する例示的なデータフローグラフの説明図である。
【図４１】前処理成分及び後処理成分を含む例示的な専用成分のブロック図である。
【図４２】それぞれ単一のデータベースと対話する複数のデータフロー成分の一例の説明図である。
【図４３】複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【図４４Ａ】複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【図４４Ｂ】共通のプロトコル層を使用して複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【図４５】データフローグラフがランタイム前にコンパイルされるシステムの構成例のブロック図である。
【発明を実施するための形態】
【００１２】
説明
本開示と合致するシステムは、リアルタイムトランザクショントラッカ（ＲＴＴＴ）を実装する。概して、ＲＴＴＴは長い（且つ未知の）期間にわたってデータストリームから情報を得るための操作（例えばクエリ）を実装するソフトウェアプログラムである。ＲＴＴＴは、リアルタイムアプリケーション内のクエリのアドホックモニタリングを可能にする。以下で更に説明するように、ＲＴＴＴは動的に追加される複数のクエリを実行することも支援し、部分結果の可視性ももたらす。本明細書で使用するとき、「リアルタイム」は、これだけに限定されないが、ほぼリアルタイム及び実質的にリアルタイムを含み、その何れについてもデータが受信され又はアクセスされるときとそのデータの処理が実際に行われるときとの間に時間のずれがあり得るが、データはデータが受信されるとき依然として実時間で（例えば継続的に又は周期的に）処理される。ＲＴＴＴを使用し、利用者はリアルタイムでデータストリームに対して（例えば同時に）行われる操作（例えばクエリ）を規定することができる。ＲＴＴＴは実行されるクエリの中間結果を生成し、実行されるクエリの新たなその後の結果で中間結果を（例えば周期的に）更新する。概して、中間結果はクエリの実行が完了する前に生じるクエリの実行結果を含む。ＲＴＴＴは、実行するための新たなクエリを（任意の時点において）（例えば周期的に）生成するための、及び／又はデータストリームに対して規定の操作（例えばクエリ）を（所望のやり方で、例えばリアルタイムで）システムによって行うことができるかどうかのフィードバックを利用者に与えるためのインタフェースも利用者に提供する。以下で更に説明するように、利用者はクエリを自在に停止し又は終了することもできる。
【００１３】
ＲＴＴＴは更に、クエリの結果だけを記憶し、データストリーム内で生じる個々の項目を破棄する。ＲＴＴＴにより、利用者はデータを周期的に且つ／又は継続的にモニタし、そのデータに対して頻繁に（リアルタイムで）作用して情報を得ることができる。
【００１４】
図１を参照し、データ処理環境１００（例えばランタイム環境）はＲＴＴＴ１０３を実装するためのシステム１０２を含む。ＲＴＴＴ１０３は、ソースデータを受信するためのソースデータリーダ１０６、クエリ１０７ａ．．．１０７ｎ及びクエリオブジェクト１１１ａ．．．１１１ｎを記憶するための管理リポジトリ１１２、クエリオブジェクト１１１ａ．．．１１１ｎのどれを実行するのかを決定するためのクエリドライバ又は実行モジュール１０８、ソースデータに対して（又はその一部に対して）クエリを実行するためのクエリワーカエンジン１１０ａ．．．１１０ｎを含む。ＲＴＴＴ１０３は、本明細書に記載の技法を使用して複数のクエリを実行することを支援する。以下の説明は「クエリ（a query）」又は「クエリ（the query）」に言及する場合がある。「a query」又は「the query」への言及は、単一のクエリへの付随的な説明を制限することなしに便宜上のものである。以下に記載する技法は複数のクエリに適用され得る。
【００１５】
概して、ソースデータは、システム１０２の外部のサードパーティデータ源（例えばシステム）から受信されるデータを含む。ソースデータは、ソースデータリーダ１０６が外部のシステムから受信するリアルタイムデータストリーム１０４（例えばほぼリアルタイムのデータストリーム）を含む。リアルタイムデータストリーム１０４は、例えばストリームが周期的に、断続的に、及び／又は継続的に受信されるとき、データ項目がストリーム内の様々な場所に位置するデータストリームを含む。例えば、一部のデータ項目はストリームの或る部分内に位置し、他のデータ項目はストリームのその後の別の部分内に位置する。リアルタイムデータストリーム１０４は、データ項目が（ｉ）様々な時点において周期的に受信される、又は（ｉｉ）様々な時点において継続的に受信されるデータストリームも含む。リアルタイムデータストリーム１０４は、例えばトランザクション（例えばロジスティックトランザクション、機械データトランザクション、デビットカードトランザクション、現金自動預払機（ＡＴＭ）トランザクション、クレジットカードトランザクション、チャージカードトランザクション、ストアドバリューカードトランザクション、ペイメントカードに関する国際トランザクション、ペイメントカードに関する国内トランザクション、人手による現金トランザクション等）を示すトランザクションログフィードデータを含む様々な種類のデータを含む。図１の例では、ファイル１０９がリアルタイムデータストリーム１０４内で受信される。この例では、ファイルは一種のソースデータである。概してファイルは１組のレコード（例えば２０万個のレコード）を含み、各レコードはデータ項目を表す。ファイル内のレコードは、例えばＲＴＴＴ１０３によって作業単位へと構成され得る。概して、作業単位とは処理されるデータの集まりである。例えば、作業単位は１組のレコード又はレコードの部分集合を表し得る。サードパーティデータ源からのソースデータの到着について、ソースデータリーダ１０６がシステム１０２内の複数のディレクトリ（不図示）を走査する。これらのディレクトリは、ソースデータを受信するためにシステム１０２内で予め構成される。ソースデータリーダ１０６は、リアルタイムデータストリーム１０４からデータを読み取る。ソースデータリーダ１０６は、このデータを単回読み取り、読み取ったそのデータを使用して多くのクエリ（例えばクエリ１０７ａ．．．１０７ｎ）にサービス提供する。この例では、システム１０２がリアルタイムデータストリーム１０４内で生じるデータ項目を（例えば永続的に）記憶するためのデータ記憶域を含まない。むしろ、リアルタイムデータストリーム１０４内のデータに対してクエリが実行される間システム１０２のバッファキャッシュ内に一時的に記憶されることを別にすれば、リアルタイムデータストリーム１０４はソースデータリーダ１０６によって読み取られ、その後破棄される。クエリの実行後、バッファキャッシュのコンテンツも破棄される。
【００１６】
ＲＴＴＴ１０３は、クエリを作成し、作成したクエリがシステムによって実行され得るかどうかのフィードバックを得るためのユーザインタフェースを利用者（例えばアナリスト）に提供するクエリクリエータ１１４も含む。クエリクリエータ１１４は、アナリストがクエリを生成するためのユーザインタフェースを提供するモジュールを含む。一例では、クエリクリエータ１１４がデータエントリ用のユーザインタフェースである。別の例では、クエリクリエータ１１４がスプレッドシートのテンプレートを含む。クエリクリエータ１１４はクエリ構文を検証し、クエリのための実行コードであるクエリワーカエンジンを（テンプレートから）生成する。実行コードはシステム１０２内のディスク上のファイルとして記憶され、管理リポジトリ１１２はクエリが開始し停止するときを追跡する。以下で説明するように、クエリワーカエンジンは任意のクエリオブジェクトを実行するために使用される汎用実行コードを含む。クエリクリエータ１１４は、管理、メタデータ、セキュリティ、及び監査に使用されるクエリメタデータ（例えばクエリ状態）を管理リポジトリ１１２に登録する。クエリ状態は、クエリが現在実行されているかどうか、又はクエリが最後に実行されたときを規定する。
【００１７】
クエリクリエータ１１４のユーザインタフェースにより、クライアント装置１１６がクエリ１０７ａをシステム１０２に伝送する。利用者は、システム１０２に伝送され記憶される複数のクエリ１０７ａ．．．１０７ｎを定義することができる。クエリ１０７ａを伝送しているクライアント装置１１６は、クエリ１０７ａを作成する利用者１１７によって操作される。クエリ１０７ａは、クエリの構文を規定するクエリ構文情報を含む。クエリ１０７ａを受信することに応答し、クエリクリエータ１１４はクエリ構文を検証し、クエリオブジェクト１１１ａを生成する。クエリ１０７ａはクエリ仕様、即ちクエリの詳細な記述（例えばクエリターム）を含む。
【００１８】
例えばクエリ１０７ａは、入力データストリーム（例えばリアルタイムデータストリーム１０４）をどのように処理するのか、及び例えば表示するために結果をどのように処理するのか（例えば利用者がどの結果を見たいのか）を規定するユーザ入力情報である。クエリ１０７ａは、クエリが実行するための基準も規定する。クエリオブジェクト１１１ａはクエリ１０７ａの機械表現（即ち機械言語表現）であり、そのためクエリワーカエンジンはクエリを読み取って処理することができる。クエリワーカエンジンはクエリオブジェクトを実行する。便宜上、及び制限なしに、クエリという用語はユーザ規定のクエリ（例えばクエリ１０７ａ）又はクエリオブジェクト（例えばクエリ１１１ａ）を指すために使用され得る。
【００１９】
先に説明したように、クエリワーカエンジンはクエリのための実行コードである。この実行コードは、インスタンス化されていないデータフローグラフ、例えば具体的なインスタンスについて表現されていないデータフローグラフを含む。このインスタンス化されていないデータフローグラフは様々な成分を含む。クエリオブジェクトを読み込むとき、例えばクエリオブジェクトによって規定されるクエリを実行するのに必要な成分に基づき、クエリワーカエンジン又は実行時前モジュールが特定の成分をオフにし、他の成分をオンにする。つまりクエリオブジェクトは、クエリの仕様を満たすためにどの成分をクエリワーカエンジンによってローカルに実行すべきかを規定する。この例では、クエリクリエータ１１４が各クエリのクエリオブジェクトを生成する。例えばクエリクリエータ１１４は、クエリ１０７ａ．．．１０７ｎのそれぞれについてクエリオブジェクト１１１ａ．．．１１１ｎを生成する。
【００２０】
一例では、クエリ及びクエリ仕様を作る際に使用されるデータを利用者が入力するグラフィカルユーザインタフェース（ＧＵＩ）用のデータをシステム１０２が生成する。このＧＵＩにより、クエリに関連しクエリを識別するために使用されるクエリ識別情報（ＩＤ）を利用者が入力する。以下でより詳細に説明するように、クエリＩＤは、クエリ仕様を取り出し、クエリごとの結果ファイル、例えばクエリ実行の中間結果及び最終結果を記憶するためのファイルに名称を付けるためにも使用される。利用者は更に、クエリ実行の開始時間、クエリ実行の停止時間、及び報告間隔（例えばクエリの実行結果を利用者が見ることができる頻度）を規定するデータをクエリ仕様内に入力する。クエリの開始時間／停止時間を規定することにより、利用者は、特定の時点において実行され、特定の時間にわたって実行されるようにクエリをスケジュールすることができる。改変形態では、クエリの自動的な開始及び停止を可能にするコントロールを（例えばグラフィカルユーザインタフェース内の表示によって）システム１０２が利用者に提供する。
【００２１】
クエリクリエータ１１４により、利用者はリアルタイムで実行するための１つ又は複数のクエリを動的に追加することができる。クエリが作成されると、利用者はクエリ仕様を更新して（例えば現在時間であるように）新たな開始時間及び／又は新たな停止時間を規定することにより、クエリを（例えば実行されている１組の複数のクエリに）動的に追加することができる。つまりクエリクリエータ１１４により、利用者は既に実行されている１組の複数のクエリに更なるクエリを動的に追加することができる。利用者は、リアルタイムの現在の実行のために複数のクエリを動的且つリアルタイムで追加することができる。
【００２２】
クエリ１０７ａは、クエリを実装するために実行するためのコンパイル済みデータフローグラフの名称も含む。概して、データフローグラフは有向グラフである。コンパイル済みデータフローグラフのこの名称はクエリ仕様の一部として保存される。以下でより詳細に説明するように、クエリは、リアルタイムデータストリーム１０４の一部にクエリを適用するデータフローグラフによって実装される。この例では、データ処理環境１００は、頂点間の（成分間の作業要素、即ちデータの流れを表す）有向辺によって接続される（データ処理グラフ成分又はデータセットを表す）頂点を含むデータフローグラフとしてクエリを開発するための環境（例えば開発環境）である。例えば、かかる環境については以下でより詳細に説明する。そのようなグラフベースのクエリを実行するためのシステムについては、「グラフとして表現される計算の実行（Executing Computations Expressed as Graphs）」と題された米国特許第５，９６６，０７２号の中で説明されている。このシステムに従って作られるデータフローグラフは、グラフ成分によって表される個々のプロセスの内外に情報を出し入れするための、プロセス間で情報を動かすための、及びプロセスの実行順序を定めるための方法を提供し得る。このシステムは、利用可能な任意の方法からプロセス間の通信方法を選ぶアルゴリズムを含み得る（例えばグラフのリンクによる通信経路は、プロセス間でデータを渡すためにＴＣＰ／ＩＰ若しくはＵＮＩＸドメインソケットを使用することができ、又は共用メモリを使用することができる）。
【００２３】
本明細書に記載のデータフローグラフ（例えばマイクログラフ）はシステムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、１つ又は複数の入力データセットから処理グラフ成分のグラフを介して１つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ１つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、グラフベースの計算を実行するために１台又は複数台のコンピュータ上にホストされ、データ記憶域に結合されるランタイム環境であって、データフローグラフを規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフに指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び本明細書に記載の方法の１つ又は複数の操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを含む、ランタイム環境とを含み得る。
【００２４】
システム１０２を使用して開発されるデータフローグラフは、管理リポジトリ１１２（又は別のデータ記憶域）内に記憶され、ＲＴＴＴ１０３によってアクセスされ得る。ＲＴＴＴ１０３は、データフローグラフの成分に関連するクエリを実行してリアルタイムデータストリーム１０４内で受信されるデータを処理するためにデータフローグラフを実行することができる。
【００２５】
クエリクリエータ１１４を使用し、利用者はクエリに関する様々なクエリ基準及びクエリパラメータを規定することができる。概して、クエリ基準はクエリの実行前に満たされる条件（例えばクエリされるデータのタイプ）を含む。一例では、クエリが例えばクエリ基準に基づいてではなく、クエリの開始時間に基づいて実行のために選択される。つまり、利用者はクエリの開始時間を規定し、クエリはその時間において「起動」し又は実行し始める。例えば結果内に表示される属性（例えば利用者がどの属性をクエリ結果内で見たいのか）、クエリ結果をどのように集約するのかを規定する集約キー、フィルタ条件、ソート条件（例えば日付に基づいて等、クエリ結果をどのようにソートするのかを規定する情報）、出力様式（例えばクエリ結果を出力するためのフォーマットを規定する情報）、及び警告閾値（警告の送信をトリガする１つ又は複数の既定条件を規定する情報）を含む様々な種類のクエリパラメータがある。
【００２６】
例えば、利用者はフィルタ条件（リアルタイムデータストリーム１０４内に含まれるデータ項目をどのようにフィルタにかけるのかを規定する情報）を規定することができる。フィルタ条件は、クエリ結果の中からどのタイプのデータをフィルタで除去する（除外する）のか、及びクエリ結果内にどのタイプのデータをフィルタで入れる（含める）のかを指示する。利用者が与えるフィルタ条件に基づき、システム１０２はフィルタ条件を用いてクエリオブジェクト１１１ａを更新し、クエリオブジェクト１１１ａをクエリワーカエンジンに与えてクエリワーカエンジンが利用者のフィルタ条件に従ってクエリ結果をフィルタにかけることを可能にする。
【００２７】
クエリクリエータ１１４を使用し、利用者はクエリ結果に対するデータ変換のためのカスタム操作を定義することもできる。利用者は、拡張２進化１０進コード（ＥＢＣＤＩＣ）日付時刻を読み取り、変換するための操作を規定することができる。利用者は、通貨額を表すデータ項目のフォーマットを米国ドル（ＵＳＤ）通貨に変換するための別の操作を規定することができる。利用者は、リアルタイムデータストリーム１０４内のデータのタイプから支払カードの種類（例えばデビットカード、ＡＴＭカード、ストアドバリューカード、クレジットカード、チャージカード等）を決定するための更に別の種類の操作を規定することができる。クエリパラメータ及びユーザ定義カスタム操作により、クエリワーカエンジン（例えばクエリワーカエンジン１１０ａ．．．１１０ｎの１つ）は利用者の規定に従ってクエリ結果をカスタマイズすることができる。具体的には、クエリワーカエンジンは（例えば管理リポジトリ１１２内のクエリオブジェクト１１１ａにより）、クエリ実行の集約済みの（例えば最終）結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスする。クエリワーカエンジンは、集約済みの結果に対してユーザ定義カスタム操作を実行し、ユーザ定義カスタム操作に従って集約済みの結果を変換（例えば修正）する。
【００２８】
クエリクリエータ１１４は、（互いに関連する）クエリ１０７ａ及びクエリオブジェクト１１１ａを管理リポジトリ１１２（例えばクエリ及び関連するクエリオブジェクトを記憶するためのデータリポジトリ）内に記憶する。この例では、管理リポジトリ１１２が、リアルタイムデータストリーム１０４に対して実行されるクエリ１０７ａ．．．１０７ｎ及びクエリオブジェクト１１１ａ．．．１１１ｎを記憶する。この例では、クエリ１０７ａ．．．１０７ｎがクエリ１０７ａを含み、クエリオブジェクト１１１ａ．．．１１１ｎがクエリオブジェクト１１１ａを含む。先に説明したように、クエリクリエータ１１４はクエリ１０７ａの監査及びセキュリティを提供する。クエリクリエータ１１４は更に、クエリオブジェクト１１１ａ．．．１１１ｎをクエリドライバ１０８に登録する。
【００２９】
以下でより詳細に説明するように、クエリドライバ１０８は、実行するためのクエリオブジェクト１１１ａ．．．１１１ｎの１つ又は複数を選択し、選択したそれらのクエリオブジェクトを何時実行するのかを決定するＲＴＴＴ１０３の部分である。クエリドライバ１０８は、入力メッセージバス上のソースデータのリアルタイムストリームを読み取る継続的アプリケーションを含む。一例では、クエリドライバ１０８がデータフローグラフを継続的に実行する。データフローグラフにより、クエリドライバ１０８は、更に多くのデータを（例えばデータストリームから）検出し又は受信するとき、どのクエリオブジェクトを実行するのかを明らかにするために管理リポジトリ１１２を確認するように構成される。クエリドライバ１０８は、実行する必要があるクエリオブジェクトごとにクエリワーカエンジンの１つのインスタンスをインスタンス化する。
【００３０】
クエリドライバ１０８は、アクティブであり且つ（例えば現時点で及び／又は近い時点で）実行が予定されているクエリを管理リポジトリ１１２に（例えば断続的に）ポーリングする。アクティブクエリを管理リポジトリ１１２に断続的にポーリングすることにより、クエリドライバ１０８は、例えば特定の時点において開始するようにスケジュールされることにより動的に追加される複数のクエリを実行できるようにする。本明細書に記載するように、クエリは規定の時点において開始し停止するようにスケジュールされ得る。既に実行されている（元の）１組の所与のクエリについて、クエリドライバ１０８は例えば管理リポジトリ１１２をポーリングした結果に基づき、実行されている１組の元のクエリに加えられる追加のクエリを識別することができる。この例では、これらの追加のクエリは、元の組の中のクエリの実行時の後の時点において実行が予定されている。管理リポジトリ１１２を断続的にポーリングすることにより、クエリドライバ１０８は、実行すべき更なる追加のクエリを加えることによって既に実行されているクエリを動的に増加させる。改変形態では、管理リポジトリ１１２にクエリが登録されると、どのクエリを（及び何時）実行するのかを規定する情報を管理リポジトリ１１２がクエリドライバ１０８にプッシュする。このプッシュされる情報は、登録されるクエリのためのアクティブクエリワーカエンジンを規定する情報を含む。例えばクエリに関するクエリオブジェクトを生成し、そのクエリオブジェクトを管理リポジトリ１１２内に記憶することを含め、管理リポジトリ１１２にクエリを登録する様々なやり方がある。
【００３１】
クエリドライバ１０８は、入力データを小さい作業単位、例えば直近の５秒のうちに到着した全データに一括する。先に説明したように、クエリドライバ１０８は管理リポジトリ１１２をポーリングしてその時点におけるアクティブクエリワーカエンジンを決定することにより、どのクエリオブジェクトを実行するのかを作業単位ごとに決定する。それらのアクティブクエリワーカエンジンは、現在アクティブなクエリを表す。先に説明したように、クエリは開始時間を有する。クエリワーカエンジンは、その開始時間にオンになる（例えばアクティブとして列挙される）ようにプログラムされる。クエリドライバ１０８は、現在の作業単位のために実行される全てのクエリについて、クエリワーカエンジンの１つのインスタンスを呼び出す。クエリワーカエンジンが実行を終了すると、制御権がクエリドライバ１０８に戻り、クエリドライバ１０８は管理データベース（例えば管理リポジトリ１１２）内のクエリ状態を更新する。
【００３２】
改変形態では、クエリクリエータ１１４がクエリオブジェクト１１１ａ．．．１１１ｎの１つをクエリドライバ１０８に登録し、クエリオブジェクト１１１ａ．．．１１１ｎのそれぞれ及びクエリオブジェクト１１１ａ．．．１１１ｎのそれぞれのためのクエリＩＤを実行するためのクエリ基準を規定するデータを（例えばそのメモリキャッシュ内に）記憶する。記憶済みの情報を使用し、クエリドライバ１０８は、クエリオブジェクト１１１ａ．．．１１１ｎのどれをリアルタイムデータストリーム１０４に対してリアルタイムで、及びリアルタイムデータストリーム１０４の受信時に実行すべきかを決定する。クエリドライバ１０８は、例えばそれらのクエリに関するクエリ仕様に基づき、利用者が規定したクエリの開始時間及び停止時間を明らかにすることによってこの決定を行う。一部の例では、クエリ仕様はクエリの開始時間及び停止時間を規定する。別の例では、クエリドライバ１０８が、クエリ基準をリアルタイムデータストリーム１０４内のデータ項目の品質（例えば属性）と比較することによってこの決定を行う。クエリオブジェクト１１１ａ．．．１１１ｎの１つ又は複数のクエリ基準が満たされると（及び／又は特定のクエリが開始時間に従って開始すべきだと）クエリドライバ１０８が決定する場合、クエリドライバ１０８は適切なクエリＩＤを使用して、管理リポジトリ１１２からクエリ基準が満たされているクエリを取り出し、適切なクエリのためのクエリオブジェクトを取り出す。別の例では、クエリ仕様は、実行されているクエリのクエリ基準を満たすデータをリアルタイムデータストリーム１０４が含む限りクエリが実行されるべきだと指示する。
【００３３】
クエリドライバ１０８は、ソースデータリーダ１０６からのリアルタイムデータストリーム１０４を読み取る上記のデータフローグラフ（例えば連続群、周期グラフ等）を実装する。グラフを使用し、クエリドライバ１０８は、リアルタイムデータストリーム１０４のどのデータ項目が管理リポジトリ１１２内に記憶されたクエリのクエリオブジェクト１１１ａ．．．１１１ｎのクエリ基準を満たすのかを決定する。クエリ基準が満たされたクエリを識別すると、クエリドライバ１０８はクエリワーカエンジン（例えばクエリワーカエンジン１１０ａ．．．１１０ｎの１つ）のインスタンスを呼び出す。改変形態では、クエリドライバ１０８がアクティブクエリワーカエンジンのリストを得るために管理リポジトリ１１２をポーリングし、それらのアクティブクエリワーカエンジンをリアルタイムデータストリーム１０４又はその一部に適用する。クエリドライバ１０８は、どのクエリが実行されているのか、クエリが何時実行されるのか、及びどの程度長く実行されるのかを追跡するためのクエリ実行ステータス（例えば監査証跡）もクエリのクエリ状態の一部として管理リポジトリ１１２内に記録する。
【００３４】
概して、クエリワーカエンジンはユーザクエリを支援することができる汎用プログラムである。所与の作業単位に対して実行する必要があるユーザクエリごとに、クエリワーカエンジンの１つのインスタンスがクエリドライバ１０８によって生成される。現在のシステムの日付時刻が対応するクエリのモニタリング期間内に含まれるクエリワーカエンジンだけがインスタンス化される。実際のユーザクエリは、クエリワーカの機能を駆動する（例えば特定のユーザクエリが集約又はソートを有さない場合、対応するクエリワーカのインスタンスについてそれらの機能がオフにされる）。クエリワーカエンジンは警告基準値の計算も行い、そのように要求される場合は閾値において警告を送る。
【００３５】
クエリワーカエンジンは、クエリに関する上記のデータフローグラフ（例えば単一の汎用グラフ）、例えばクエリオブジェクト１１１ａ．．．１１１ｎの１つを含む。クエリオブジェクトはグラフを実行することによって実行される。クエリドライバ１０８は、実行されるクエリごとに、グラフとしてクエリワーカエンジンの１つのインスタンスを生成し又は選択する。図１の例では、クエリドライバ１０８がリアルタイムデータストリーム１０４内のデータ項目に対してクエリオブジェクト１１１ａ．．．１１１ｎを（例えば同時に）実行する。これらのクエリオブジェクトを実行するために、クエリドライバ１０８はクエリワーカエンジン１１０ａ．．．１１０ｎを生成し又は選択する。この例では、クエリワーカエンジン１１０ａ．．．１１０ｎがクエリオブジェクト１１１ａ．．．１１１ｎをそれぞれ実行する。
【００３６】
一例では、クエリオブジェクト１１１ａ．．．１１１ｎの１つの実行開始時に、リアルタイムデータストリーム１０４内のデータ項目の量が未知である。加えて、データ項目はリアルタイムデータストリーム１０４内で或る期間にわたって登場する。クエリオブジェクト１１１ａ．．．１１１ｎの１つの実行開始時に、この期間の終わりは未知である。この例では、ソースデータリーダ１０６がリアルタイムデータストリーム１０４内でファイル１０９を受信する。この例では、ソースデータリーダ１０６が規定の時間間隔において（例えば５分おきに）新たなファイルを受信する。クエリドライバ１０８は、クエリオブジェクト１１１ａ．．．１１１ｎのどれをファイル１０９に対して実行すべきかを決定する。この例では、クエリドライバ１０８は、クエリオブジェクト１１１ａ．．．１１１ｎのそれぞれをファイル１０９に対して実行すべきだと決定する。そのため、クエリドライバ１０８は、クエリオブジェクト１１１ａ．．．１１１ｎをファイル１０９に対して（同時に）実行するためにクエリワーカエンジン１１０ａ．．．１１０ｎを生成し又は取り出す。このプロセスは、例えばクエリが引き続きアクティブであり実行されていることを規定する開始時間及び終了時間を有するクエリについて、次のファイルが到着するとき繰り返される。この例では、ソースデータリーダ１０６がファイル１０９を読み込み、ファイル１０９をクエリドライバ１０８に伝送する。クエリドライバ１０８は、クエリオブジェクト１１１ａ．．．１１１ｎをそれぞれ実行するとき使用するためのクエリワーカエンジン１１０ａ．．．１１０ｎのそれぞれにファイル１０９を伝送する。
【００３７】
クエリワーカエンジンは警告基準値も生成し、（例えばユーザ入力がクエリ処理に関する既定の要件に準拠しない場合は）クエリに関する警告を送る。例えば利用者がクエリ仕様を定める場合、利用者は警告（例えば或る事象の発生を明記する通知メッセージ）をトリガする様々な既定の事象を規定する。それらの事象は、関連するクエリのクエリオブジェクト内に記憶することができる。別の例では利用者は、事象数が閾値を上回る場合は通知を受けることを要求しながら、事象の閾値を規定することができる。概して、事象は予め規定した１つ又は複数のデータ値又はタイプの発生を含む。クエリドライバ１０８は、クエリワーカエンジン１１０ａ．．．１１０ｎによって実行されている様々なクエリに関する既定の事象を示すデータをクエリワーカエンジン１１０ａ．．．１１０ｎのそれぞれに伝送し、クエリワーカエンジン１１０ａ．．．１１０ｎが適切な警告を生成することを可能にする。
【００３８】
リアルタイムデータストリーム１０４内のデータ項目に対してクエリオブジェクト１１１ａ．．．１１１ｎを実行することに基づき、クエリワーカエンジン１１０ａ．．．１１０ｎは中間結果１１８ａ．．．１１８ｎを生成する。中間結果１１８ａ．．．１１８ｎは、クエリ実行の持続時間の間中（利用者が見直すために）入手可能である。以下でより詳細に説明するように、クエリワーカエンジン１１０ａ．．．１１０ｎは中間結果１１８ａ．．．１１８ｎのそれぞれを、クエリオブジェクト１１１ａ．．．１１１ｎのその後の実行のその後の結果と組み合わせる。これらの組み合わさった結果は、新たな中間結果又は最終結果（例えばクエリの実行が終わる場合）をもたらす。
【００３９】
中間結果１１８ａ．．．１１８ｎ（又は最終結果）を使用し、クエリワーカエンジン１１０ａ．．．１１０ｎは実行されるクエリに関する警告１２０及びクエリ結果１２２を（例えばコンマ区切り（ＣＳＶ）形式や構造化照会言語（ＳＱＬ）フォーマットで）生成する。一例では、クエリ結果が部分結果、例えばクエリが依然として実行されており完了する前の現時点までのクエリ実行結果を含む。この例では、例えばクエリが実行され続けるとき、部分結果が新たな結果によって継続的に及び／又は周期的に更新される。例えば１つ又は複数のリアルタイムデータ項目がクエリ条件の１つ又は複数を満たすことをＲＴＴＴ１０３が検出するとき、部分結果がリアルタイムで表示されもする。新たなリアルタイムデータ項目がクエリ条件を満たすことをＲＴＴＴ１０３が継続的に検出するとき、ＲＴＴＴ１０３は、例えば新たに検出される項目に基づいて部分結果を更新し、表示する。この例では、システム１０２が警告１２０及びクエリ結果１２２をクライアント装置１２４に伝送する。一例では、クエリ結果１２２が後で取り出すために管理リポジトリ１１２内に記憶される。概して、警告は検出事象を利用者に知らせる通知メッセージを含む。概して、クエリ結果はクエリ実行結果の視覚化を含み、特定の事象が検出される頻度及び時点を明記する情報を含む。警告１２０は、電子メール又は簡単なメッセージングサービス（ＳＭＳ）の警告とすることができる。システム１０２は、定義された閾値、例えば警告が送信されるために超えられなければならない絶対値（例えば事象の絶対値）を規定する情報において警告を送るように構成され得る。警告１２０及びクエリ結果１２２は、例えばクライアント装置１２４の利用者１２５が見るためにクライアント装置１２４にそれぞれ伝送される。システム１０２は、例えば統合された出力や付加された出力を含む様々な種類のクエリ結果を出力する。概して、統合された出力は、結果をチャート及び他の視覚化へと定量化するデータを含む。概して、付加された出力は結果のデータファイルを含む。クエリはリアルタイムで（及びリアルタイムデータストリーム１０４が受信されるとき）実行されるので、システム１０２は結果をリアルタイムで且つデータが到着したすぐ後で送ることができる。
【００４０】
一例では、データ処理環境１００は、支払カード（例えばデビットカード、ＡＴＭカード、ストアドバリューカード、クレジットカード、チャージカード等）が不正行為の危険にさらされている場合を明らかにするために使用される。この例では、システム１０２は、カードを発行しているエンティティ（例えば発行エンティティ）から危険にさらされている１枚又は複数枚のカードを規定する情報を受信する。この例では、ソースデータリーダ１０６が、トランザクションを示すリアルタイムデータストリームを発行エンティティのシステムから受信する。そのリアルタイムデータストリームに基づき、システム１０２は危険にさらされているカードからのトランザクションをモニタし、それらのカードによって開始されるトランザクションの数及びタイプのカウントを決定する。例えば人手による現金トランザクション、ＡＴＭトランザクション、国内使用トランザクション、国際使用トランザクション、デビットカードトランザクション、チャージカードトランザクション、ストアドバリューカードトランザクション、クレジットカードトランザクション等を含む様々な種類のトランザクションがある。この例では、従業員（例えば不正防止部門のアナリスト）がクエリクリエータ１１４を使用して警告条件を規定する。例えば警告条件は、危険にさらされているカードに関する様々な種類のトランザクション（例えば国際使用トランザクション）の閾値量をシステム１０２が特定するとき、（例えば発行エンティティがトランザクションを拒否することができるように）発行エンティティのシステムに警告することを規定する。
【００４１】
ＲＴＴＴ１０３は、ロジスティック事象又は加工された商品の総数を地域や国等ごとにモニタするために使用され得る。ＲＴＴＴ１０３は、特定の期間にわたる（例えば２０１３年１１月１５日の０８：００：００から開始するＮ時間の期間にわたる）特定の国内の特定の製品に関する総売上高及びトランザクションカウントを明らかにするための販売分析にも使用される。ＲＴＴＴ１０３は、地域や国等ごとのマーケティングオファーの辞退の総数をモニタするために使用され得る。利用者はＲＴＴＴ１０３を構成して、辞退の総数が閾値を上回る場合は通知を受けたいことを規定することができる。ＲＴＴＴ１０３は、入力データ内の必須欄の何れかがヌル又は空白である場合に警告を生成するために使用され得る。
【００４２】
一例では、ＲＴＴＴ１０３が、警告のためのリアルタイムローリングウィンドウ操作（例えば集約）も実行する。定義された時間窓について、例えば合計操作、カウント操作、平均値操作、最小値操作、最大値操作等を含む様々な種類の操作がある。時間窓自体のサイズは、ユーザ定義パラメータ（例えば１０分や６０分等）である。例えば利用者は、１０分間のローリング時間窓にわたるオファーの辞退数をカウントするようにＲＴＴＴ１０３を構成することができる。利用者は、自分が何時どのように（例えば電子メールによってまたＳＭＳによって等）通知されたいのかを規定する様々な警告閾値を定めることもできる。例えば利用者は、辞退のカウントが閾値量を上回る場合、電子メールの警告を送信することによって利用者に通知するように規定することができる。
【００４３】
別の例では、金融機関が或る地域内で新製品のポートフォリオを立ち上げることを計画しており、ビジネスユーザは立ち上げ後の最初の「Ｎ」時間（モニタリング期間）にわたるその製品のアップテイク（uptake）をモニタしたい。ビジネスユーザは、製品及び地理ごとに分類される契約顧客のカウントや委任された総額等の幾つかの基準値をモニタしたい。ビジネスユーザは、新規顧客が一定の閾値額よりも多く製品に投資する場合も、モニタリング期間中に警告を欲しい。ビジネスユーザは、ポートフォリオのアップテイクをモニタリング間隔中に定期的にモニタする必要があり、トレンディングチャートを作るために情報を要求に応じて必要とする。この例では、ＳＱＬクエリ及び分析のために全データセットがデータウェアハウス内で入手可能になるモニタリング期間の終了までビジネスユーザは待ちたくない。この例では、短期間のモニタリング要件のために新たな専用の報告リポジトリ内に入力データフィードが記憶されず、記憶することはデータウェアハウスとデータが重複する原因となる。本明細書に記載の技法を使用し、要求されたモニタリング情報を利用者にリアルタイムで与えるためにデータが「その場で」（例えばリアルタイムで）クエリされる。加えて利用者は、それぞれ独自のモニタリング期間を有する何百ものクエリを予め設定することができる。それらのクエリは同時に実行される。各クエリは連続したデータストリームに対してリアルタイムの計算を行い、事業体が入手可能な結果を継続的に生成する。個々のクエリごとのモニタリング間隔の終了時にシステムが最終結果を受信者にプッシュし、システム資源を解放するためにクエリを自動で消去する。
【００４４】
一例では、クエリドライバごとに１つのデータストリームがある。この例では、データストリームが１つのフォーマットのレコードを含む。この例では、各ストリームが特定のフォーマットのレコードを表す複数のデータストリームのために、データ処理環境が複数のクエリドライバを含み、各クエリドライバはデータストリームの１つに割り当てられる。
【００４５】
図２を参照し、図１５０は、クエリ実行の中間結果をクエリ実行のその後の結果と集約することを概念的に示す。この例では、特定のクエリが時点Ｔ１において実行される。クエリの実行に基づき、ＲＴＴＴ１０３が結果１５２（例えば時点Ｔ１における結果）を生成する。時点Ｔ１の後の時点Ｔ２において、クエリが再び（例えば今度は異なるデータに対して）実行される。例えば、クエリは受信される新たなファイルに対して再実行され得る。時点Ｔ２におけるクエリの実行に基づき、ＲＴＴＴ１０３は、時点Ｔ２におけるクエリの実行結果である結果１５６を生成する。ＲＴＴＴ１０３は、結果１５２を結果１５６と組み合わせて時点Ｔ２における中間結果１５８を生成する。概して、中間結果は現在の期間までの全結果を集約したものである。その後の各時点における新たな中間結果を決定するこのプロセスは時点Ｔｎまで続く。時点Ｔｎにおいて、クエリの実行が完了する。加えて時点Ｔｎにおいて、ＲＴＴＴ１０３が時点Ｔｎにおけるクエリ実行の結果１６２を決定する。ＲＴＴＴ１０３は、（時点Ｔｎよりも前の全時点の集約済みの結果である）中間結果１６０を結果１６２と組み合わせることによってクエリ実行の最終結果１６４を生成する。この例では、中間結果１６０は時点Ｔｎ−１における中間結果である。結果１６２は、時点Ｔｎにおける結果（例えば時点Ｔｎだけにおける結果）である。
【００４６】
図３を参照し、マイクログラフ２００が示されている。概してマイクログラフは、上記のデータフローグラフの専用の下位グラフであり、動的に取り出され、マイクログラフ実行成分内に埋め込まれるように構成される。動的にロードされるかかるグラフを実行するためのシステムについて以下で説明する。一部の実装形態では、マイクログラフが事前コンパイルされる場合がある。
【００４７】
一部の例では、データフローグラフの閲覧、構成、及び／又は実行を可能にするユーザインタフェース内にマイクログラフ２００が表示される。マイクログラフ２００は、図１に示すシステム１０２上のＲＴＴＴ１０３によって実行されるデータ処理操作を表す。一例では、クエリワーカエンジンがマイクログラフ２００（又はマイクログラフのインスタンス）を実行する。マイクログラフ２００は、（例えばリアルタイム）データストリームの一部に対してクエリを実行する。例えば、ファイル（例えばリアルタイムデータストリームの一部）が規定の時間間隔において（例えば５分おきに）システム１０２に到着する。それに応答し、複数のクエリがファイルに対して実行されながら、システム１０２はシステム１０２のバッファキャッシュ内にそれらのファイルを保持する。既定の間隔において受信されるファイルについて、システム１０２はファイルに対して実行されるクエリごとにマイクログラフ（例えばマイクログラフ２００）を実行する。
【００４８】
この例では、マイクログラフ２００が「マイクログラフ入力」と呼ばれる操作を表すグラフ成分２０２を含み、以下、この成分はマイクログラフ入力成分２０２と呼ぶ。マイクログラフ入力操作は、どのクエリを実行するのかを規定する情報及びクエリが実行されるフォーマット済みデータ（例えばフォーマット済みファイルやフォーマット済み作業単位等）を（例えばマイクログラフ２００を呼び出し、従ってマイクログラフ２００にデータを渡す別のデータフローグラフ内のグラフ成分から）受信する。マイクログラフ２００は、「複数ファイル読取」と呼ばれる操作を表す成分２０４も含み、以下、この成分は複数ファイル読取成分２０４と呼ぶ。この例では、マイクログラフ入力成分２０２から複数ファイル読取成分２０４にデータが流れる。複数ファイル読取成分２０４はデータベースからファイルを読み取り、マイクログラフ入力成分２０２によって受信される入力情報にそのファイルを追加する。例えば、複数ファイル読取成分２０４は、特定のクエリの結果に対して実行されるデータ処理操作、例えば特定のクエリの結果を（例えば利用者が見直すために）どのように出力するのか、結果をどのようにソートするのか、クエリの中からどのタイプのデータをフィルタで除去するのか等を規定する情報を読み取ることができる。一例では、複数ファイル読取成分２０４が、実行されるクエリに関するクエリオブジェクトに接触するデータファイルを読み込む。クエリオブジェクトを使用し、クエリを実行することができ、又はクエリオブジェクトと合致するやり方で結果が得られる。複数ファイル読取成分２０４は、読み取ったファイルを入力データに追加した結果をロールアップ成分２０６に出力する。
【００４９】
ロールアップ成分は、データ、例えばデータに対するクエリの実行結果を集約する。この例では、ロールアップ成分２０６が複数ファイル読取成分２０４の出力にクエリ（例えばクエリタームやクエリ文字列）を適用する。クエリを適用することに基づき、ロールアップ成分２０６は、ファイル又は分割されたデータのグループ分けにクエリを適用した結果を決定する。結果は、クエリタームに一致するデータ又はクエリ文字列によって規定されるデータのタイプに対応するデータを含む。
【００５０】
この例では、例えば直前に受信したファイル又は作業単位に対するこの特定のクエリ実行について、ロールアップ成分２０６がクエリ実行結果を集約する。ロールアップ成分２０６の構成にもよるが、ロールアップ成分２０６は個々のデータ項目を単一のデータ項目に集約し、又は個々のデータ項目数のカウントを与える。ロールアップ成分２０６の出力は、ファイル又は作業単位にクエリを適用した集約済みの結果である。ロールアップ成分２０６は、クエリオブジェクトによって規定されるフォーマット又はやり方で結果を出力することもできる。
【００５１】
マイクログラフ２００は、過去に受信したファイルにクエリを適用することの集約済みの前の結果を示すデータを記憶する、過去のランニング集約成分（previous running aggregations component）２１０も含む。これらの集約済みの前の結果はクエリごとの結果ファイル、例えば特定のクエリに関する結果（例えば中間結果）を記憶するファイル内に記憶される。クエリごとの結果ファイルは、既定の間隔において（例えば５分間隔や５分間隔の数倍で）利用者又は中央サーバに折り返し報告され得るランニング合計を保持する。クエリごとの結果ファイルはデータリポジトリ（例えば管理リポジトリ１１２）内に記憶され、過去のランニング集約成分２１０によってアクセスされる。
【００５２】
データは過去のランニング集約成分２１０及びロールアップ成分２０６から、結合操作を実装する結合成分２０８に流れる。「結合」操作は２つのタイプのデータ、例えば或るデータ源の中に含まれる或るタイプのデータと、別のデータ源の中に含まれる別のタイプのデータとを組み合わせる。この例では、結合成分２０８が、クエリ適用の現在の結果（例えばロールアップ成分２０６の出力）と過去のランニング集約成分２１０の出力とを結合する。結合成分２０８は、（ｉ）現在のクエリ実行に関する現在の集約結果を（ｉｉ）過去のクエリ実行に関する過去の集約結果と組み合わせる、新たなクエリごとの結果ファイルを書き込む。この組合せに基づき、結合成分２０８は（現在の集約結果と過去の集約結果との組合せである）新たな集約結果をもたらす。結合成分２０８は、その新たな集約結果をデータリポジトリ内の新たなクエリごとの結果ファイル内に記憶することができる。それらの新たな集約結果は中間結果である。それらの中間結果は後で、例えば後の時点においてその後の結果と結合され得る。
【００５３】
データ（例えば中間結果）は、結合成分２０８から次のランニング集約成分２１２に流れる。次のランニング集約成分２１２は、（中間結果を含む）新たなクエリごとの結果ファイルによってデータリポジトリを更新し、例えばクエリの次回の実行中に、過去のランニング集約成分２１０がそのクエリごとの結果ファイルにアクセスすることを可能にする。
【００５４】
マイクログラフ２００の各成分は１つ又は複数の接続ポートを含み、その接続ポートにより、成分がデータフローグラフの１つ又は複数の他の成分にデータフロー接続（「接続」又は「リンク」とも呼ばれる）によって接続され得る。接続ポートは、成分内にデータを受信するための入力ポート又は成分からデータがそこを通って出力される出力ポートであり得る。一部の例では、接続ポートが入力ポートなのか出力ポートなのかを、接続ポートを描く記号が示す場合がある。例えば図３の例では、複数ファイル読取成分２０４が入力ポート記号によって表される入力ポート２１４と、出力ポート記号によって表される出力ポート２１６とを有する。
【００５５】
この例では、マイクログラフ２００内の成分の少なくとも一部が、グラフ成分のローカル状態を（例えばシステム１０２の）バッファ内に保存してデータフローグラフの状態の回復性を有効にするチェックポイント操作を実行する。本明細書に記載の他のデータフローグラフ内の成分も同様にチェックポインティングを行う。データフローグラフに関して上記で説明したように、マイクログラフ２００はシステムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、１つ又は複数の入力データセットから処理グラフ成分のグラフを介して１つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ１つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、１つ又は複数のデータ処理装置上にホストされるランタイム環境は、マイクログラフ２００（即ちグラフ成分２０２、２０４、２０６、２０８、２１０、２１２を表す頂点及びその間のリンク）を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってマイクログラフ２００に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得るとを含む。ランタイム環境は、図３の脈絡で説明した操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。
【００５６】
図４を参照し、データフローグラフ３００は、例えばファイルが到着した瞬間に実行することに始まり、ファイルに対してクエリを実行する。一例では、クエリドライバがデータフローグラフ３００を実行する。上記のように、データフローグラフ３００は以下を含むシステムによって実装することができ、システムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、１つ又は複数の入力データセットから処理グラフ成分のグラフを介して１つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ１つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、１つ又は複数のデータ処理装置上にホストされるランタイム環境であって、データフローグラフ３００（即ちグラフ成分を表す頂点及びその間のリンク）を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフ３００に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得る、ランタイム環境とを含む。ランタイム環境は、図４の脈絡で説明した操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。これらのクエリは、クエリごとにマイクログラフ（例えばマイクログラフ２００）を実装することによって実行される。データフローグラフ３００は、ソースデータリーダにサブスクライブする（例えばそこからデータを受信する）サブスクライブ成分３０２を含む。サブスクライブ成分３０２により、データフローグラフ３００は（例えばリアルタイム）データストリーム内に含まれるデータ項目に例えばリアルタイムでアクセスする。この例では、サブスクライブ成分３０２が（例えば数千ものレコードを含む）ファイルを受信する。データは、サブスクライブ成分３０２から結合成分３０４に流れる。結合成分３０４は、或るデータ源（又は複数のデータ源）からデータ（例えばレコード）を順々に読み取り、一連の離散的な作業単位へと入力データを構成する。先に説明したように、作業単位は、例えば入力レコードに基づいて所定のフォーマットで記憶されるレコードを表すことができ、又は例えば処理されるトランザクションを表し得る。一部の実装形態では、処理される作業単位のカウント等、各作業単位がバッチ内で一意の数字によって識別される。次いで、作業単位はデータフローグラフ３００内の次の成分に順に渡される。
【００５７】
結合成分３０４は更に、ファイルを現在アクティブなクエリと結合する。概して、現在アクティブなクエリとは、（例えばリアルタイム）データストリームに対して実行すべきだとクエリドライバが決定したクエリである。一例では、結合成分３０４が、実行される現在アクティブなクエリのリストを取り出す。このリストは、クエリドライバ１０８上でローカルに記憶される場合はクエリドライバ１０８（図１）から、又は管理リポジトリ１１２から取り出される。このリストは、実行されるクエリのクエリＩＤを規定する。現在アクティブなクエリは、リアルタイム又はファイル時間に基づいて決定される。
【００５８】
例えば、データリポジトリは現在アクティブなクエリのデータベーステーブルを含む。現在アクティブなクエリは、クエリＩＤによってテーブル内で識別される。現在アクティブなクエリごとに、データベーステーブルはタイムスタンプも規定する。このタイムスタンプは、クエリが実行されるべきだとクエリドライバ１０８が決定する時点において規定する。一部の例では、結合成分３０４が現在のファイル時間（例えばファイルが目下受信されている現在の時間間隔）内に生じるタイムスタンプを有するクエリをデータベーステーブル内で識別する。他の例では、結合成分３０４が、現在時間に近いタイムスタンプ（例えば現在時間とタイムスタンプによって規定される時間との差が閾値時間未満であるタイムスタンプ）を有するクエリをデータベーステーブル内で識別する。更に別の例では、結合成分３０４が現在アクティブなクエリであるとして規定されるクエリを選択する。結合成分３０４は現在アクティブなクエリを選択し、選択したそれらのクエリをリアルタイムデータに結合する。結合成分３０４は更に、クエリを処理する際に使用するために、選択したクエリに関するクエリ仕様も取り出す。
【００５９】
データは結合成分３０４から分割成分３０６に流れ、分割成分３０６は（例えば同じファイルに対して）処理される現在アクティブなクエリを複数の成分のインスタンス、例えば再フォーマット成分のインスタンス３０８ａ．．．３０８ｎ（以下、再フォーマット成分３０８ａ．．．３０８ｎ）、及びマイクログラフ実行成分のインスタンス３１０ａ．．．３１０ｎ（以下、マイクログラフ実行成分３１０ａ．．．３１０ｎ）に分割する（割り当てる）。つまり分割は、成分の様々なインスタンスにわたって現在アクティブなクエリを分けることを表す。この例では「ｎ」の現在アクティブなクエリがある。この例では、ファイルが「ｎ」回、クエリごとに１回処理される。クエリを分割することにより、クエリを互いに対して（及び様々な分散システムにわたって）並列に実行することができる。分割成分３０６は、最初のクエリを最初のインスタンスに、２番目のクエリを２番目のインスタンスに等々指定することにより、クエリをラウンドロビン式に分割する。一例では、インスタンスの一部がシステム上で実行され、それにより全てのインスタンスを様々なシステムにわたって分散させる。
【００６０】
作業単位の処理が完了すると、結果が収集成分３３８に渡され、収集成分３３８は複数のインスタンスから結果を集め、それらの結果をデータフローグラフ内の次のデータ処理成分に渡す。
【００６１】
データ（例えばクエリ及び現在のファイルの分割を規定するデータ）は、分割成分３０６から再フォーマット成分３０８ａ．．．３０８ｎに流れる。再フォーマット成分３０８ａ．．．３０８ｎのそれぞれは、現在アクティブなクエリの１つに対応する。再フォーマット成分は再フォーマットプロセスを表し、そのためデータフローグラフ３００がシステム１０２によって実行される場合、再フォーマット成分によって表される再フォーマットプロセスが実行される。概して、再フォーマットプロセスは、データを或るフォーマットから別のフォーマットに変換するための一連の命令を含む。この例では、再フォーマット成分が（例えば現在のファイル内の）データレコードをデータフローグラフ（例えば別のデータフローグラフや、データフローグラフ３００に接続されるマイクログラフ２００の１つ又は複数）によって読取可能なフォーマットに再フォーマットする。
【００６２】
再フォーマットされたデータは再フォーマット成分３０８ａ．．．３０８ｎからマイクログラフ実行成分３１０ａ．．．３１０ｎに流れ、マイクログラフ実行成分３１０ａ．．．３１０ｎは、ファイル内のデータレコードに対して（連続的に）クエリを実行するためのマイクログラフを実行する。具体的には、マイクログラフ実行成分３１０は、実行するためのマイクログラフ（例えばマイクログラフ２００）を選択する。例えばファイルに対してクエリを連続的に処理するために、マイクログラフがクエリごとに実行される。この例では、マイクログラフ実行成分３１０ａ．．．３１０ｎのそれぞれが、現在のファイルに対して処理される「ｎ」のクエリの１つに対応する。
【００６３】
データフローグラフ３００は、ファイル内のデータレコードに対するクエリの実行結果を集める収集成分３１２も含む。概して、収集成分３１２はマイクログラフ実行成分３１０ａ．．．３１０ｎから結果を集め、それらの結果をデータフローグラフ３００内の次のデータ処理成分に渡す。データは、マイクログラフ実行成分３１０ａ．．．３１０ｎから収集成分３１２に流れる。収集成分３１２は、例えば実行されるクエリに関するクエリごとの結果ファイルにアクセスすることによってクエリの実行結果を集める。クエリの実行結果を示すデータは、収集成分から公開成分３１４に流れ、公開成分３１４は、結果を例えば所与のクエリＩＤ又は複数のクエリＩＤに関するクエリごとの結果ファイルの内容を表示する結果閲覧ＧＵＩ内で、又は公開データに対して更なるグラフベースの計算を実行するように構成される別のデータフローグラフに公開する。一例では、クエリごとの結果ファイルが、前回のクエリ実行の小計及びランニング総計の両方を記憶する。この例では、直近の５分間の結果及びクエリが最初に実行され始めてからの結果を表示するダッシュボードをＧＵＩが含む。ダッシュボードは、様々な時間尺度に基づく複数組の合計、例えば直近の５分間、直近の１０分間、直近の３０分間等の結果も表示する。ダッシュボードは様々なレベルの粒度、例えば１つ又は複数の特定のクエリに関する結果及び／又は全てのクエリに関する結果を表示する。
【００６４】
図５Ａを参照し、データフローグラフ４００は、例えば複数のクエリを並列に実行し且つ特定のクエリに関するデータレコードを並列に更に処理するために、所与のファイル／クエリの組合せの中の並列処理を実装する（例えばパイプライン並列処理を提供する）。このプロセスは大きいファイル（例えば２ギガバイトを超えるファイル）の拡張性を改善し、それにより処理時間を短縮し、処理速度を上げる。例えば、システム１０２はファイルを既定の回数（例えばＮ回）処理し、それはファイルが関連クエリごとに処理されるからである。この例では、Ｎの関連クエリがある場合、システム１０２はファイルをＮ回処理する。クエリは直列に又は並列に処理することができる。クエリを直列に処理する場合、ファイル内のデータ項目に対してクエリを連続的に適用する。例えば現在のファイル内のデータを作業単位に分け、並列に実行されるクエリをそれらの作業単位に適用することにより、データフローグラフ４００はクエリを直列に処理する代わりに特定のクエリのデータを並列に処理する。
【００６５】
上記のように、データフローグラフ４００は、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、１つ又は複数の入力データセットから処理グラフ成分のグラフを介して１つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ１つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、１つ又は複数のデータ処理装置上にホストされるランタイム環境であって、データフローグラフ４００（即ちグラフ成分を表す頂点及びその間のリンク）を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフ４００に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得る、ランタイム環境とを含むシステムによって実装され得る。ランタイム環境は、図５Ａ／Ｂの脈絡で記載する操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。
【００６６】
データフローグラフ４００は、（図４のサブスクライブ成分３０２に関して説明した機能を実行する）サブスクライブ成分４０２、及び（図４の結合成分３０４に関して説明した機能を実行する）結合成分４０４を含む。データは結合成分４０４から正規化成分４０６に流れ、正規化成分４０６は、データを並列に処理するための一連の行範囲にファイルのコンテンツを分ける。例えばファイルはデータの行を含み、例えば各行はデータレコードを表す。正規化成分４０６は、それらの行を様々な行範囲（例えば行の部分集合）に指定する。行範囲は作業単位を表す。一例では、ファイルが１万行のトランザクションデータを有する。この例では、行１〜１０００が行範囲Ｉ（例えば第１の作業単位）に指定され、行１００１〜２０００が行範囲ＩＩ（例えば第２の作業単位）に指定され、その後も同様に続く。
【００６７】
再フォーマット成分４１０及びマイクログラフ実行成分４１２のインスタンスを各作業単位に割り当てるために、データは正規化成分４０６から（分割成分３０６に関して説明した機能を実行する）分割成分４０８に流れる（例えば図４の脈絡で説明したように、再フォーマット成分４１０は再フォーマット成分３０８ａ．．．３０８ｎの複数のインスタンスを含むことができ、マイクログラフ実行成分４１２はマイクログラフ実行成分３１０ａ．．．３１０ｎの複数の対応するインスタンスを含み得る）。先に説明したように、分割は、成分の様々なインスタンスにわたって現在アクティブなクエリを分けることを表す。この例では、各分割が行の異なる部分集合（又は作業単位）を処理する。分割成分４０８は、実行されるクエリ（例えば現在アクティブなクエリ）を各作業単位に割り当てる。例えば各作業単位について、実行されるクエリの総数が、その作業単位のための再フォーマット４１０及びマイクログラフ実行４１２の様々なインスタンスに割り当てられる。
【００６８】
（作業単位ごとの）分割を示すデータが分割成分４０８から、データフローグラフ（例えばマイクログラフ２００）内に入力するために作業単位内のデータを再フォーマットするための再フォーマット成分４１０のインスタンスに流れる。概して、再フォーマットプロセスは、データを或るフォーマットから別のフォーマットに変換するための一連の命令を含む。この例では、再フォーマット成分が作業単位を各マイクログラフによって読取可能なフォーマットに再フォーマットする。再フォーマットされたデータは、特定の作業単位に対してクエリを実行するための部分和を計算するマイクログラフ実行成分４１２のインスタンスに流れる。再フォーマット成分４１０は、再フォーマット成分３０８ａ〜ｎに関して説明した機能を実装する。マイクログラフ実行成分４１２は、マイクログラフ実行成分３１０ａ〜ｎに関して説明した機能を実装する。図５Ｂに関して以下でより詳細に説明するように、マイクログラフ実行成分４１２の各インスタンスは特定の作業単位に対して特定のクエリを実行する。つまり、実行される「ｐ」のクエリがある場合、各作業単位は「ｐ」回処理される。作業単位は並列に処理される。各作業単位について、クエリは並列に処理される。概して、部分和とは、データの一部（例えばファイルや特定の作業単位の一部）に対するクエリの実行結果を示すデータである。各作業単位について、マイクログラフ実行成分４１２のインスタンスが現在アクティブなクエリごとに実行される。それを行うために、システム１０２はマイクログラフ実行成分４１２のｐの異なるインスタンスを生成し、マイクログラフ実行成分４１２の各インスタンスは「ｐ」の現在アクティブなクエリの１つのためのものである。
【００６９】
分割成分４０８の一側面は、再フォーマット４１０及びマイクログラフ実行４１２のインスタンスを各作業単位に実際に割り当てる前に、分割成分４０８が前処理を行うことであり得る。前処理は、それぞれのインスタンス（例えばインスタンス１からｐ）に指定されるクエリのそれぞれ（例えばクエリ１からｐのそれぞれ）を実行するのに必要である可能性が高い計算資源を明らかにすること、及びクエリのそれぞれを実行するための計算資源の明らかにした需要に従ってインスタンス間で計算資源を分散させることを含むことができ、関連するクエリ（例えばクエリ１）を実行するのにより多くの計算資源が必要になる可能性が高いと判定されるインスタンス（例えばインスタンス１）に対し、関連するクエリを実行するのにより少ない計算資源が必要になる可能性が高い（例えばクエリ２はクエリ１よりも少ない計算資源を必要とする）と判定されるインスタンス（例えばインスタンス２）よりも多くの計算資源が割り当てられる。加えて又は代わりに、前処理は、分割成分４０８によって受信される作業単位のデータフォーマットを明らかにすること、及び明らかにした作業単位のデータフォーマットに基づいて作業単位をインスタンスの１つに割り当てることを含む。例えば分割成分４０８は、作業単位を明らかにしたデータフォーマットからインスタンスのそれぞれによって、具体的にはマイクログラフのそれぞれによって要求されるデータフォーマットに変換するのに必要な計算資源及び／又は時間を求めることができ、作業単位をインスタンスに割り当てることができ、それにより、実行されるクエリを実行することが最少の計算資源及び／又は変換時間を必要とする。
【００７０】
前処理は、データ処理速度を更に速めることができ、クエリの実行にかかる時間を更に短縮することができる。このことは、たとえ分散ネットワーク及び／又は大量のデータが関与してもデータセキュリティを確実にするために利用者、トランザクション、又はデータ片を非常に高速に認証しなければならないネットワーク（例えばクレジットカード処理、バンキング、又は飛行機旅行に関係する認証システム）内でも有益であり得る。
【００７１】
データフローグラフ４００は、特定の作業単位に対してクエリを実行するための部分和を作業単位のそれぞれについてまとめる収集成分４１４を含む。この例では、データ（例えば部分和を示すデータ）が収集成分４１４から、総和（global sum）を計算するマイクログラフ実行成分４１６に流れる。概して、総和はファイルに対してクエリを実行した（例えばファイルの全ての行範囲（作業単位）に対してクエリを実行した）最終結果を示すデータである。総和を計算するために、マイクログラフ実行成分４１６は、各作業単位に対するクエリの実行結果を集約する別のマイクログラフ（例えばマイクログラフ２００）を実行する。一例では、クエリに関する総和（例えばそのクエリを全ての作業単位に対して実行した結果）を計算するためにマイクログラフ実行成分４１６の関連インスタンスを各クエリが有する。つまり、マイクログラフ実行成分４１６は、特定のクエリに関する部分和を（様々な作業単位にわたって）集約することによって（例えばその特定のクエリに関する）総和を計算する。総和を示すデータは、マイクログラフ実行成分４１６から総和（例えばファイルに対してクエリを実行した結果）を公開する公開成分４１８に流れる。公開成分４１８の機能は、公開成分３１４に関して先に説明した機能を含む。
【００７２】
図５Ｂを参照し、図５００は図５Ａの成分４０６、４０８、４１０、４１２、及び４１４の実行結果の一例を示す。この例では、正規化成分４０６がファイルを「ｑ」の作業単位、例えば作業単位５０２ａ．．．５０２ｑに分ける。この例では、ファイルに対して実行される「ｐ」の現在アクティブなクエリもある。ファイルは、その後正規化成分４０６によって作業単位に分散されるデータを含む。先に説明したように、分割成分４０８が作業単位５０２ａ．．．５０２ｑのそれぞれに適用される。作業単位５０２ａ．．．５０２ｑのそれぞれに分割成分４０８を適用することは、作業単位ごとに「ｐ」のクエリを（例えば再フォーマット成分４１０の関連する別のインスタンスに加えて）マイクログラフ実行成分４１２の「ｐ」の異なるインスタンスにわたって分割する。この例では、分割成分４０８が、作業単位５０２ａについてマイクログラフ実行成分４１２のインスタンス５０６ａ．．．５０６ｐを生成し、各インスタンスはクエリに対応する。分割成分４０８は、作業単位５０２ｑについてマイクログラフ実行成分４１２のインスタンス５０８ａ．．．５０８ｐを生成し、各インスタンスはクエリに対応する。マイクログラフ実行成分のインスタンス３１０ａ．．．３１０ｎは、マイクログラフ実行成分４１２のインスタンス５０６ａ．．．５０６ｐのために使用することができ、又はかかるインスタンス５０６ａ．．．５０６ｐと同一とすることができ、再フォーマット成分４１０のそれぞれのインスタンス３０８ａ．．．３０８ｎと通信し得る。或いは、マイクログラフ実行成分４１２の複数のインスタンスと共に単一の再フォーマット成分４１０を使用することができる。
【００７３】
分割成分４０８は、マイクログラフに作業単位を転送する前に作業単位内のデータを再フォーマットするための、再フォーマット成分４１０のｑの異なるインスタンスを作業単位ごとに生成することもできる。作業単位ごとにマイクログラフ実行成分４１２のインスタンスを実行した後、収集成分４１４が作業単位の部分結果を生成する。例えば、マイクログラフ実行成分４１２のインスタンス５０６ａ．．．５０６ｐを実行した後、収集成分４１４は作業単位５０２ａの部分結果５１０ａを生成する。部分結果５１０ａは、作業単位５０２ａ内のデータに対してクエリ１．．．ｐを実行した結果を含む。マイクログラフ実行成分４１２のインスタンス５０８ａ．．．５０８ｐを実行した後、収集成分４１４は作業単位５０２ｑの部分結果５１０ｑを生成する。部分結果５１０ｑは、作業単位５０２ｑ内のデータに対してクエリ１．．．ｐを実行した結果を含む。収集成分４１４は、部分結果５１０ａ．．．５１０ｑをマイクログラフ実行成分４１６に伝送し、マイクログラフ実行成分４１６はファイル内の全ての作業単位に対して各クエリを実行するために総和を計算する。
【００７４】
本明細書に記載のデータフローグラフ（及びマイクログラフ）は、例えば誤り事象から回復可能である。回復性を確実にするために、（データフローグラフ又はマイクログラフ内の）成分がチェックポインティングによってローカル状態を保持する。ローカル状態は、処理が生じたデータストリーム内の位置、例えばデータストリーム内のどの箇所まで処理が生じたのかを規定する。ローカル状態は、その箇所までの処理結果も規定する。一例では、ファイルが一連の作業単位へと構成される。つまり、ファイル内に含まれるデータレコードが一連の作業単位へと構成される。各作業単位は、指定された識別情報（ＩＤ）を有する。データフローグラフが作業単位の処理を開始するとき、データフローグラフの１つ又は複数の成分がＩＤを記憶して、作業単位のどれが処理されているのかを規定する。成分はチェックポインティングも行い、作業単位に対して（成分によって規定される）動作を行った結果を記憶する。この結果はＩＤに関連して記憶される。チェックポインティングは、ストリーム内のどのデータが既に処理されているのか及びそのデータを処理した結果を規定するために、データストリーム内にマーカを効果的に挿入する。チェックポインティングによるこの回復性により、データフローグラフ又はマイクログラフがクラッシュし又は他の方法で誤りに遭遇した場合、データフローグラフ又はマイクログラフは、どの単位まで既に処理しているのかを突き止め、（例えばそのストリームを再び処理し始めなければならないのではなく）その作業単位から処理を続行することによって回復することができる。
【００７５】
一例では、システム１０２がファイルをディスク内、ディスク上、及び／又はメモリキャッシュ内に保持する（しかし例えばファイルをデータリポジトリ内には記憶しない）。この例では、クエリワーカエンジンが、ファイルに対するクエリオブジェクトの処理をクエリワーカエンジンが完了したというメッセージをクエリドライバに送信する。ファイルを処理している全てのクエリワーカエンジンからクエリドライバがそのメッセージを受信すると、そのファイルはアーカイブされ且つ／又はそのファイルはキャッシュ及び／又はディスクから消去される。この例では、ファイルをアーカイブすることは、ファイルがデータリポジトリ内に記憶されることをもたらさない。
【００７６】
図６を参照し、システム１０２（又はシステム１０２上のＲＴＴＴ１０３）は、リアルタイムデータストリーム内の様々な時点において登場するデータ項目に対して実行するためのクエリを選択する際にプロセス６００を実装する。動作面では、システム１０２は、データ項目のそれぞれに対してリアルタイムでストリームのデータ項目にアクセスする（６０２）。例えばシステム１０２は、データ待ち行列、（例えばシステム１０２の内部の又はシステム１０２の外部の）データリポジトリ、又はデータフィード（例えば図１のリアルタイムデータストリーム１０４）からリアルタイムデータストリームを受信することによってデータ項目にアクセスする。一例では、例えば或るデータ項目がストリーム内の別のデータ項目の前に生じることにより、２つ以上のデータ項目のそれぞれがストリーム内の様々な場所に位置する状態で、システム１０２が２つ以上のデータ項目のそれぞれに対してほぼリアルタイムで２つ以上のデータ項目にアクセスする。
【００７７】
システム１０２は、例えばデータ項目のコンテンツを分析することによってデータ項目の属性、例えば受信データ項目のデータタイプやフォーマットを明らかにする（６０４）。システム１０２は、リアルタイムデータストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスする。システム１０２は、実行候補である様々なクエリのためのクエリ基準に対して属性を比較する（６０６）。その比較に基づき、システム１０２は、様々な時点において登場する且つ／又はストリーム内の様々な場所に位置するデータ項目の２つ以上に対して実行するためのクエリを選択する（６０８）。例えばシステム１０２は、データ項目の属性の１つ又は複数によって満たされるクエリ基準を有するクエリを選択する。システム１０２は更に、例えばクエリに関連するデータ項目が受信されるときに基づき、様々な時点において（及び／又はデータ項目がストリームの様々な部分に登場するに関して）クエリを選択する。
【００７８】
改変形態では、システム１０２は、データ項目の１つ又は複数の属性に基づき、ストリーム内の様々な時点において登場するデータ項目の２つ以上に対して実行するための別のクエリも選択する。システム１０２は、選択したこれらのクエリの両方をストリームのデータ項目に対してリアルタイムで実行する。更に別の改変形態では、システム１０２は、例えばクエリのユーザ規定開始時間に基づき、その時点のためのアクティブクエリワーカエンジンを選択することによってクエリのどれを実行するのかを決定する。先に説明したように、クエリワーカエンジンはクエリの開始時間においてアクティブになるようにプログラムされる。システム１０２（又はクエリドライバ）は、現在の作業単位に対して実行される全てのクエリについて、クエリワーカエンジンの１つのインスタンスを呼び出す。
【００７９】
図７を参照し、システム１０２（又はシステム１０２上のＲＴＴＴ１０３）は、クエリが（例えばその後登場するデータ項目に対して）実行され続けるとき、クエリの（例えばほぼリアルタイムの）中間結果を与えるためにリアルタイムデータストリーム内の様々な時点において登場するデータ項目に対してクエリを実行する際にプロセス７００を実装する。動作面では、システム１０２は、ストリーム内の様々な時点において登場するデータ項目の２つ以上に対してクエリを時々実行する（７０２）。例えばシステム１０２は、（ｉ）リアルタイムデータストリーム内の第１のデータ項目（第１のデータ項目は第１の時点において受信される）、及び（ｉｉ）リアルタイムデータストリーム内の第２のデータ項目（第２のデータ項目は第２の時点において受信される）に対してクエリを実行する。
【００８０】
システム１０２は、クエリを実装する上記のデータフローグラフを断続的に（又は周期的に）実行することによってクエリを実行する。この例では、データフローグラフがクエリを実装するための実行可能コンピュータコードを含む。クエリを実行することに基づき、システム１０２が最初の結果、例えばクエリの実行結果を示す情報を生成する（７０４）。システム１０２は、クエリが後の時点において実行されるかどうかを判定する（７０６）。例えばシステム１０２は、クエリ仕様内のクエリ停止時間に基づいてこの判定を行う。クエリが後の時点において実行されないとシステム１０２が判定する場合、システム１０２は、最初のクエリ実行結果を最終結果であるように設定する（７０８）。クエリが後の時点において実行されるとシステム１０２が判定する場合、システム１０２はクエリを再実行する（７１０）。クエリの再実行に基づき、システム１０２は、再実行結果をリアルタイムデータストリーム内で過去に登場したデータ項目に対してクエリを実行した過去の結果（例えば最初の結果）と集約することによって中間結果を生成する（７１２）。一例では、クエリが実行されているとき、例えばその後の結果と後で集約される中間結果をシステム１０２が生成する。この例では、例えばどのカード又はトランザクションが危険にさらされているのかを明らかにするために、利用者（例えばビジネスアナリスト）が中間結果を表示して見直したい可能性がある。この例では、クエリの実行が完了する前に、システム１０２がクエリ実行の中間結果を利用者のクライアント装置に伝送する。
【００８１】
システム１０２は、クエリが後の時点において実行されるかどうかを判定する（７１４）。クエリが後の時点において実行されないとシステム１０２が判定する場合、システム１０２は、クエリ実行の中間結果を最終結果であるように設定する（７１６）。クエリが後の時点において実行されるとシステム１０２が判定する場合、システム１０２は必要に応じて動作７１０、７１２、７１４、７１６を繰り返す。これらの動作を繰り返すことに基づき、システム１０２は、後の時点においてクエリを実行することに関する結果と中間結果とを（後の時点において）集約し、例えば最終結果を生成する。この例では、システム１０２が最終結果をデータリポジトリ内に記憶し、中間結果を破棄する。最終結果（又は中間結果）に基づき、システム１０２は既定条件の検出を利用者に知らせるためのリアルタイムの警告を生成する。
【００８２】
本明細書に記載の技法を使用し、データが受信されるとき、及びデータベースの記憶済みのデータにアクセスする（待ち時間を増やす）ことなしに、ＲＴＴＴはリアルタイムデータストリーム内のデータ項目に対して同時クエリを実行する。データの受信時にリアルタイムでクエリを実行することにより、ＲＴＴＴはクエリが実行されるとき、クエリ実行のリアルタイムの結果（例えば中間結果及び最終結果の両方）を生成する。結果を受信するために、利用者は全てのデータが受信されるのを待つ必要がない。むしろ利用者は、クエリが実行されているときにリアルタイムで結果を受信することができる。
【００８３】
加えて、将来の既定のモニタリング期間にわたってユーザ定義クエリが実行される。データはモニタリング期間中に継続的に到着し、結果を生成する際にモニタリング期間中の入力データが利用される。静的データに対する一時クエリの従来のデータベースプロセスモデルではなく、ＲＴＴＴは一時データに対する静的クエリを実装する。クエリは利用者によって事前に作成され、それらのクエリはモニタリングの開始時間までシステム内で休止状態にある。利用者は簡単なインタフェースを使用して、必要な属性、フィルタリング、集約、ソート基準、開始／停止時間等のクエリ制御パラメータ、任意選択的な警告条件、結果受信者リスト等のクエリ術語を規定する。クエリは連続したデータフィード（例えばメッセージ待ち行列やポート上のメッセージ）を「リスン」し、モニタリングの開始時間に「起動」し、ストリーム内のデータに対して計算を行い、ストリーム内にデータがない場合はスリープする。中間結果はクエリの「寿命」の全体を通して入手可能であり、最終結果はクエリのモニタリング期間の終了時に直ちに入手可能である。
【００８４】
図８を参照し、図８００は、例えば図５Ａの脈絡で説明したデータフローグラフの基礎を成すシステムにより、（例えば５つの異なるマイクログラフ、例えばマイクログラフ２００によって実行される）５つの同時クエリによってファイル内のデータレコードを処理することを概念的に表示する。この例では、ＲＴＴＴ１０３は（ひいてはリアルタイムデータストリーム８０１内に含まれる）ファイル８０２ａ．．．８０２ｎを周期的に受信する。ＲＴＴＴ１０３は、ファイル８０２ａ．．．８０２ｎを時間間隔Ｔ１．．．Ｔｎのそれぞれにおいて受信する。この例では、ファイル８０２ａ．．．８０２ｎのそれぞれがストリーム８０１内の様々な場所に位置する。例えばファイル８０２ａは、ファイル８０２ｂを含むストリーム８０１内の場所（例えば部分）の前に来る、ストリーム８０１内の別の場所（例えばストリーム８０１の特定の部分）に位置する。つまり、ストリーム８０１の一部はファイル８０２ａを含み、別の部分はファイル８０２ｂを含み、その後も同様に続く。図８に示す説明のための例は、クエリ８０６、８０８、８１０、８１２、８１４がファイル８０２ａ．．．８０２ｎに対して実行される特定の時点を示す。つまり、ファイル８０２ａ．．．８０２ｎは特定の時点（例えばクエリ８０６、８０８、８１０、８１２、８１４が同時に実行されている時点）の間に受信されるストリーム８０１内のファイルを表す。この例では、クエリ８０６、８０８、８１０、８１２、８１４の１つ又は複数が異なる時間間隔に対して実行されるので、クエリ８０６、８０８、８１０、８１２、８１４は図８に示していない（ストリーム８０１内に含まれる）他のファイルに対しても実行され得る。この例では、最終結果を決定する際、それらの他のファイルに対する実行結果を使用することができる。
【００８５】
この例では、ＲＴＴＴ１０３が時刻０８：００：３０においてファイル８０２ａを、時刻０８：０１：００においてファイル８０２ｂを、その後も同様にファイルを受信する。ＲＴＴＴ１０３は３０秒ごとに新たなファイルを受信する。ファイル８０２はレコード８０４ａ．．．８０４ｎを含む。この例では、ファイル８０２内に２５０，０００個のレコードがある。この例では各レコードが以下のタイプのデータ、つまり日付（dd/mmm/yyyy）、時間（hh:mm:ss）、製品識別情報（「prod id.」）、国識別情報（「country id.」）、州識別情報「（state id.）」、及び売上高を含む。他のファイル（例えばファイル８０２ｂ．．．８０２ｎ）も個々のデータレコードを含む。
【００８６】
この例では、運動靴の会社に（例えば新たなマーケティングキャンペーンのリリース後の）スニーカの売上高を見たい、且つ例えばマーケティングキャンペーンの直後やその間のスニーカ販売の上昇（例えば増加）量がどれ位か等、質問を動的に、例えばリアルタイムで生成する経営者がいる。
【００８７】
この例では、経営者がＲＴＴＴ１０３を使用してクエリ８０６、８０８、８１０、８１２、８１４を作成し、ファイル８０２ａ．．．８０２ｎに対して実行する。この例では、クエリ８０６、８０８、８１０、８１２、８１４が様々な期間にわたって実行され且つ／又は様々な時点において実行を開始するので、クエリ８０６、８０８、８１０、８１２、８１４のそれぞれは、ファイルが受信されるとき及びクエリの実行が開始し停止するときに応じてファイル８０２ａ．．．８０２ｎの一部しか処理することができない。
【００８８】
この例では、運動靴の会社が２つの異なる運動靴のブランド、Acmeスニーカとcool runningスニーカに対して２つの世界的なキャンペーンを立ち上げている。Acmeスニーカのキャンペーンは、２０１４年１１月１４日（１４／ＮＯＶ／２０１４）の０８：００：００（キャンペーンが立ち上げられる各国の現地時間）に立ち上げられる。cool runningスニーカのキャンペーンは、２０１４年１１月１４日（１４／ＮＯＶ／２０１４）の１３：００：００（キャンペーンが立ち上げられる各国の現地時間）に立ち上げられる。クエリ８０６、８０８、８１０、８１２、８１４のそれぞれは、「DD/MM/YYYYから始まるＮ時間の期間にわたる国Ｙ（又は国内の特定の州）での製品Ｘの総売上高及び／又はトランザクションカウントを表示せよ」のフォーマットに概して従う。この例では、クエリ８０６は、１４／Ｎｏｖ／２０１４の０８：００：００から１０時間の期間にわたってSingaporeで売れたAcmeスニーカのトランザクション数（Ｔｘ）をカウントするためのクエリである。クエリ８０８は、１４／Ｎｏｖ／２０１４の０８：００：００から１０時間の期間にわたってGeorgia, USAで売れたAcmeスニーカのトランザクション数（Ｔｘ）をカウントするためのクエリである。この例では、クエリ８０８が国全体ではなく特定の州に関する基準値を対象とするので、クエリ８０８の方が細粒度である、クエリ８０６。クエリ８１０は、１４／Ｎｏｖ／２０１４の０８：００：００から１０時間の期間にわたって米国で売れたAcmeスニーカの総売上高をカウントするためのクエリである。クエリ８１２は、１４／Ｎｏｖ／２０１４の１３：００：００から２４時間の期間にわたって日本で売れたcool runningスニーカの総売上高をカウントするためのクエリである。クエリ８１４は、１４／Ｎｏｖ／２０１４の１３：００：００から２４時間の期間にわたって米国で売れたcool runningスニーカの総売上高及びトランザクション数をカウントするためのクエリである。
【００８９】
本明細書に記載の技法を使用し、ＲＴＴＴ１０３は、電子データウェアハウスにレコードを記憶することなしに、レコード（例えばファイル８０２ａのレコード８０４ａ．．．８０４ｎ及びファイル８０２ｂ．．．８０２ｎ内のレコード）をクエリ８０６、８０８、８１０、８１２、８１４に同時に、例えばリアルタイム／ほぼリアルタイムで通す。クエリ８０６、８０８、８１０、８１２、８１４がレコード（例えば８０４ａ．．．８０４ｎ）を処理すると、ＲＴＴＴ１０３は結果８１６、８１８、８２０、８２２、８２４をそれぞれ生成し、クエリが処理されているときクエリ実行の実時間の結果を与える。この例では、ＲＴＴＴ１０３が毎分約５００，０００個のレコードを処理し、毎分複数のファイルを受信する。この例では、ＲＴＴＴ１０３がクエリ８０６、８０８、８１０、８１２、８１４を継続的に実行し、ファイル８０２ａ．．．８０２ｎが受信されるときファイル８０２ａ．．．８０２ｎを例えばほぼリアルタイムで処理する。例えば時刻０８：００：００において、クエリ８０６、８０８、８１０、８１２、８１４がファイル８０２ａに対して実行される。時刻０８：００：３０において、クエリ８０６、８０８、８１０、８１２、８１４がファイル８０２ｂに対して実行され、（例えばhatファイルが３０秒ごとに受信される場合は）その後も同様に続く。
【００９０】
クエリ８０６を実行することに基づき、ＲＴＴＴは（例えばデータがファイルとして周期的に受信される場合）新たな入力データファイルを処理した後で毎回中間（増分）結果を生成する。この例では、クエリ条件に一致するレコードがある場合、現在の１組の入力データが処理されるや否や中間結果が作り出される。ファイルは３０秒ごとに到着し、０８：００：００に開始するクエリ８０６、８０８、及び８１０について中間結果が０８：００：３０、０８：０１：００等々において作り出され又は更新される。この例では、それらのクエリのための最初のデータファイルが到着するとき８：００：００の時点で少なくとも１足のAcmeの靴がSingaporeとGeorgiaで直ぐに売れている。販売がない場合、それらの場所で最初の１足が売れるとき８ＡＭ以降の任意の時点において出力が作り出される。
【００９１】
この例では、ＲＴＴＴ１０３がSingaporeでのAcmeの靴に関するトランザクション数を表示する結果８１６を生成する。この例では、結果８１６が中間（例えば部分）結果８１６ａ、８１６ｂ、及び最終結果８１６ｃを含む。中間結果８１６ａ、８１６ｂによって示すように、最初の１足のAcmeの靴はSingaporeで０８：００：００から０８：００：３０の間に売れており、第２の１足のAcmeの靴はSingaporeで０８：００：３０から０８：０１：００の間にそれぞれ売れている。この例では、ＲＴＴＴがクエリ基準に一致するレコードを検出するとき中間結果が（リアルタイムで）更新される。この例では、中間結果８１６ａ、８１６ｂは、例えば０８：００：３０、０８：０１：００等々において中間結果が作り出される時間を表示する。この例では、中間結果はトランザクションが生じた時間（又は増分若しくは追加のトランザクションが生じた時間）を表示する。
【００９２】
この例では、表示される最終結果のそれぞれは、クエリが実行を開始したときからの集約済みの結果である。例えば、１８：００：００に関して示す最終結果８１６ｃ（例えば１５７，６９２個のトランザクション）は０８：００：００から１８：００：００までのトランザクション数である。この例では、１８：００：００に示す結果は複数のファイルを処理した結果である。これらの結果のそれぞれは、ＲＴＴＴ１０３によってファイルが受信されるとき生で、ほぼリアルタイムで提供される。本明細書に記載の技法を使用し、クエリがデータに対してリアルタイムで且つデータの受信時に作用するので、データの記憶はない。クエリは、履歴データではなく将来到着するデータに作用するので将来的なものである。クエリは数秒から数週間又は数カ月に至る持続時間にわたって実行されるように設定され得る。ＲＴＴＴは、モニタリング期間中に利用者が中間結果を受信する能力も与える。データは１回読み取られ、個々のクエリロジックを独立に適用するクエリワーカに分散される。例えばシステムは、システム内で同時にアクティブな何百ものクエリワーカを含み得る。事業体に送られる情報の待ち時間は数秒程度である。
【００９３】
図９を参照し、図９００は２０１５年１１月１４日の８ａｍから２０１５年１１月１５日８ａｍまでの２４時間の期間にわたり複数のクエリを動的に実行することの視覚的な説明図を示す。クエリ９０２、９０４は、２０１５年１１月１４日の８ａｍから開始して１０時間にわたる実行が予定されている。クエリ９０６は、同じく２０１５年１１月１４日の８ａｍから開始して２４時間にわたる実行が予定されている。８ａｍにおいて（又は８ａｍより前の予め規定された時間間隔において）、クエリドライバ１０８（図１）がアクティブクエリを求めて管理リポジトリ１１２をポーリングする。ポーリングに基づき、クエリドライバ１０８が８ａｍに実行が予定されているものとしてクエリ９０２、９０４、９０６を識別し、クエリ９０２、９０４、９０６を実行するためにクエリワーカエンジンをインスタンス化する。クエリ９０２、９０４、９０６は、ほぼリアルタイムのデータストリーム９１１に対して実行される。
【００９４】
この例では、クエリ９０８が、２０１５年１１月１４日の１ｐｍから開始し、２０１５年１１月１４日の１１ｐｍに終了する１０時間にわたる実行が予定されている。クエリ９１０は、２０１５年１１月１４日の１ｐｍから開始して翌日（２０１４年１１月１５日）の１ｐｍに終了する２４時間にわたる実行が予定されている。管理リポジトリ１１２の断続的なポーリングの間、クエリドライバ１０８は実行のためのアクティブクエリとしてクエリ９０８、９１０を識別し、１ｐｍにおいてクエリ９０８、９１０の実行を開始させる一方、クエリ９０２、９０４、９０６は依然として実行されている。この例では、クエリ９０８、９１０が、既に実行されている他のクエリ（即ちクエリ９０２、９０４、９０６）と同時に実行されるように動的に追加される。６ｐｍにおいて、クエリ９０２、９０４が実行を完了する一方、クエリ９０６、９０８、９１０は実行を続ける。１１ｐｍにおいて、クエリ９０８が実行を完了する一方、クエリ９０６、９１０は実行を続ける。翌日の８ａｍにおいて、クエリ９０６が実行を完了するのに対し、クエリ９１０はその実行を続ける。
【００９５】
図９は、２４時間（２０１４年１１月１４日の８ａｍから２０１４年１１月１５日の８ａｍまで）の期間中にほぼリアルタイムのデータストリーム９１１内でＲＴＴＴ１０３によって受信されたファイルであるファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎも示す。この例では、ＲＴＴＴ１０３がファイル９１２ａ．．．９１２ｎを８ａｍ〜１ｐｍまでに、ファイル９１４ａ．．．９１４ｎを１ｐｍ〜６ｐｍまでに、ファイル９１６ａ．．．９１６ｎを６ｐｍ〜１１ｐｍまでに、ファイル９１８ａ．．．９１８ｎを１１ｐｍ〜翌日の８ａｍまでに受信する。この例では、ほぼリアルタイムのデータストリーム９１１内に含まれるファイルが、例えば３０秒ごとを含む様々な時間間隔においてＲＴＴＴ１０３によって受信される。ファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎに対して（それらのファイルのそれぞれが受信されるとき）適切なクエリが実行され、ファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎを処理することに基づいてそれらのクエリの中間（又は最終）結果が更新される。クエリ９０２、９０４、９０６、９０８、９１０は、クエリの開始時間及び停止時間に応じてファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎの様々な組合せに対して実行される。
【００９６】
この例では、ＲＴＴＴ１０３がファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎを８ａｍ〜６ｐｍの間に受信する。クエリ９０２、９０４は、ファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎのそれぞれが受信されるときファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎをほぼリアルタイムで処理し、クエリ９０２、９０４を実行することに関する中間結果及び最終結果を生成する。
【００９７】
ＲＴＴＴ１０３は、８ａｍ（１１／１４／２０１４）〜８ａｍ（１１／１５／２０１４）の間の２４時間の期間中にファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎを受信する。クエリ９０６は、ファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎのそれぞれが受信されるときファイル９１２ａ．．．９１２ｎ、９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎをほぼリアルタイムで処理し、クエリ９０６を実行することに関する中間結果及び最終結果を生成する。ＲＴＴＴ１０３はファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎを１ｐｍ〜１１ｐｍの間の１０時間の期間中に受信する。クエリ９０８は、ファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎのそれぞれが受信されるときファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎをほぼリアルタイムで処理し、クエリ９０８を実行することに関する中間結果及び最終結果を生成する。ＲＴＴＴ１０３はファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎを１ｐｍ〜翌日の８ａｍの間に受信する。クエリ９１０は、２０１４年１１月１４日の１ｐｍから開始して２４時間実行されることが予定されている。クエリ９１０は、ファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎのそれぞれが受信されるときファイル９１４ａ．．．９１４ｎ、９１６ａ．．．９１６ｎ、９１８ａ．．．９１８ｎをほぼリアルタイムで処理し、クエリ９１０を実行することに関する中間結果を生成する。クエリ９１０は、クエリ９１０が完了するまで（１１／１５／２０１５の）８ａｍ以降に受信される（不図示の）他のファイルを処理し続ける。
【００９８】
一例では、データ処理環境が、頂点間の（作業要素、即ちデータの流れを表す）有向辺によって接続される（データ処理成分又はデータセットを表す）頂点を含むデータフローグラフとしてクエリを開発するための環境を含む。
【００９９】
概略
図１０Ａは、主要素の相互関係を示す本発明の一実施形態のブロック図である。グラフィック開発環境（ＧＤＥ）１００２は、実行可能グラフを作成し、グラフ成分のパラメータを定めるためのユーザインタフェースを提供する。ＧＤＥは、例えば本発明の譲受人から入手可能なCO>OPERATING SYSTEM（登録商標）のＧＤＥとすることができる。ＧＤＥ１００２は、リポジトリ１００４及び並列オペレーティングシステム１００６と通信する。リポジトリ１００４及び並列オペレーティングシステム１００６に更に結合されるのは、ウェブインタフェース１００８及び実行部１０１０である。
【０１００】
リポジトリ１００４は、好ましくはグラフベースのアプリケーションの開発及び実行、並びにグラフベースのアプリケーションと他のシステム（例えば他のオペレーティングシステム）との間のメタデータの交換を支援するように設計される拡張可能なオブジェクト指向データベースシステムである。リポジトリ１００４は、（これだけに限定されないが）ドキュメンテーション、レコードフォーマット、変換関数、グラフ、ジョブ、及びモニタリング情報を含むあらゆる種類のメタデータのための記憶システムである。リポジトリは当技術分野で知られており、例えば米国特許第５，９３０，７９４号、同第６，０３２，１５８号、同第６，０３８，５５８号、及び同第６，０４４，３７４号を参照されたい。
【０１０１】
並列オペレーティングシステム１００６は、ＧＤＥ１００２内で生成されるデータフローグラフの表現を受け付け、そのグラフによって定義される処理ロジック及び資源に対応するコンピュータ命令を生成する。次いで、並列オペレーティングシステム１００６は、典型的にはそれらの命令を（同種でなくても良い）複数個のプロセッサ上で実行する。適切な並列オペレーティングシステムは、本発明の譲受人から入手可能なCO>OPERATING SYSTEM（登録商標）である。
【０１０２】
ウェブインタフェース１００８は、リポジトリ１００４のコンテンツのウェブブラウザによるビューを提供する。ウェブインタフェース１００８を使用し、利用者はオブジェクトの閲覧、新たなオブジェクトの作成、既存のオブジェクトの変更、アプリケーションパラメータの規定、ジョブのスケジューリング等を行うことができる。ウェブインタフェース１００８は、グラフのランタイムパラメータに関してリポジトリ１００４内に記憶された情報に基づき、パラメータ化グラフのためのフォームベースのユーザインタフェースを自動で作成する。
【０１０３】
実行部１０１０は、ウェブインタフェース１００８によってアクセスされる任意選択的なリポジトリベースのジョブスケジューリングシステムである。実行部１０１０は、ジョブ及びジョブ待ち行列をリポジトリ１００４内のオブジェクトとして保持し、ウェブインタフェース１００８がジョブ及びジョブ待ち行列のビューを提供し、その操作を助ける。
【０１０４】
図１０Ｂは、入力データセット１０２２がフロー１０２４によってフィルタ成分１０２６に接続されている、簡単なデータフローグラフ１０２０を示す。フィルタ成分１０２６は、フロー１０２８によって出力データセット１０３０に接続される。データセットは、例えばデータフローグラフによって実行される計算のためにデータ（例えば入力データセット）を提供し又はデータ（例えば出力データセット）を受信するファイルやデータベーステーブルを含み得る。
【０１０５】
データフローグラフ内の「フロー」によって表されるデータフローは、離散的なデータ要素へと編成することができる。例えばそれらの要素は、レコード（又は行）及びフィールド（又は列）へと編成されるデータセットからのレコードを含み得る。フィールドのシーケンス及びレコード内の値に対応するデータタイプを記述するメタデータは「レコードフォーマット」と呼ばれる。
【０１０６】
グラフ内の成分及びデータセットは、フローに接続するための入力／出力ポートを有する。フロー１０２４及び１０２８の「ソース端」は、入力データセット１０２２の出力ポート及びフィルタ成分１０２６の出力ポートのそれぞれとインタフェースする。フロー１０２４及び１０２８の「シンク端」は、フィルタ成分１０２６の入力ポート及び出力データセット１０３０の入力ポートのそれぞれとインタフェースする。データセット又は成分の入力ポート又は出力ポートは、ポートの内外に流れるデータのためのレコードフォーマット等のメタデータに関連する。
【０１０７】
ポートのレコードフォーマット又は成分に関連する他のメタデータを含むパラメータは、パラメータスコーピングのための規則に従って値にバインドされる。パラメータは、設計時に又はランタイム時（即ち以下に記載の「ランタイムパラメータ」）に値にバインドされ得る。パラメータの値は、例えばユーザインタフェース上で（例えばプロンプトに応答して）利用者によって定義され、ファイルから定義され、又は同じコンテキスト若しくは異なるコンテキスト内の別のパラメータに関して定義され得る。例えば、別のパラメータに対する「〜と同じ（same as）」関係を有するようにパラメータを指定することにより、パラメータを異なるコンテキストからエクスポートすることができる（例えば異なる成分のコンテキストで評価されるパラメータ）。
【０１０８】
グラフ内で使用される成分は、「下位グラフ」を形成するフローによって相互接続される他の成分を使用して実装することができる。別のグラフ内の成分として下位グラフを使用する前に、成分の入力及び／又は出力ポート等、成分の様々な特性を定義する。一部の事例では、下位グラフの成分間の関係に関与する成分の特性は、グラフ内でその成分が使用される前に規定されるべきである。例えば、下位グラフの成分のランタイムパラメータに関するプロンプティングオーダを選択する必要があり得る。グラフ内の成分のランタイムパラメータに関するプロンプティングオーダを選択するための手法について以下でより詳細に説明する。
【０１０９】
メタデータの伝搬
レコードフォーマットパラメータ等、ポートに関連するメタデータの値は「伝搬」によって得ることができる。メタデータの伝搬は「外部的に」又は「内部的に」に生じ得る。外部的なメタデータの伝搬では、第１の成分のポートに関するレコードフォーマットパラメータの値は、フローによって第１の成分に接続される第２の成分のポートに関するレコードフォーマット値を伝搬することによって値を得ることができる。値は、フローのソース端からシンク端へと下流に、又はフローのシンク端からソース端へと上流に伝搬し得る。メタデータは、定義されたメタデータを有するポートから定義されたメタデータを有さないポートに伝搬する。
【０１１０】
内部的なメタデータの伝搬では、成分の１つのポートに対して定義されるメタデータが、成分を実装する下位グラフに基づいてその成分の別のポートに伝搬する。一部の事例では、内部的なメタデータの伝搬が「非変換」内部データパス上で行われる。例えば利用者は、ソート成分に流れ込むレコードのデータタイプを規定するメタデータをソート成分の入力ポートに提供し得る。ソート成分はレコードを再順序付けするが変換はしないので、データタイプはソート成分によって変更されず、ソート成分の出力ポートに変更されずに伝搬し、ソート成分から流れ出るレコードのデータタイプを正確に記述する。
【０１１１】
一部の成分は、自らを流れるデータを変換（又は任意選択的に変換）する。例えば利用者は、フィルタ成分に流れ込むレコードのフィールドを規定するメタデータをフィルタ成分の入力ポートに提供し得る。フィルタ成分は、各レコードから所与のフィールドの値を削除することができる。フィルタ成分の出力ポートに関するメタデータが、成分のフィルタ動作による入力ポートのメタデータに関係することを規定するために、メタデータの定義を使用することができる。例えば、レコードフィールドを規定するメタデータからフィルタ済みのフィールドを削除することができる。かかるメタデータの定義は、入力ポートのメタデータが分かる前にさえ供給され得る。従って以下でより詳細に説明するように、或るポートに関連するメタデータを別のポートのためのメタデータを含む１つ又は複数のパラメータに応じて規定できるようにすることにより、メタデータは変換内部データパス上でさえ伝搬し得る。
【０１１２】
内部的なメタデータの伝搬及び外部的なメタデータの伝搬は、グラフが構築されている設計時に生じるように任意選択的に構成することができ、利用者はグラフ内の一部の成分の一部のポートに関するメタデータを供給する。或いはメタデータの伝搬は、ランタイム時又はランタイム直前を含むグラフの構築後に生じ得る。
【０１１３】
ランタイムパラメータ
ランタイムパラメータは、アプリケーションビルダがパラメータ設定（例えばソート機能、ファイル名称、レコードフォーマット、変換関数等の主要パラメータ）の値をランタイム（例えばコンピュータシステム上でプログラムが実行される又は近々実行される時点）まで保留することを可能にする。ランタイムパラメータの値は、エンドユーザによって供給され又は他のランタイムパラメータ若しくはオブジェクトリポジトリ内に記憶されるオブジェクトの組合せから導出され得る。
【０１１４】
ランタイムパラメータは、アプリケーションに一定量の柔軟性を加える。更なる柔軟性は、要求に応じてメタデータを計算するためのパラメータ（データフォーマット又はタイプ、及びプログラムロジック又は変換）を使用することによって実現される。タイプ及び変換は、他のタイプ及び変換、利用者が供給するパラメータ値、及び（例えばリポジトリからの）記憶済みのオブジェクトから合成して作ることができる。このことは、任意の種類の入力データに作用する、又はその構造がランタイムパラメータ値によって直接若しくは間接的に制御される一連の変換によってデータを作り出す、「汎用」アプリケーションを構築できるようにする。
【０１１５】
一部の実装形態では、ランタイムパラメータを作成し又は編集するとき、開発者はパラメータごとのプロンプト及びプロンプトを表示するための条件を規定することができる。条件が満たされる場合、システムはパラメータ値を受け付けるためのグラフィカルユーザインタフェース（ＧＵＩ）コントロールを提示するようにプロンプティング指令を解釈する。
【０１１６】
ランタイムパラメータの指定
ランタイムパラメータは、グラフの実行時（即ちランタイム）における外部入力に基づいて開発者がグラフの挙動を修正するためのメカニズムを提供する。好ましい実施形態では、それらの外部値は利用者が直接入力することによって与えられる。但し、それらの外部値は、環境変数やコマンドラインパラメータを含む幾つかの異なる情報源から来る場合もある。ＧＤＥ１００２は、これらの状況の全てを扱うための並びにグラフがＧＤＥから直接実行される場合は開発者に試験値を促すための正しいコードを生成する。ランタイムパラメータを使用し、開発者は例えば、入力ファイルのパスが特定の名称を有する環境変数によって提供されることを明確に宣言することができ、その環境変数はグラフのインタフェースの既知の部分になる。従って、かかるパラメータに対する明確に定義されたインタフェースがある。例えば特定のグラフの実行を制御する１組のパラメータを見つけるために、生成済みのシェルスクリプトを読み取り、環境変数及びコマンドライン引数に対する参照のためにそのシェルスクリプトを検索する必要はない。
【０１１７】
図１１は、指定のランタイムパラメータを有する、ロールアップ成分２００２及びソート成分２００４を有する典型的なグラフ２０００のブロック図である。入力用のインタフェース２００６内で、ランタイムパラメータ（ソート成分２００４のためのキー及びロールアップ成分２００２のための規則）が利用者に提示される。以下の節では、ランタイムパラメータをどのように指定するのか、及びユーザ入力を促すランタイムパラメータの提示用の統合ユーザインタフェースをどのように作成するのかについて説明する。
【０１１８】
ランタイムパラメータは、幾つかのやり方で指定され又は定義され得る。１つのやり方は、ＧＤＥ１００２内で表示されるランタイムパラメータグリッドを使用することによる。
【０１１９】
図１２は、グラフに関連付けられるランタイムパラメータグリッド３０００を表すグラフィカルダイヤログの一実施形態の図である。適切なフィールドを単純に埋めることによって新たなランタイムパラメータが作成される。各ランタイムパラメータに関連するオブジェクトがリポジトリ１００４内に作成され、パラメータを利用する全てのグラフ成分にリンクされる。例えば、グラフソート成分のためのソートキーがランタイムパラメータとして定義される場合、ソートキーのパラメータを表すオブジェクトがリポジトリ１００４内に記憶され、関連するソート成分にリンクされる。ランタイムパラメータを定める代わりのやり方は、グラフ成分の既存のパラメータに特別にフラグを立て、それを他の成分に対して「可視化」する（エクスポートする）ことである。これらの方法の組合せを使用しても良い。例えば、成分を作成するとき、開発者はランタイムパラメータとしてその成分の特定のパラメータを指定することができる。開発者は、グラフに関するランタイムパラメータ全てのデフォルト値及び他の特性を設定し、新たなランタイムパラメータを定めるためにパラメータグリッドを使用することができる。
【０１２０】
グラフが実行されるとき、ユーザ入力から又は外部のプログラム源（例えばコマンドラインパラメータや環境変数）から各パラメータの値を得るためにパラメータが処理される。図示の実施形態では、ランタイムパラメータグリッド３０００が以下のフィールドを含む。
【０１２１】
Name（名称）３００２−このフィールドはランタイムパラメータの名称を含む。名称について示す一例は「Score_threshold」である。
【０１２２】
Type（タイプ）３００４−このフィールドはランタイムパラメータ内で許可される値のタイプを含む。タイプについて示す一例は「整数」である。図示の実施形態でサポートされるタイプは以下の通りである。
・ブール−値は真又は偽であり得る
・選択−値は値一覧のうちの１つである
・コレータ−主要パラメータ値
・データセット−外部のデータファイルの名称及び位置
・日付−日付値
・式−算術式、論理式、及び／又は条件式（例えば選択式）
・浮動小数−浮動小数点数
・整数−整数値
・レイアウト−並列レイアウト又は直列レイアウトの定義
・レコードフォーマット−レコード記述又はレコード記述を含むファイル
・文字列−任意の文字列
・変換−変換記述又は変換記述を含むファイル
【０１２３】
Location(Loc)（位置）３００６−このフィールドはレコードフォーマット及び変換のタイプと共に使用される。このフィールドは、タイプフィールド３００４がファイルの位置を記述するかどうか又は埋込記述を含むかどうかを規定する。サポートされる位置は以下の通りである。
・埋込−パラメータがレコード記述又は変換記述を含む。
・ホスト−パラメータがホストマシン上のファイルへの参照を含む。
・ローカル−パラメータがローカルマシン上のファイルへの参照を含む。
・リポジトリ−パラメータが参照を含む、リポジトリ変換又はレコードフォーマット。
【０１２４】
Default Value（デフォルト値）３００８−このフィールドは、（１）外部のプログラム源から他の値が提供されない場合に使用されるランタイムパラメータのデフォルト値、又は（２）ユーザ入力からランタイム値をどのように導出するのか若しくはグラフを実行する利用者からその情報をどのように対話式に得るのかを記述する規則又は式を含む。後者の場合、利用者が入力値を与えない場合にランタイムパラメータに値を与えるために、第２のデフォルト値のフィールド（不図示）を使用することができる。「ブール」及び「選択」のタイプでは、このフィールドは利用者を有効な選択肢に限定する。「レイアウト」のタイプでは、このフィールドは読み取り専用であり、現在定められているレイアウトの定義を表示する。他の全てのタイプでは、このフィールドは好ましくは利用者が有効な文字列を入力することができる簡単なテキストエディタである。
【０１２５】
Edit（編集）３０１０−パラメータ行内の編集空間３０１０（又はアイコン、例えば鉛筆アイコン）をクリックすると、デフォルト値のフィールド３００８を編集するための様々なオプションを利用者に紹介するより高度な編集ウィンドウが提示される。図示の実施形態では、以下のエディタがその関連するタイプに使用可能である。
・単一ライン編集−整数、浮動、日付、及び文字列のタイプ用。
・選択ダイヤログ−ブール及び選択のタイプ用。
・キーエディタ−コレータのタイプ用。
・ファイルブラウザ−データセットのタイプ、並びに位置が埋め込まれていないレコードフォーマット及び変換のタイプ用。
・変換エディタ−埋込の位置を有する変換のタイプ用。
・レコードフォーマットエディタ−埋込の位置を有するレコードフォーマットのタイプ用。
・式エディタ−式のタイプ用。
・レイアウトエディタ−レイアウトのタイプ用。
【０１２６】
上記のエディタはKind（種類）フィールドの値（以下参照）が（パラメータ言語の）「ＰＬ」でない限り起動される。この場合、グラフの実行時にパラメータ値を導出し又は促すための規則を定めるためのエディタが利用者に提示される。
【０１２７】
Description（記述）３０１２−開発者がランタイムパラメータの期待値を記述する自由形式のフィールドである。デフォルト値が利用者に入力値を尋ねるための規則を含む場合、ランタイム時のプロンプトとして使用される。
【０１２８】
Kind（種類）３０１４−このフィールドは、グラフの実行時にグラフが何処から関連パラメータの値を得るのかを定める。サポートされるkind（種類）フィールド３０１４の値は以下の通りである。
・Environment（環境）−ランタイムパラメータの値は、同じ名称の環境変数内で見つかることが予期される。環境変数が定義されていない場合、default value（デフォルト値）フィールド３００８内の値が使用される。パラメータが要求され（即ちエクスポートされるパラメータ）且つdefault value（デフォルト値）フィールド３００８が空の場合、ランタイム誤りが生じてグラフの実行が停止する。
・Positional（位置）−ランタイムパラメータの値は、アプリケーションを呼び出すコマンドライン上のその相対位置において予期される。例えば、ランタイムパラメータが定義された第３の位置的ランタイムパラメータである場合、そのパラメータ値は、実行スクリプト内の第３の位置的コマンドライン引数として予期される。規定された任意の位置的パラメータが与えられなければならず、１つが欠落している場合ランタイム誤りが生じる。
・Keyword（キーワード）−ランタイムパラメータの値は、キーワードコマンドラインパラメータとして予期される。図示の実施形態では、キーワードパラメータが以下の形式のものである：
-<parameter name> <parameter value>
キーワードパラメータは任意選択的であり、キーワードパラメータが与えられず、default value（デフォルト値）フィールド３００８が空白であり、対応するエクスポートパラメータが必要である場合にのみランタイム誤りが生じる。
・Fixed（固定）−パラメータのランタイム値は常にデフォルト値である。このことは、２つ以上のランタイムパラメータ間で定数値を共有するのに有用である。
・ＰＬ−ランタイムパラメータのデフォルト値は、ランタイムパラメータの値を他のパラメータから導出するように、又は更なる入力を利用者に促すようにグラフの実行時に解釈されるＰＬ式を含む。本発明の任意の特定の実施形態で使用するために選択される成分記述言語は、公開されているオブジェクト指向スクリプト言語「Python」等、任意の適切なスクリプト言語とすることができる。かかるスクリプトはプログラム制御下でメタデータ（タイプ及び変換）を構築し、条件付き試験、比較、データ変換、算術演算及び論理演算、文字列及びリストの操作、並びにユーザ入力、外部的にプログラムで供給される入力、及び他のランタイムパラメータに対する他の機能を実行し、任意のランタイムパラメータのための最終値を生成することができる。
【０１２９】
図示の実施形態では、ランタイムパラメータグリッド３０００上に直接作成されているランタイムパラメータを参照するのに有用な規約は、ドル記号「$」が前に付くパラメータ名称を単純に入力することである。例えば$keyは、keyと名付けられたランタイム変数を参照する。図示の実施形態では、新たなランタイムパラメータが、デフォルトで「文字列」のタイプ、及びデフォルトのランタイムkind（種類）のための高度なオプションダイヤログ内の値に基づくデフォルトのkind（種類）となる（デフォルトのランタイムkind（種類）は「環境」である）。
【０１３０】
ランタイムパラメータ値はランタイム時に決定され得るので、且つＰＬスクリプトは条件付き試験を提供し得るので、「条件付き」ランタイムパラメータが作成され得る。条件付きランタイムパラメータは、パラメータに関する条件（ランタイム時に決定される）の全てが有効になっている場合にのみユーザ入力のためのプロンプトを生成させる。従って、データセットをソートすべきかどうかを要求する第１のプロンプトに利用者が「いいえ」で応答する場合、ソートキーを要求する第２の条件付きプロンプトを表示する必要はない。
【０１３１】
従って、設計段階（「設計時」）の間、開発者はグラフ成分の特定のパラメータを「ランタイム」パラメータとして指定する。次いで、そのグラフ成分に関連するオブジェクトが、関連するパラメータデータ（例えば図１１のパラメータグリッド３０００からの情報のタイプ）と共に記憶される。
【０１３２】
図１３は、ランタイムパラメータを使用するプロセスを要約する流れ図である。ランタイムの間、実行されるアプリケーションに対応するパラメータオブジェクトを（例えばリポジトリから）取り出す（ステップ４０００）。かかる各オブジェクトについて、ユーザ入力が示されているかどうかに関する判定を行う（ステップ４００２）。ユーザ入力が示されている場合、プロンプトを表示するための任意の条件が満たされているかどうかを判定し（ステップ４００３）、このステップは前のプロンプトへのユーザ入力を評価することを含み得る。ユーザ入力が示されていない場合、デフォルト値を使用する（ステップ４００８）。或いは、パラメータ値が必要ではない場合があり（例えば利用者がソート機能を活性化しないことに決めた場合ソートキーは必要ない）、従って無視することができる。さもなければ、ユーザ入力のためのプロンプトを生成する（ステップ４００４）。
【０１３３】
特定のパラメータに関して利用者が値を入力しない場合（ステップ４００６）、そのパラメータのデフォルト値を選択することができる（ステップ４００８）。或いは、ユーザ入力がないことを示すために誤り状態を発生させても良い。何れにせよ（ユーザ入力がないことによる誤り状態がないと仮定し）、入力の変換並びに他のパラメータに基づく依存関係及び条件を考慮に入れ、パラメータの最終値の決定を行う（ステップ４０１０）。
【０１３４】
特定のパラメータに関してユーザ入力が示されていないと判定される場合（ステップ４００２）、環境変数やコマンドラインパラメータ等によってパラメータ値を外部的にプログラムで供給すべきかどうかを判定する（ステップ４０１２）。外部的にプログラムで供給しない場合、パラメータのデフォルト値を選択する（ステップ４０１４）。或いは、規定されたタイプの使用可能な入力がないことを示すために誤り状態を発生させても良い。何れにせよ（外部入力がないことによる誤り状態がないと仮定し）、入力の変換並びに他のパラメータに基づく依存関係及び条件を考慮に入れ、パラメータの最終値の決定を行う（ステップ４０１０）。
【０１３５】
最終的なパラメータ値が決定されると、任意選択的なステップとして、上記で略述した規定の条件及び規則に従い、（以下で論じる）全ての条件付き成分を完全に削除し又はフロー（即ちグラフのリンク又は辺）によって置換することができる（ステップ４０１６）。操作上のグラフ構造が最終的な形になり、最終的なパラメータ値が決定されると、グラフを従来のやり方で実行する（ステップ４０１８）。
【０１３６】
試験値
ランタイムパラメータを有するグラフの作成及び試験中に開発者を支援するために、ＧＤＥ１００２の好ましい実施形態はランタイムパラメータに関する試験値もサポートする。開発者がランタイムパラメータを有するグラフを実行する場合、又はグラフ成分に影響を及ぼす基礎を成すコードを見たい場合、ＧＤＥ１００２は、１つ又は複数のランタイムパラメータの新たな試験値を利用者が入力することができる関連する試験パラメータグリッドを表示する。好ましくは、使用される試験値の最後の組が記憶され、グラフと共に保存される。
【０１３７】
ランタイムパラメータごとに、開発者が所望の試験値を試験値の列内に入力する。それぞれの試験値の列には、edit（編集）フィールドを関連付けることができる。パラメータのkind（種類）がＰＬである場合を除き、試験値フィールド及びedit（編集）フィールドは、ランタイムパラメータグリッド３０００内のdefault value（デフォルト値）フィールド及びedit（編集）フィールドと同じに振る舞う。
【０１３８】
特定のランタイムパラメータの値を利用者に促すべきだとＰＬ式が示す場合、試験値フィールド及びedit（編集）の挙動は関連するＰＬ式の解釈に基づく。ＰＬ式が単純に他の入力に基づいて値を導出する場合、通常モードではランタイムパラメータは試験値グリッド内で見えない。
【０１３９】
ランタイムパラメータが自らの値を得る方法の規定
パラメータがランタイムパラメータとして指定された後、対応するオブジェクトがリポジトリ１００４内に作成される。ランタイムパラメータが「ＰＬ」の値のkind（種類）フィールド３０１４を有する場合、パラメータのdefault value（デフォルト値）フィールド３００８は以下の好ましい形式を有するprompt_for擬似関数を含む。
prompt_for “prompt-kind [modifiers]”options...
【０１４０】
上記で示したように、prompt_for擬似関数は、前の入力に基づいてプロンプトを表示すべきかどうかを決定する条件式の一部であり得る。
【０１４１】
かかるオブジェクトでは、直接入力ランタイムパラメータ（direct entry runtime parameter）を利用者に提示するためにユーザインタフェースが使用される。好ましい実施形態では、ウェブインタフェース１００８がこの機能を提供する。具体的には、ランタイムの間、対応するユーザプロンプトを有する（例えばＨＴＭＬの）ウェブページを生成するために、各ランタイムパラメータオブジェクトの各prompt_for擬似関数がウェブインタフェース１００８によって構文解析される。（或いは、かかるウェブページはランタイム前に生成され、ランタイム時に単純に提示され得る。しかし、かかるウェブページをランタイムに生成することは一層の柔軟性をもたらす。具体的には、ページのコンテンツが前のユーザ入力に依存し得る。）ウェブインタフェース１００８は、かかるウェブページを表示しユーザ入力を受け付けることができる従来のウェブブラウザと共に使用される。
【０１４２】
prompt_for擬似関数は、パラメータ値をどのように促すのかをウェブインタフェース１００８に指示する。具体的には、prompt-kindパラメータ、文字列定数はどのような種類のユーザインタフェース（ＵＩ）要素を提示するのかを指示する（テキストボックスやドロップダウンリスト等）。文字列のmodifiers（修飾子）部分、キーワードのコンマ区切りのリストは様々な種類のプロンプトに共通の幾つかのオプションを提供する。図示の実施形態では、修飾文字列内でスペースは有意ではない。修飾キーワードは以下の通りに解釈される。
・キーワードin placeは、アプリケーションのサマリレベルユーザインタフェースにおいて要素を直接提示すべきことを宣言し、下位レベルに「ドリルイン」することなしに値が供給されることを可能にする。in placeが規定されていない場合、パラメータ値を供給するための別のページに利用者を移動させる簡単な「編集」ボタンがサマリレベルインタフェースに提示される。
・キーワードblank okは、利用者が値を供給しなくても良いことを宣言し、アプリケーションがデフォルト値に妥当なやり方で対処する。blank okが規定されていない場合、利用者は何らかの値を供給することなしにアプリケーションを実行することができない。
【０１４３】
以下は様々な種類の修飾子を有するprompt_forコールの幾つかの例である：
${prompt_for “text,inplace”}
${prompt_for “filter, in place”, $input_type}
${prompt_for “radio, blankok, in place”, ${list 1, 2, 3}}
【０１４４】
この節の残りの部分では様々なprompt-kinds及びそれらの対応するoptionsを列挙し、そのそれぞれがウェブインタフェース１００８によって生成されるウェブページ内にどのように現れるのかを説明する。
【０１４５】
text [size]−従来の単一ラインテキストボックスの文字幅sizeを提示する（sizeが供給されない場合、ブラウザのテキストボックスのデフォルトのサイズとする）。
【０１４６】
radio choice-list [description-list]−choice-listの要素ごとに１つのボタンがある１組のラジオボタン形式で従来の「１つを選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述（description）で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。
【０１４７】
radioplus choice-list [description-list]−radioと同様だが、テキストボックスの隣に追加のボタンを提示して、利用者がchoice-list内にない「書込み」値を選択することを可能にする。
【０１４８】
checkbox choice-list [description-list]−choice-listの要素ごとに１つのボタンがある１組のチェックボックス形式で従来の「ゼロ以上を選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述（description）で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。
【０１４９】
dropdown choice-list [description-list, size]−choice-listの要素のためのドロップダウンリスト形式で従来の「１つ選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述（description）で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。sizeが供給される場合、その多数の選択を一度に見ることができ、さもなければ１つだけを見ることができる。
【０１５０】
multidropdown choice-list [description-list, size]−choice-listの要素のためのドロップダウンリスト形式で従来の「ゼロ以上を選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述（description）で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。sizeが供給される場合、その多数の選択を一度に見ることができ、さもなければブラウザのデフォルトの項目数が表示される。
【０１５１】
key type-obj [size]−所与のtype-objからのフィールドで作られるキー（コレータとしても知られる）のためのプロンプトを提示する。キーは、type-obj内のフィールド数をデフォルトとするsize部分と同程度多くても良い。
【０１５２】
図１４は、key（キー）プロンプトによって生成されるグラフィカルダイヤログ５０００の一実施形態の図である。以下は３入力keyプロンプトのスクリプトテキストの一例であり、ファイル/datasets/fixedはドロップダウンボックス５００２内に示す使用可能なキーのコンテンツを定める：
${prompt_for “key”, ${dataset_type “/datasets/fixed”},3}
図示の実施形態では、通常の照合順序は昇順だが、利用者は関連するチェックボックス５００４をチェックすることによってキーの降順の照合を選択することができる。
【０１５３】
fiter type-obj−所与のtype-objの各フィールドに対する条件で作られるフィルタ式のためのプロンプトを提示する。「blank ok」修飾子はフィルタに影響せず、空のフィルタは「真」の式を与える。
【０１５４】
図１５は、filter（フィルタ）プロンプトによって生成されるグラフィカルダイヤログ６０００の一実施形態の図である。それぞれの式のテキスト編集ボックス６００４に関連する使用可能なフィールド名称６００２はtype-objによって定義される。比較値をテキスト編集ボックス６００４内に入力し、比較演算子（例えば等号、より大きい、以下）を対応するドロップダウンリストコントロール６００６から選択する。
【０１５５】
flexifilter type-obj−filterプロンプトと同様だが、所与のtype-objの各フィールドに対する条件で作られるフィルタ式のためのプロンプトを提供し、各ライン上のフィールド名称はドロップダウンリストから選択可能である。これにより、複数の条件に対して同じフィールドを使用することが可能になる（例えばfield STATE=MA OR field STATE＝CA）。
【０１５６】
rollup type-obj key [size]−所与のキーによってロールアップされている所与のtype-objのフィールドに基づくロールアップ計算のためのプロンプトを提示する。ロールアップは、type-obj内のフィールド数をデフォルトとするsize規則と同程度多くても良い。blank ok修飾子はロールアップに影響せず、空のロールアップは各グループのキー値だけを提供するパッケージをもたらす。
【０１５７】
図１６は、rollup（ロールアップ）プロンプトによって生成されるグラフィカルダイヤログ７０００の一実施形態の図である。図示の実施形態では、ドロップダウンボックス７００２の列が、利用可能なロールアップ計算関数（例えば合計、最小値、最大値）を定義する。各計算に関連する使用可能なフィールド名称７００４がtype-objによって定義される。各ロールアップ規則は、利用者が所望の式を定義するための関連するテキスト編集ボックス７００６、ソース値が計算に関与する基準を（ブール式によって）定義するための「場所（where）」テキスト編集ボックス７００８、及び計算結果を受け取るフィールドを指定するための出力フィールドテキスト編集ボックス７０１０を有する。明確に導出できる場合、出力フィールドの名称は規定しなくても良い。
【０１５８】
reformat type-obj [size]−所与のtype-objのフィールドに基づく再フォーマット計算のためのプロンプトを提示する。再フォーマットは、type-obj内のフィールド数をデフォルトとするsize規則と同程度多くても良い。
【０１５９】
図１７は、reformat（再フォーマット）プロンプトによって生成されるグラフィカルダイヤログ８０００の一実施形態の図である。図示の実施形態では、reformatプロンプトが、入力フィールドを同様の名称の（チェックボックスコントロールを使用して個々に、又はSelect All（全て選択）若しくはSelect None（選択しない）ボタンを使用することによって集合的に選択／選択解除される）出力フィールドに単純にコピーするためのセクション８００２を含む。このプロンプトの第２のセクションは、再フォーマットの式（例えばtotal=revenue_1-revenue_2）の定義を可能にするテキスト編集ボックス８００４の列を含む。各規則は、再フォーマットされた結果を受け取るフィールドを指定するための関連する出力フィールドテキスト編集ボックス８０６を有する。
【０１６０】
outputspec−出力データセット仕様のためのプロンプトを提示する。表示されるコントロールは、使用可能なフォーマットオプションを提示するためのドロップダウンコントロール、及び出力データセットの特定のインスタンスの名称を入力するためのテキスト編集ボックスを含む。blank ok修飾子は出力データセットの仕様に影響を与えない。
【０１６１】
fpath starting-point−ファイルパスのためのプロンプトを提示する。このプロンプトは基本的にテキストボックスだが、ファイルパスを閲覧するためのポップアップウィンドウを出現させる「閲覧（Browse）」ボタンを隣に有する。テキストボックスが空白でない場合、閲覧操作のための開始点としてそれを使用し、空白の場合はstarting-point引数を使用する。
【０１６２】
rpath starting-point−リポジトリパスのためのプロンプトを提示する。プロンプトは基本的にテキストボックスだが、閲覧するためのポップアップウィンドウを出現させる「閲覧（Browse）」ボタンを隣に有する。テキストボックスが空白でない場合、閲覧操作のための開始点としてそれを使用し、空白の場合はstarting-point引数を使用する。
【０１６３】
radiofpath choice-list [description-list]−radioplusと同様だが、「書き込み（write-in）」スロット内にfpath型のbox-plus-browseボタンを提示する。
【０１６４】
radiorpath choice-list [description-list]−radioplusと同様だが、「書き込み（write-in）」スロット内にrpath型のbox-plus-browseボタンを提示する。
【０１６５】
条件付き成分
一部の実装形態は、パラメータ値及び算出メタデータに基づいてグラフの成分及びフローの構造を変えることを可能にする条件付き成分メカニズムを含む。グラフの各成分は、ランタイム時にその成分がグラフ内に現れるかどうかを制御する条件を有する。条件はランタイムパラメータによって直接又は間接的に計算され得る。グラフの最適化や専用化等、条件付き成分は様々な目的で使用することができる。最適化のために、アプリケーションは、特定のデータセットからの値を使用しない場合、そのデータセットの処理を省略し、それによりグラフをより効率的に実行させることもある。専用化では、アプリケーションは所望の詳細レベルに基づいて幾つかの異なる出力データセットを作る条件を付けることができ、又はグラフの幾つかの任意選択的な部分の１つを実行可能にし得る。
【０１６６】
図１８Ａは、MergeJoin（マージ結合）成分９０００がファイルＡ及びファイルＢからのデータを結合し、結果を出力ファイル９００２に出力する第１のグラフのブロック図である。
【０１６７】
図１８Ｂは、Rollup（ロールアップ）成分９００４がファイルＡからのデータを集約し、結果を出力ファイル９００２に出力する第２のグラフのブロック図である。
【０１６８】
図１８Ｃは、MergeJoin（マージ結合）成分９００６がファイルＡ及びファイルＢからのデータを結合し、その結果生じるデータをRollup（ロールアップ）成分９００８が集約し、最終結果を出力ファイル９００２に出力するグラフのブロック図である。条件付き成分を使用し、これらの３つのグラフを単一のグラフへと組み合わせることができる。その単一のグラフは図１８Ｃのグラフのように最初は見えるが、その正確な構造はランタイムまで決定されない。適切な条件を設定することによってRollup（ロールアップ）成分９００８を接続（フロー）で置換し、図１８Ａのグラフと同様のランタイムグラフをもたらすことができる。同様に、適切な条件を設定することによってMergeJoin（マージ結合）成分９００６をファイルＡへの接続（フロー）で置換し、図１８Ｂのグラフと同様のランタイムグラフをもたらすことができる。
【０１６９】
図示の実施形態では、条件付き成分は頂点を定義する任意のグラフ成分（即ち入力／出力ファイル等のデータセット成分、再フォーマット成分やソート成分等の処理成分、又は下位グラフとして知られる他のグラフ）とすることができる。好ましい実施形態では、条件付き成分が２つの専用パラメータ、つまりCondition（条件）及びCondition-interpretation（条件解釈）によって制御される。条件は、ランタイムまでその評価が保留されるブール式又は値である。図示の実施形態では、「偽」及び「０」の値は偽の条件を規定し、他の全ての値（空を含む）は真の条件を示す。Condition-interpretation（条件解釈）パラメータは相互排他的な２つの許容値、つまりRemove Completely（完全削除）及びReplace With Flow（フローで置換）を有する。
【０１７０】
図１９は、Condition-interpretation（条件解釈）コントロール１９０４を有する条件１９０２を提示するグラフィカルダイヤログ１９００の一実施形態の図である。Condition-interpretation（条件解釈）コントロール１９０４は、Remove Completely（完全削除）解釈１９０６又はReplace With Flow（フローで置換）解釈１９０８の選択を可能にする。
【０１７１】
Remove Completely（完全削除）：この解釈では、Condition（条件）が満たされる場合、成分及びその接続フロー（即ちグラフのリンク又は辺）の全てがグラフから削除される。アクティブなRemove Completely（完全削除）条件は、成分及びその成分の全ての直接接続フローをグラフから機能的に削除する。Remove Completely（完全削除）条件は、任意の成分に対して使用することができる。
【０１７２】
グラフから削除される条件付き成分は、その条件付き成分の存在に依存する他の接続成分を汚染し（poison）、かかる成分の削除を引き起こし得る。
【０１７３】
図２０は、かかる汚染が生じる状況を示すグラフ２１００の図である。入力ファイル成分２１０２に関する条件が削除を示し、その対応する条件解釈がRemove Completely（完全削除）である場合、入力ファイル成分２１０２及びその接続フローの両方がグラフ２１００から削除される。かかる削除はひいてはソート成分２１０４を汚染し、ソート成分２１０４の削除を引き起こし、その理由はソート成分２１０４の入力は必須の入力ポートだが、それに接続されるデータフローがもはやないからである。かかる削除はひいてはロールアップ成分２１０６を汚染し、ロールアップ成分２１０６の削除を引き起こし、その理由はロールアップ成分２１０６の入力は必須の入力ポートだが、それに接続されるデータフローがもはやないからである。この「消失汚染」を止める唯一の方法は、下流成分の任意選択的なポート又はカウントされるポートへの接続である。従って、入力ファイル成分２１０２に関する条件が削除を示す場合、ソート−ロールアップグラフの分流全体２１０８がグラフ２１００から効果的に削除される。図２０の結果は、元のグラフ構造の公称３入力結合成分２１１０がランタイム時に２入力結合成分になることである。
【０１７４】
一実装形態では、汚染（「黙示条件」としても知られる）の詳細なセマンティクスは下記の通りである。
・成分が必須のポートを有し、それに接続される活きたフローが存在しない場合、その成分及びその成分に接続される全てのフローがグラフから削除される。
・成分がグラフから完全に削除される場合、その成分のポートに接続される全てのフローがグラフから削除される。
・成分がフローで置換される場合、その成分のdesignated input port（指定の入力ポート）及びdesignated output port（指定の出力ポート）以外の全てのポートに接続される全てのフローがグラフから削除される。
・必須のインデックス付きポートが自らに接続される活きたフローを有さない場合、同じインデックスを有する対応する任意選択的なインデックス付きポートごとに、その対応するポートに接続される如何なるフローもグラフから削除される。
【０１７５】
これらの規則には幾らかの驚くべき結論がある。例えば、任意選択的なポートだけを有する成分は汚染が原因で削除されることはない。従って、所望の場合は明確に削除しなければならない。
【０１７６】
図２１は、Remove Completely（完全削除）条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。Condition-interpretation（条件解釈）がRemove Completely（完全削除）であり且つCondition（条件）が満たされない場合（ステップ２２００）、条件付き成分をグラフから削除しない（ステップ２２０２）。Condition（条件）が満たされる場合（ステップ２２００）、条件付き成分は、その成分に接続される全てのフローと共にグラフから削除する（ステップ２２０４）。次いで、全ての「汚染された」成分及びフローを上記の規則に従ってグラフから削除する（ステップ２２０６）。
【０１７７】
Replace With Flow（フローで置換）：この解釈では、Condition（条件）が満たされる場合、成分がフロー（即ちグラフの辺）で置換される。Replace With Flow（フローで置換）の条件解釈は追加情報を必要とする。図１９を参照すると、利用者は、グラフから成分が削除される場合に接続を行う入力ポート１９１０（又はカウントされるポート群）及び出力ポート１９１２（又はカウントされるポート群）を指定する。デフォルトでは、厳密に１つの必須の入力ポート又はカウントされるポートがあり、厳密に１つの必須の出力ポート又はカウントされるポートがある場合、それらは指定のフロースルー接続ポートである（designated input port（指定の入力ポート）及びdesignated output port（指定の出力ポート）とそれぞれ呼ばれる）。必須のポートは、少なくとも１つのフローが接続されることを必要とするポートである。
【０１７８】
図２２は、本発明の特定の実施形態に関するReplace With Flow（フローで置換）条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。図示の実施形態の中の（CO>OPERATING SYSTEM（登録商標）内で入手可能な成分に基づく）特定の使用可能な入力及び出力に対する一部の成分の依存関係が原因で、幾つかの規則がこの実装形態及びReplace With Flow（フローで置換）条件の使用に適用される。
・Condition-interpretation（条件解釈）がReplace With Flow（フローで置換）であり、Condition（条件）が満たされない場合（ステップ３３００）、条件付き成分をグラフから削除しない（ステップ３３０２）。
・指定の入力ポート及び指定の出力ポートを有する成分は、自らの指定の入力ポートに接続される厳密に１つの活きた直接のフロー、及び自らの指定の出力ポートに接続される厳密に１つの活きた直接のフローがある場合にのみフローで置換することができる（「活きた」フローとは、ランタイム時に削除されていないフローである）（ステップ３３０４）。フローで置換する場合、成分自体をグラフから削除し、その成分の指定の入力ポートに接続される活きた直接のフローと、その成分の指定の出力ポートに接続される活きた直接のフローとを互いにリンクする（ステップ３３０６）。削除される成分の他のポート（即ち特別に指定された入力ポート及び出力ポート以外の任意のポート）に直接リンクされる他の如何なるフローもグラフから削除される。削除された成分に接続された「汚染された」成分及びフローはどれも上記のように削除される（ステップ３３０８）。
・Replace With Flow（フローで置換）条件を有する成分が、カウントされる入力群内の複数の指定の入力ポートに付加される活きたフローを有する場合（ステップ３３１０）、グラフを有効にするにはその成分が必要なので、その成分はグラフから削除しない（ステップ３３１２）。
・必須入力に活きたファンインフローを有する成分は特殊な扱いが必要である。「活きたファンインフロー」とは、その成分が必須入力ポートに接続される活きたファンインフロー若しくは全対全のフローを有すること、又は単一の必須入力ポートに接続される複数の活きた直接のフローを有することを意味する。かかる成分では、Replace With Flow（フローで置換）条件を解釈することは、活きた入力フローの全てを集める収集成分で条件付き成分を置換するものとする（ステップ３３１４）。置換された成分に接続されていた「汚染された」如何なるフロー及び成分も上記のように削除する（ステップ３３１６）。
【０１７９】
メタデータ伝搬の態様
グラフのメタデータは、例えばグラフの開発者によって、グラフの利用者によって、又はグラフの別の部分からの伝搬によって供給され得る。ポートのためのレコードフォーマット（例えばポートに流れ込む又はポートから流れ出るレコードのフィールドシーケンスやデータタイプ）、ソート性、圧縮法、文字セット、バイナリ表現（ビッグエンディアン、リトルエンディアン）、パーティション化、成分がどの計算資源（例えばプロセッサや一時的なディスク空間）を使用し得るのか、データ変換、成分が使用し得るメモリ量等、データ又はデータに対する計算に関連するメタデータを含む様々な種類のメタデータを伝搬することができる。グラフ構造の様々な側面がメタデータの伝搬に影響を及ぼし得る。これらの側面の２つを以下で説明する。
【０１８０】
成分削除後の伝搬
一部の実装形態では、グラフ成分を削除した後にフローが生成される場合、かかるフロー内のデータを定義するメタデータを訂正後のグラフ内でどのように伝搬させるべきかを決めなければならない。メタデータはフローの両端から入手可能であり得る。一部の実装形態では、フローの上流端からのメタデータが好ましい。
【０１８１】
フローの上流端が削除された成分（又は収集成分によって置換されている成分）の場合、ＧＤＥ１００２は、削除されていない成分を見つけるまでグラフを上流に「進む」ことによってそのフローのためのメタデータを見つける。その上流成分によってさらされるメタデータは、生成されるフローのためのデータの特性を定義するために使用される。
【０１８２】
変換済みのメタデータの伝搬
上記のように、或るポートに関連するメタデータを別のポートのためのメタデータを含む１つ又は複数のパラメータに応じて規定できるようにすることにより、メタデータは変換内部データパス上でさえ伝搬し得る。図３２Ａは、データセット３１３０２及びデータセット３１３０４からのデータに対する結合操作を計算するグラフ３１３００を示す。この例では、グラフの開発者はデータセットの出力ポートにおいてメタデータを供給する。次いで、そのメタデータが入力データセットのレコードに対する結合操作を計算する「スマート結合」成分３１３０６に伝搬される。例えば、メタデータは出力ポート３１３０８から入力ポート３１３１０に伝搬する。次いで、メタデータが「スマート結合」成分３１３０６によって変換され、「スマート結合」成分３１３０６の出力ポート３１３１６からフィルタ成分３１３１８の入力ポート３１３１７に伝搬される。
【０１８３】
図３２Ｂは、「スマート結合」成分３１３０６を実装する下位グラフを示す。成分３１３０６は、結合成分３１３５０が実行する結合操作のキーフィールドをその値が表すkey_fieldパラメータを使用する。成分３１３０６は、条件付きソート成分３１３５４及び３１３５６を含むための条件としてもkey_fieldパラメータを使用する。入力ポート３１３１０に流れ込むレコードがkey_fieldに関して既にソートされている場合、ソート成分３１３５４は条件を取り消される。同様に、入力ポート３１３１４に流れ込むレコードがkey_fieldに関して既にソートされている場合、ソート成分３１３５６は条件を取り消される。入力レコードの何れかのフローがkey_fieldに関してまだソートされていない場合、ソート成分３１３５４及び３１３５６はレコードをソートしてから結合成分３１３５０に流し込む。
【０１８４】
変換済みのメタデータの伝搬をこの「スマート結合」成分を介して可能にするために、グラフの開発者は「スマート結合」成分３１３０６の出力ポート３１３１６のためのメタデータ（例えばフィールドを記述するためのメタデータ）を、第１の入力ポート３１３１０のためのメタデータinput0.metadata、第２の入力ポート３１３１４のためのメタデータinput1.metadata、及びキーフィールドパラメータkey_fieldに応じて定義する：
output.metadata=metadata_join(key_field,input0.metadata, input1.metadata)
【０１８５】
出力ポートのメタデータは、関数の引数を（適切なコンテキストに関して）値にバインドし、その結果に対して関数metadata_joinを実行することによって決定される。この例では、ポート３１３１０及び３１３１４のためのメタデータが未定義なので、伝搬されるメタデータはメタデータパラメータinput0.metadata及びinput1.metadataにバインドされる。利用者は、ポート３１３０８から「スマート結合」成分３１３０６の入力ポート３１３１０に流れるレコードに関するフィールド「Ａ」及び「Ｂ」を規定する出力ポート３１３０８のためのメタデータを供給する。利用者は、ポート３１３１２から「スマート結合」成分３１３０６の入力ポート３１３１４に流れるレコードに関するフィールド「Ａ」及び「Ｃ」を規定する出力ポート３１３１２のためのメタデータも供給する。利用者が供給するこのメタデータはポート３１３１０及び３１３１４に伝搬する。結合操作のためのキーフィールドはフィールドＡなので、「仮パラメータ」key_fieldが値「Ａ」にバインドされる。
【０１８６】
関数metadata_joinは、key_fieldパラメータの値が、input0.metadata及びinput1.metadataによって規定されるフィールドの両方の組の構成要素かどうかを最初に判定することによって出力メタデータを決定する。構成要素である場合、出力メタデータはフィールドの２つの組の和集合である。構成要素ではない場合、出力メタデータはフィールドの空集合を示す。
【０１８７】
メタデータが「スマート結合」成分３１３０６の入力ポートに伝搬した（又は例えば利用者によって他のやり方で供給された）後、「スマート結合」成分３１３０６の出力ポートのための変換済みのメタデータはフィールドＡ、Ｂ、及びＣを含む。次いで、この変換済みのメタデータは他の成分に伝搬され得る。この例では、変換済みのメタデータがフィルタ成分３１３１８に伝搬する。
【０１８８】
利用者によって供給されようがポート間で伝搬されようが、メタデータは利用者に表示することができる。例えば、利用者は入力装置（例えばマウス）を使用して成分の一部を、そのメタデータ値を見るために選択することができる。メタデータの伝搬はかかるユーザ選択に応答してトリガすることもできる。
【０１８９】
例示的なメタデータ伝搬プロセス
図３３は、例示的なメタデータ伝搬プロセス２２４００の流れ図を示す。プロセス２２４００は、例えばグラフ内の変更がある度に、利用者のアクションに応答して、及び／又はグラフを実行する直前に実行することができる。プロセス２２４００は、フローによって決定される部分的な順序に従ってグラフ内の各成分が順序付けされた状態で作業リストを生成する（２２４０２）（例えば成分Ａから成分Ｂへのフローがある場合、成分Ａは成分Ｂの前に来る）。フローが２つの成分間の一意の順序を決定しない場合、均衡を破るために成分ラベルのアルファベット順を使用することができる。アルファベット順の使用は、（成分ラベルが一意だと仮定して）作業リスト内の成分の安定した順序付けをもたらす。伝搬プロセス２２４００が（例えば新たな成分の追加後に）グラフについて繰り返される場合、新たな作業リストは、作業リスト内の成分間の同一順序を予め保つ。
【０１９０】
プロセス２２４００は、作業リストの始まりから開始し、作業リスト内の成分ごとに、成分を実装する下位グラフの仕様（例えば下位グラフ内のデータフロー）に基づいてメタデータを成分内で内部的に（例えば入力ポートから出力ポートに、又は出力ポートから入力ポートに）伝搬する（２２４０４）。この内部的なメタデータの伝搬は、非変換データパスの両端上のポート間でメタデータを変換せずに転送することを含む。内部的なメタデータの伝搬は、上記のようにグラフのパラメータ及び／又は他のポートのメタデータを参照するメタデータ定義を有するポートに関してメタデータを導出することも含む。プロセス２２４００がかかるメタデータ定義に遭遇する場合、プロセス２２４００はメタデータを導出するのにその値が必要な任意のパラメータを評価する。
【０１９１】
作業リスト上の成分について内部的なメタデータの伝搬を行った後、プロセス２２４００は、メタデータを有する成分の各ポートからメタデータを有さない関係する成分のポートにメタデータを外部的に伝搬する（２２４０６）。この外部的な伝搬によってメタデータを取得する成分はどれも作業リストの最後に移される（２２４０８）。プロセス２２４００は、作業リスト上の最後の成分を処理した後に終了する（２２４１０）。
【０１９２】
この種の外部的なメタデータの伝搬をサポートする成分間の一種の関係は、２つの成分のポート間の（例えば入力ポートから出力ポートへの、又は出力ポートから入力ポートへの）データフローリンクである。
【０１９３】
この種の外部的なメタデータの伝搬をサポートする成分間の別の種類の関係は、或るポートのメタデータを別のポートにも使用できることを示すリンクである。この種の「メタデータリンク」は必ずしもデータフローリンクに対応しない。例えば或るポートは、特にどのポートにも関連しないグラフ内のメタデータへのメタデータリンクを有し得る。
【０１９４】
成分化された下位グラフ内のランタイムパラメータ
下位グラフを別のグラフ内の成分として使用するために「成分化」する前に、成分の入力及び／又は出力ポート等、成分の様々な特性を定義する。ランタイムパラメータを有する成分を含む下位グラフでは、ランタイムパラメータのプロンプト順序を選択すべきである。グラフ内の成分は必ずしも連続して順序付けされないので、利用者を促すためのランタイムパラメータの複数の可能なグローバル順序があり得る。グローバル順序の一部は、各成分に関連する元の順序と一致しない。依存関係を考慮するために適切な場合は再順序付けしながら、各成分内のパラメータの順序をできるだけ維持する、プロンプトのためのグローバル順序を生成することが有用である。例えば、成分は「処理したデータをどこに記憶しますか？」と尋ねるプロンプトの前に、「どのデータを処理しますか？」と尋ねるプロンプトを順序付けることができる。これらのプロンプトは何れの順序で提供できても、この順序で提供することが望ましい可能性がある。
【０１９５】
プロンプトされるランタイムパラメータを評価するプロセス内で、プロンプトされないランタイムパラメータを評価する必要があり得るので、プロンプトの順序はランタイムパラメータ全てに関する評価順序から得られる。グラフのランタイムパラメータ（どの成分にも関連しないグラフのパラメータを含む）に関する評価順序を決定するための１つの手法は、パラメータ間の依存関係を表す１つ又は複数の有向非循環グラフに基づいてトポロジカルソートを実行することを含む。しかし、一部のトポロジカルソートアルゴリズムはパラメータを不必要に再順序付けし、ランタイムパラメータの不所望のプロンプト順序の原因となる場合がある。
【０１９６】
ソートの例１
第１の例では、パラメータソートプロセスが２つのグラフ成分、つまりComponent（成分）Iと、Component（成分）Iに接続されるComponent（成分）IIとのパラメータに関する最初のパラメータリストを提供する。この例では、パラメータは「成分内」の依存関係しか有さない。つまり、成分のパラメータは同じ成分内の他のパラメータにしか依存しない。パラメータは以下のように定義される：
Component（成分）Iは以下のパラメータを含む：
【数１】
2018528506.tif 000003
Component（成分）IIは以下のパラメータを含む：
【数２】
2018528506.tif 000004
【０１９７】
パラメータを列挙する順序は、利用者に値を促す所望の順序を定義する。パラメータの最初のリストは、成分ごとにこの「最初の順序」を維持する。「序数」が各パラメータに割り当てられて、最初の順序内のそのパラメータの位置を示す。以下の表は、この最初の順序内のパラメータを列挙する。
【０１９８】
【表１】
2018528506.tif 000005
【０１９９】
「依存関係」の列は、列挙するパラメータが依存する他のパラメータを示す。依存関係はパラメータの評価に順序付けの制約を課し、つまり或るパラメータが別のパラメータによって使用される（例えば参照される）前に、そのパラメータが定義されなければならない。
【０２００】
「共通トポロジカルソート」アルゴリズムがこのリストを通過し、通過する度に依存関係を有さないパラメータを順序付けされた出力リスト内に転送する。各通過後、転送されるどのパラメータも依存関係の列から削除される。このプロセスは全てのパラメータが転送されるまで繰り返される。他のパラメータに依存するパラメータが、それらの他のパラメータが評価されてから評価されるように、出力リスト内のパラメータの順序は「最終順序」を表す。
【０２０１】
この例では、最初の通過時にパラメータｘ、ｑ、ａ、及びｃが出力リスト内に転送される。２回目の通過時にパラメータｙ及びｂが出力リスト内に転送される。３回目及び最後の通過時に、パラメータｚが出力リスト内に転送される。従って、パラメータの最終順序はｘ、ｑ、ａ、ｃ、ｙ、ｂ、ｚである。この順序はパラメータの依存関係によって課される順序付けの制約を満たすが、パラメータを不必要に再順序付けする。この例では、最初の順序もパラメータの依存関係によって課される順序付けの制約を満たす。
【０２０２】
順序付けの制約を満たすグラフのパラメータに対する評価順序を決定するための他の手法は、最初の順序を尊重する。例えば、一部の手法は順序付けの制約を満たすようにパラメータを順序付け、最初の順序に基づく基準に従って順序を選択する。基準は、最初の順序の近くに順序を保つことを優先する（例えば最初の順序への変更に基づいて基準値を最小化する）多岐にわたる基準の何れかを含み得る。一部の事例では、複数の順序が所与の基準をその基準に従って同等に良好に満たし得るので、唯一の「最良」の順序が存在しないこともある。
【０２０３】
最初の順序を尊重する手法の一例は「修正トポロジカルソート」手法である。この手法では、最初の順序に基づく基準は、如何なる非転送パラメータにも依存しない先行パラメータが転送される前に、最初のリストから転送されるパラメータの数を最小化することである。換言すると、「修正トポロジカルソート」は、依存関係の列から転送されるパラメータを削除してから依存関係がない次のパラメータを転送する。上記の例では、「修正トポロジカルソート」手法は、最初の順序ｘ、ｙ、ｚ、ｑ、ａ、ｂ、ｃと同じ最終順序を生成する。
【０２０４】
最初の順序を尊重する修正トポロジカルソートプロセス
パラメータごとに割り当てられた序数によって決定される最初の順序をどちらも尊重する、２つの例示的な「修正トポロジカルソート」プロセスについて擬似コードを以下に示す。第２のプロセスは、一部の事例で時間効率を改善するための最適化を含む。このプロセスは、パラメータに対する入力データから生成されるデータ構造を操作する。
【０２０５】
順序付けすべきＮ個のパラメータがあると仮定し、入力データは、一意のパラメータ名称、名称を付けられたパラメータが依存する１組のパラメータ（「依存関係セット」と呼ばれる）、及び名称を付けられたパラメータに関係する情報を記憶する任意選択的な属性データオブジェクトで構成されるＮ個の三つ組のリストを含む。
【０２０６】
この入力データに関連するのは、「依存関係グラフ」と呼ばれる、パラメータ間の依存関係を表す１つ又は複数の有向非循環グラフである。それぞれの一意のパラメータ名称は依存関係グラフ内のノードに対応し、関連する依存関係セットは、他のノードからそのノードへの１組のリンクに対応する。そのため、リンクは第１のパラメータに関する第１のノードから第１のパラメータに依存する第２のパラメータに関する第２のノードに向いている。或いは、リンクの方向とパラメータの依存関係との間の対応関係を逆にしても良い。
【０２０７】
パラメータを評価した後、最初の順序に近い順序を保つことを優先しながら別のパラメータを評価するためにそのパラメータが使用されるように、出力データ構造result_listは（必要な場合）再順序付けされる入力データからのＮ個のパラメータのリストを含む。出力データ構造result_listを生成するために、このプロセスは作業データ構造param_listから出力データ構造result_listにパラメータを一つずつ転送することによってパラメータを「除去」する。出力データ構造は、全てのパラメータが除去された後に完成する。
【０２０８】
第１の「修正トポロジカルソート」プロセスは２つの段階を含む。第１の段階では、このプロセスは、ソート済みの出力データ構造を生成する際に使用するための入力データに基づいて作業データ構造を構築する。第２の段階で、このプロセスは、それらの作業データ構造によって表される依存関係の制約に従ってパラメータを反復的にソートし、除去する。
【０２０９】
このプロセスが第１の段階で構築する作業データ構造の一部は、ハッシュ化に基づくデータ構造である辞書である。辞書内の項目には、Ｏ（ｌｏｇＮ）時間で効果的にアクセスすることができる。以下の例示的なデータ構造は第１の段階で構築される：
parm_list[index]：数字のindex（index = 0はリスト内の最初の項目に対応する）によってインデックス化された、除去されていないパラメータ名称を順序付けたリスト。このデータ構造は「動的」である（即ちプロセスの実行中に変化する）。或る項目がリストの中央から削除される場合、削除された項目の後にある項目のインデックスがしかるべくシフトされるように、このリストは位置によってインデックス化される。
【０２１０】
n_dependencies_dict[name]：パラメータ名称（name）によって指示（key）される辞書であり、そのエントリは指示されるパラメータが依存するパラメータの数を含む。この辞書は動的である。
【０２１１】
dependers_dict[name]：パラメータ名称（name）によって指示される辞書であり、そのエントリは指示されるパラメータに依存する１組のパラメータを表す辞書である（同じくパラメータ名称によって指示される）。この辞書は静的である（即ちプロセスの実行中に変化しない）。
【０２１２】
order_dict[name]：パラメータ名称（name）によって指示される辞書であり、最初の順序内のパラメータの序数位置、０からＮ−１までの整数を記憶する。この辞書は静的である。
【０２１３】
attribute_dict[name]：パラメータ名称（name）によって指示される辞書であり、指示されるパラメータに関する任意選択的な属性データオブジェクトを記憶する。この辞書は静的である。
【０２１４】
result_list[index]：プロセスの出力を表すパラメータ名称及び属性の順序付けされたリストであり、数字のindexによってインデックス化される（index = 0はリスト内の最初の項目に対応する）。このデータ構造は最初は空である。このデータ構造は動的である。
【０２１５】
プロセスの時間効率を分析するために、依存関係グラフの平均「次数」（又はノードからのリンク数）をｚと仮定する。これらのデータ構造を構築するにはＯ（Ｎ）時間かかる。但し、Ｏ（Ｎ＊ｚ）時間かかるn_dependencies_dict及びdependers_dictは除く。
【０２１６】
第２の段階では、このプロセスはソート基準by_n_deps_and_orderに従ってparam_listデータ構造内のパラメータをソートし、ソート基準by_n_deps_and_orderは、まずパラメータが依存する除去されていないパラメータの数によって（即ちn_dependencies_dictの値によって）最低から最高までパラメータを順序付けし、次いでパラメータの序数によって（即ちorder_dictの値によって）最低から最高までパラメータを順序付けする。次いでこのプロセスは、ソート済みのparam_list内の第１のパラメータを除去する。このパラメータに関するn_dependencies_dictの値はゼロであるべきである。（ソート済みのparam_list内の第１のパラメータに関するn_dependencies_dictの値がゼロでない場合、誤りフラグが立てられる）。
【０２１７】
パラメータを除去するために、このプロセスはパラメータを（対応する任意の属性と共に）result_listに付加し、そのパラメータの依存物（即ちdependers_dict内のパラメータ）全ての依存関係のカウント（即ちn_dependencies_dictの値）を１減じる。最終的にそのパラメータはparm_listから消去される。全てのパラメータが除去されるまで、結果として生じる第１のパラメータのこのソート及び除去が繰り返される。
【０２１８】
以下は、eliminate（除去）手続きのための擬似コードの定義である：
【数３】
2018528506.tif 000006
【０２１９】
このeliminate（除去）手続きの引数はlist（その値は例えばparam_listである）及びindexである。関数result_list.appendは、位置indexにある指示されるlist項目をその関連する属性と共にresult_listに付加する。次いでこの手続きは、除去されているパラメータに関して指示されるdependers_dictデータ構造の構成要素であるパラメータdependerごとにn_dependencies_dictの値を減じる。次いで、この手続きはlistからパラメータを消去する。このeliminate（除去）手続きのランタイムはＯ（ｚｌｏｇＮ）である。
【０２２０】
以下は、第１の「修正トポロジカルソート」プロセスに関するソート／除去ループのための擬似コードである：
【数４】
2018528506.tif 000007
【０２２１】
このプロセスはまず、上記のソート基準by_n_deps_and_orderに従ってparam_listのパラメータを順序付ける関数parm_list.sort(by_n_deps_and_order)を使用してparam_listの最初のソートを行う。次いでこのプロセスは、param_listが空になるまで、eliminate（除去）手続きとその後に続くparam_listの別のソートを行う。このプロセスは、param_list内の第１のパラメータ（index =0を有する）に対する依存関係の数がゼロであることを確実にするために確認を行う。ゼロではない場合、このプロセスはパラメータを削除し、循環誤りを記録して続行する。ソートはＯ（ＮｌｏｇＮ）要しループ範囲はＮなので、ループに関する全体のランタイムの推定はＯ（Ｎ２ｌｏｇＮ）である。
【０２２２】
第２の「修正トポロジカルソート」プロセスは、ｚ＜＜Ｎのような依存関係グラフがまばらな場合を活用する。或る最初のソート後、このプロセスは、他の如何なるパラメータにも依存しないパラメータのリストcandidates（候補）のソート性を維持することができる。このことは、以下で説明するようにこの予期されるランタイムを短縮する。
【０２２３】
以下は、第２の「修正トポロジカルソート」プロセスのための擬似コードである：
【数５】
2018528506.tif 000008
【０２２４】
このプロセスはまず、上記のソート基準by_n_deps_and_orderに従ってparam_listのパラメータを順序付ける関数parm_list.sort(by_n_deps_and_order)を使用してparam_listの最初のソートを行う。次いでこのプロセスは、（「# section 1」、「# section 2」、及び「# section 3」とラベル付けした）３つのセクションを有するループを実行する。
【０２２５】
section 1で、このプロセスは依存関係がゼロのパラメータだけを含むcandidates（候補）リストを構築する。このプロセスは、parm_list内のパラメータの全てを走査し、それらをcandidates（候補）に付加し、それらの相対的な順序を保存する。
【０２２６】
section 2で、このプロセスは、candidates（候補）からのパラメータが除去され、新たなパラメータがcandidates（候補）内にマージされるループを実行する。this_parmとして保存されるcandidates（候補）内の第１のパラメータは、candidates（候補）から除去され、param_listから消去される。関数get_new(this_parm)は、新たに除去されるthis_parmに関するdependers_dictの構成要素であり、依存関係が残っていないパラメータ名称のリストを返す。その最後の依存関係が削除されたパラメータを表すこれらのパラメータは、（そのそれぞれの序数に従って順序付けられることを確実にするために）by_n_deps_and_orderに従ってソートされ、candidates（候補）内にマージされる。従って、candidates（候補）リストは、序数によってソートされる、依存関係がないパラメータのリストのままである。
【０２２７】
section 3は、例えば２つのパラメータが互いに対して定義される場合に発生する「循環誤り」がある場合にのみ突入する。この場合、このプロセスはparm_listを再びソートし、parm_list内の第１のパラメータがゼロではない依存関係を有する場合はそれを消去し、このループをsection 1で繰り返す。
【０２２８】
循環誤りがないと仮定し、Ｎパラメータのリストparm_listは開始時にのみソートされ、Ｏ（ＮｌｏｇＮ）のソート時間をもたらす。その後、candidates（候補）リストの先頭においてパラメータを除去することによって得られる、新たに生成された依存関係がないパラメータのはるかに小さいリストに対してのみソートが行われる。このリストのサイズは（平均で）ｚ未満であり、Ｏ（ｚｌｏｇｚ）のソート時間及びＯ（ｚ）のマージ時間をもたらす。従って、ループの１回の反復はＯ（ｚ  ｌｏｇ  ｚ）であり、全体時間はＯ（Ｎｚ  ｌｏｇ  ｚ＋Ｎ  ｌｏｇ  Ｎ）である。ｚがＮの増加と共に増えない場合、この時間は事実上Ｏ（ＮｌｏｇＮ）である。
【０２２９】
ソートの例２
別の例では、パラメータソートプロセス（例えば第１の又は第２の「修正トポロジカルソート」プロセス）が、図３４Ａに示すようにグラフ成分２２５０２、２２５０４、及び２２５０６を有するグラフ２２５００に関するランタイムパラメータの最初のリストを決定する。グラフ２２５００は、入力データセット２２５１０の出力ポート２２５０８及び出力データセット２２５１４の入力ポート２２５１２に関連するランタイムパラメータも有する。この例では、パラメータが「成分内」の依存関係及び「成分間」の依存関係の両方を有する。つまり、成分のパラメータは同じ成分内のパラメータ及び他の成分内のパラメータに依存する。この例では、成分間の依存関係は、一部のパラメータが依存するメタデータの伝搬を可能にする成分間のフローによって生じる。
【０２３０】
図３４Ａでは、第１のパラメータ又はポートから第２のパラメータ又はポートへの点線矢印によって依存関係が示されている。ポートへの矢印は、リンクされるパラメータの値がそのポートから下流のポートに伝搬することを示す。ポートからの矢印は、値が上流のポートからリンクされるパラメータに伝搬することを示す。第１のパラメータから第２のパラメータへの矢印は、第２のパラメータの値が第１のパラメータの値に依存する（例えば参照する）ことを示す。
【０２３１】
図３４Ｂは、グラフ２２５００に基づくパラメータｐ０、ｐ１、ｐ２、ｐ４、ｐ５、及びｐ６間の順序付けの制約を表す依存関係グラフ２２５５０を示す。
【０２３２】
図３４Ｃは、グラフ２２５００に基づくパラメータｐ３、ｐ７、ｐ８、及びｐ９間の順序付けの制約を表す依存関係グラフ２２５５２を示す。
【０２３３】
パラメータソートプロセスは、グラフ２２５００内の要素の配置順序に応じて、様々なグラフ要素のための１０個のパラメータｐ０，ｐ２，．．．，ｐ９のそれぞれに序数を割り当てる。図３４Ａでは、（例えばＧＤＥ１００２を使用する利用者によって）グラフ２２５００に追加される第１のグラフ要素は、パラメータｐ０、ｐ１、及びｐ２を有する成分２２５０２である。追加される第２の要素は、パラメータｐ３、ｐ４、及びｐ５を有する成分２２５０６である。追加される第３の要素は、パラメータｐ６を有するデータセット２２５１０である。追加される第４の要素は、パラメータｐ７を有するデータセット２２５１４である。追加される最後の要素は、ランタイムパラメータを有さないデータセット２２５１６である。以下の表は割り当てられた序数によって定義される最初の順序内のパラメータを列挙する。
【０２３４】
【表２】
2018528506.tif 000009
【０２３５】
処理の様々な段階におけるparam_list及びresult_list内のパラメータの以下のリストは、上記の第１の「修正トポロジカルソート」プロセスに対応する。各段階において、param_listがソート基準by_n_deps_and_orderに従ってソートされて示されている。
【数６】
2018528506.tif 000010
【０２３６】
処理の様々な段階におけるcandidates（候補）及びresult_list内のパラメータの以下のリストは、上記の第２の「修正トポロジカルソート」プロセスに対応する。各段階においてパラメータが同じ順序に留まるので、段階間でcandidates（候補）をソートしなくても良い。
【数７】
2018528506.tif 000011
【０２３７】
従って、図３５を参照し、「修正トポロジカルソート」プロセス２２６００は、ランタイムパラメータの値を利用者に促す第１の所望の順序２２６０２、及びパラメータ（例えば依存関係グラフ２２５５０及び２２５５２）に関する順序付けの制約２２６０４を入力として取る。プロセス２２６００は、第１の所望の順序２２６０２に従って順序付けの制約を満たす１組のパラメータの新たな順序２２６０６を与える。
【０２３８】
典型的な使用法
典型的には、利用者はウェブインタフェース１００８の前に座り、自分が実行したいアプリケーションのグラフをリポジトリ１００４内で見つける。アプリケーショングラフに関連するオブジェクトの全てを走査することにより、ウェブインタフェース１００８は、利用者がアプリケーションのランタイムパラメータの値を規定できるようにするウェブページフォームを生成する。全てのランタイムパラメータが規定されると、アプリケーションとパラメータ設定との組合せがジョブとしてまとめられ、ジョブは実行部１０１０による実行がスケジュールされる。ジョブを実行する時間になると、実行部１０１０は、並列オペレーティングシステム１００６の下で実行するためにアプリケーションを知られているやり方で待ち行列に入れる。並列オペレーティングシステム１００６は、利用者及び管理者がジョブの進捗状況及び性能を追跡できるように追跡情報及びジョブステータスを集め、その情報をリポジトリ１００４内に記憶する。
【実施例】
【０２３９】
実施例
図２３は、ランタイムパラメータなしのロールアップアプリケーションを表すグラフ１４００の図である。このグラフは、それぞれの種類のアカウント数を計算し、その結果を出力ファイルに書き込む。このアプリケーションの全ての側面、つまり入力ファイル成分１４０２の名称、入力データのフォーマット、HashRollup（ハッシュロールアップ）成分１４０４内のデータをロールアップするために使用されるキー及び変換規則、出力フォーマット、並びに出力ファイル成分１４０６の名称はグラフを作成した開発者によって決定されている。利用者は、このグラフを厳密に定義された通りにしか実行することができない。
【０２４０】
図２４は、図２３のロールアップアプリケーションのランタイムパラメータ化バージョンを表すグラフ１５００の図である。このアプリケーションのデータフローグラフ構造は、非ランタイムパラメータ化バージョンと非常に似ているが、このアプリケーションの方がはるかに柔軟である。ランタイムパラメータにより、エンドユーザは抽象化された入力データセット１５０２（入力ファイルの名称及びフォーマットがそこから導出される保管オブジェクト）の名称、HashRollup（ハッシュロールアップ）成分１５０４に関するロールアップキー及びロールアップ規則、並びに出力ファイル成分１５０６の名称を規定することができる。
【０２４１】
図２５は、図２４のアプリケーションの一例に関するランタイムパラメータグリッド１６００を表すグラフィカルダイヤログの一実施形態の図である。これは図１１に示したパラメータグリッドの記入バージョンである。上記のように幾つかのデフォルトのパラメータがprompt_for擬似関数を使用して定義され、従ってウェブインタフェース１００８によるユーザ入力を必要とすることに留意されたい。このグラフの見た目は非ランタイムパラメータ化アプリケーショングラフと殆ど同じだが、グラフの実行を制御する全てのパラメータを開発者が完全に追跡することを１つ又は複数のパラメータグリッド（又は他の適切な制御）が可能にする。
【０２４２】
図２６Ａは、図２５のパラメータグリッド１６００内の情報からウェブインタフェースによって生成されたフォーム１７００を表すグラフィカルダイヤログの一実施形態の図である。この例では、フォーム１７００がユーザ入力のための４つのランタイムパラメータ、つまり入力データセットリポジトリパス１７０２、ロールアップキー１７０４、ロールアップ規則１７０６、及び出力パス１７０８を提示する。
【０２４３】
図２６Ｂは、利用者によってパラメータ値で埋められた図２６Ａのフォーム１７００の図である。利用者は、直接記入及び／又はランタイムパラメータ１７０２〜１７０８に関連する編集コントロールボタン若しくはブラウザコントロールボタンを使用し、関連するグラフを実行するための対応するパラメータ値１７１０〜１７１６を与える。
【０２４４】
図２７は、ランタイムパラメータ化ロールアップ及び結合アプリケーションを表すグラフ１８００の図である。
【０２４５】
図２８は、図２７のアプリケーションの一例に関するランタイムパラメータグリッド１９００を表すグラフィカルダイヤログの一実施形態の図である。ここでは、アプリケーションの一部の側面がパラメータ化されているが、結合キー及び入力データセットを含む殆どは固定されたままである。
【０２４６】
図２９は、図２８のパラメータグリッド１９００内の情報からウェブインタフェース１００８によって生成されたフォーム２２２０を表すグラフィカルダイヤログの一実施形態の図である。ロールアップへの入力タイプは最上位のフォームが表示された時点で知られているので、ロールアップ規則２２２２をインプレースでプロンプトできることに留意されたい。
【０２４７】
図３０は、ランタイムパラメータ化ロールアップ−結合−ソートアプリケーションを表すグラフ２２１１０の図である。図２７の例と同様だが、条件付きソート成分２２１１２がグラフ２２１１０に追加されている。
【０２４８】
図３１は、図３０に示したアプリケーションの一例に関するランタイムパラメータグリッド３２２００を表すグラフィカルダイヤログの一実施形態の図である。sort_keyランタイムパラメータ３２２０２は、ソートが望ましいことを利用者が示す場合にのみプロンプトされる。この効果を得るために、開発はsort_keyランタイムパラメータ３２２０２のデフォルト値３２２０４に対するif条件付き試験内にprompt_for擬似関数を置く。if条件付き試験は、第２のランタイムパラメータdo_sort３２２０６を参照する。do_sortパラメータ３２２０６のデフォルト値フィールド３２２０８及び記述フィールド３２２１０を定義して、テキストプロンプト「データをソートすべきでしょうか？」に対する真／偽又ははい／いいえの回答を利用者に尋ねるradioプロンプトを生成する。do_sortパラメータ３２２０６に与えられる値が「真」の場合、ソート成分２２１１２はランタイム時にグラフの一部として含まれる。さもなければ、ソート成分２２１１２の規定された条件解釈に応じて、ソート成分２２１１２はグラフから完全に削除され又はフローで置換される。
【０２４９】
スクリプト実装
ＧＤＥ１００２はパラメータ化グラフの構築を容易にするが、フォームベースのインタフェースの提供が望まれる非グラフプログラムが時として存在する。アプリケーションレベルＰＬ及びリポジトリ１００４を使用し、任意のシェルスクリプトをパラメータ化することができる。例えば、アプリケーションの記述を以下と同様の構造でファイルに書き込むことができる：
【数８】
2018528506.tif 000012
【０２５０】
汎用コンピュータ実装
本発明は、ハードウェア若しくはソフトウェア、又はその両方の組合せ（例えばプログラマブルロジックアレイ）によって実装することができる。特別の定めがない限り、本発明の一部として含まれるアルゴリズムは或る特定のコンピュータ又は他の機器に固有に関係しない。とりわけ、様々な汎用マシンを本明細書の教示に従って書かれたプログラムと共に使用することができ、又は所要の方法ステップを実行するためのより特化した機器を構築した方が便利な場合もある。しかし、本発明は好ましくは１つ又は複数のプログラマブルコンピュータシステム上で実行される１つ又は複数のコンピュータプログラムによって実装され、かかるプログラマブルコンピュータシステムは、少なくとも１個のプロセッサ、少なくとも１つのデータ記憶システム（揮発性及び不揮発性のメモリ及び／又は記憶素子を含む）、少なくとも１つの入力装置又はポート、及び少なくとも１つの出力装置又はポートをそれぞれ含む。プログラムコードは、本明細書に記載の機能を実行するためにプロセッサ上で実行される。
【０２５１】
かかる各プログラムは、コンピュータシステムと通信するために所望の任意のコンピュータ言語（機械語、アセンブリ言語、又は高水準の手続き型プログラミング言語、論理プログラミング言語、若しくはオブジェクト指向プログラミング言語を含む）によって実装することができる。何れにせよ、言語はコンパイル型言語又はインタプリタ型言語とすることができる。
【０２５２】
本明細書に記載の手続きを実行するために記憶媒体又は装置がコンピュータシステムによって読み取られるときコンピュータを構成し動作させるために、かかる各コンピュータプログラムは、好ましくは汎用の又は専用のプログラマブルコンピュータによって読取可能な記憶媒体又は装置（例えば固体媒体、磁気媒体、又は光学媒体）上に記憶される。本発明のシステムは、コンピュータプログラムで構成されるコンピュータ可読記憶媒体として実装されるとも考えられ、そのように構成される記憶媒体は、本明細書に記載の機能を実行するようにコンピュータシステムを特定の且つ既定のやり方で動作させる。
【０２５３】
本発明の幾つかの実施形態を説明してきた。それでもなお、本発明の趣旨及び範囲から逸脱することなしに様々な修正を加えることができることが理解されよう。例えば、上記の幾つかの機能ステップは、全体の処理に実質的に影響を与えることなしに異なる順序で実行することができる。例えば、図１３のステップ４００２及び４０１２は逆の順序で実行することができる。従って他の実施形態も添付の特許請求の範囲に含まれる。
【０２５４】
図３６は、動的ローディング技法を使用することができる例示的なデータ処理システム１１００を示す。システム１１００は、記憶装置やオンラインデータストリームへの接続等、１つ又は複数のデータ源を含み得るデータ源１１０１を含み、そのそれぞれは様々な記憶フォーマット（例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット）の何れかによってデータを記憶することができる。実行環境１１０４は、実行時前モジュール１１０５及び実行モジュール１１０６を含む。実行環境１１０４は、ＵＮＩＸオペレーティングシステム等の適切なオペレーティングシステムの制御下で１台又は複数台の汎用コンピュータ上にホストされ得る。例えば実行環境１１０４は、ローカルの（例えばＳＭＰコンピュータ等のマルチプロセッサシステム）、ローカルに分散される（例えばクラスタとして結合される複数個のプロセッサ、又はＭＰＰ）、遠隔的に、遠隔的に分散される（例えばローカルエリアネットワーク（ＬＡＮ）及び／又は広域ネットワーク（ＷＡＮ）によって結合される複数個のプロセッサ）、又はそれらの任意の組合せの複数個の中央処理装置（ＣＰＵ）を使用するコンピュータシステムの構成を含む、多重ノード並列計算環境を含み得る。
【０２５５】
実行時前モジュール１１０５は、データフローグラフをコンパイルすること、実行環境１１０４にとってアクセス可能なデータ記憶システム１１０７との間でコンパイル済みデータフローグラフを記憶／ロードすること、パラメータ値を解決し、解決済みの値をパラメータにバインドすること等、データフローグラフ及び他の実行可能プログラムの実行に備えて様々なタスクを実行するように構成される。一部の事例では、実行時前モジュール１１０５がデータ源１１０１からのデータに応答してタスク（例えばコンパイル済みデータフローグラフをロードすること）を実行する。データ源１１０１を提供する記憶装置は実行環境１１０４にとってローカルとすることができ、例えば実行環境１１０４を実行するコンピュータに接続される記憶媒体（例えばハードドライブ１１０２）上に記憶され、又は実行環境１１０４にとって遠隔的とすることができ、例えば実行環境１１０４を実行するコンピュータと遠隔接続上で通信する遠隔システム（例えばメインフレーム１１０３）上にホストされる。
【０２５６】
実行モジュール１１０６は、実行時前モジュール１１０５によって生成されるコンパイル済みデータフローグラフを使用して出力データを生成し、そのデータは、データ源１１０１に戻されても良く且つ／又はデータ記憶システム１１０７内に記憶され得る。データ記憶システム１１０７は、開発者１１０９がデータフローグラフを設計することができる開発環境１１０８にとってもアクセス可能である。データフローグラフを表すデータ構造は、シリアル化されデータ記憶システム１１０７内に記憶され得る。
【０２５７】
実行モジュール１１０６は、様々な形態のデータベースシステムを含むデータ源１１０１の多岐にわたる種類のシステムからデータを受信し得る。データは、ことによるとヌル値を含むそれぞれのフィールド（「属性」又は「列」とも呼ばれる）の値を有するレコードとして編成され得る。データ源からデータを読み取るとき、実行データフローグラフは、そのデータ源内のレコードに関する最初のフォーマット情報を扱う成分を含み得る。一部の状況では、データ源のレコード構造が最初に分からない場合があり、代わりにデータ源を分析した後で決定され得る。レコードに関する最初の情報は、別個の値を表すビット数、レコード内のフィールドの順序、及びビットによって表される値のタイプ（例えば文字列、符号付き／符号なし整数）を含み得る。
【０２５８】
図３７を参照し、実行モジュール１１０６によって実行されるデータフローグラフ１１５５の一例は、入力データ源１１１０からのデータを読み取り、離散的な作業要素のフローとして処理することを可能にする。作業要素の処理に関与する計算の様々な部分が、グラフの頂点（又はノード）として表される成分１１２０、１１３０、及び成分１１２０と成分１１３０とを接続するリンク１１２５等、グラフのリンク（又は弧、辺）によって表される成分間のデータフロー内で実行される。かかるグラフベースの計算を実装するシステムが、参照により本明細書に援用する米国特許第５，５６６，０７２号、グラフとして表現される計算の実行（EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS）の中で説明されている。このシステムに従って作られるデータフローグラフは、グラフ成分によって表される個々のプロセスの内外に情報を出し入れするための、プロセス間で情報を動かすための、及びプロセスの実行順序を定めるための方法を提供する。このシステムは、プロセス間の通信方法を選ぶアルゴリズムを含む（例えばグラフのリンクによる通信経路は、プロセス間でデータを渡すためにＴＣＰ／ＩＰ若しくはＵＮＩＸドメインソケットを使用することができ、又は共用メモリを使用することができる）。
【０２５９】
実行するための未コンパイルデータフローグラフを準備するプロセスは様々な段階を含む。データフローグラフの未コンパイル表現が、コンパイルプロセス中に使用される値を与えるデータフローグラフに関連する任意のパラメータと共に取り出される。静的パラメータの解決段階の間、（その値がランタイム前の解決のために指定される）静的パラメータが解決され、解決済みの値が静的パラメータにバインドされる。一部の事例では、静的パラメータの値を解決するために、計算を行って特定の値（例えば参照により本明細書に援用する「グラフベースの計算のためのメタデータの管理（MANAGING METADATA FOR GRAPH-BASED COMPUTATIONS）」と題された米国特許出願公開第２００６／０２９４１５０号の中で記載されているようにメタデータ値）を導出する。一部のパラメータは、ランタイム時に又はその直前に後で解決されるよう未解決のままにされる動的パラメータとして指定することができる。例えば静的パラメータ値に基づき所定の条件が満たされない（又は満たされる）場合、条件付き成分として指定される成分が（例えばデータフローリンクによって置換されることにより）グラフから削除される。コンパイル段階の間、実行中に使用される、その成分及びリンクを含むデータフローグラフを表すデータ構造が生成される。コンパイルすることは、スクリプト言語内の埋込みスクリプトをバイトコード又は機械コードへとコンパイルすることも含み得る。ランタイム時に、データフローグラフに関連する任意の動的パラメータが解決済みの値にバインドされ、コンパイル済みデータフローグラフのデータ構造が１つ又は複数のプロセスを開始することによって、必要な任意のファイル（例えば動的パラメータによって識別されるファイル）を開くことによって、及び／又は任意の動的ライブラリをリンクすることによって起動される。このプロセスは、リンクによって表されるデータフローをセットアップするためのタスク（例えば共用メモリの割当てやＴＣＰ／ＩＰストリームの開始）も実行する。参照により本明細書に援用する「グラフベースの計算における計算資源の管理（MANAGING COMPUTING RESOURCES IN GRAPH-BASED COMPUTATIONS）」と題された米国特許出願公開第２００７／０２７１３８１号の中で記載されているように、一部の事例では単一のプロセス内で複数の成分を実行するようにデータ構造が構成される。
【０２６０】
データフローグラフは様々な抽象化レベルで規定することができる。それ自体が成分及びリンクを含むデータフローグラフである「下位グラフ」は、単一の成分として別の親データフローグラフ内で表すことができ、下位グラフを親データフローグラフに接続するリンクだけを示す。一部の事例では、開発環境１１０８内で親データフローグラフの成分及びリンクを隠すために下位グラフが使用されるが、成分及びリンクを表すデータは既に親データフローグラフ内に統合されている。以下でより詳細に説明するように、一部の実施形態では、下位グラフが親データフローグラフの中に最初は含まれていないが、親データフローグラフ内にロードされる成分及びリンクを表すデータ構造を含むコンパイル済みデータフローグラフとして始まる「マイクログラフ」から後で導出される。
【０２６１】
図３７を参照し、データフローグラフ１１５５は、この例ではデータセット成分１１１０によって表されるデータ源から連続した入力データフローを受け付けることができる。データフローは、データフローグラフ１１５５の動作中に盛衰し得るが、必ずしも区別可能な始まり又は終わりを有さないという意味では連続的である（例えばクレジットカードトランザクションや入力システム内で受け付けられる注文のフロー）。加えて、データフローグラフ１１５５は、この例ではデータセット成分１１４０によって表される出力データリポジトリに連続した出力データフローを与えることができる。一部のデータフローグラフは、連続したデータフローを無期限にわたり処理する連続したデータフローグラフとして実行されるように設計され、一部のデータフローグラフは、離散的なデータバッチを処理するために実行を開始し、バッチの処理後に実行を終了するバッチデータフローグラフとして実行されるように設計される。データフローグラフのデータ処理成分１１２０及び１１３０は、一連の命令、下位グラフ、又はそれらの何らかの組合せを含み得る。
【０２６２】
一部の構成では、専用成分１１３０が、動的に取り出されるように構成される一種の専用の下位グラフであり、親データフローグラフ内に埋め込まれるマイクログラフ１１６０をロードし得る。マイクログラフは、専用成分１１３０等、親データフローグラフの親成分と共に動的に埋め込むことができる。一部の構成では、マイクログラフ１１６０が、過去にコンパイルされデータ記憶システム１１０７内に記憶されたデータフローグラフから導出される。一部の構成では、マイクログラフ１１６０は、データ記憶システム１１０７からロードされるとき未コンパイル形式のままである。例えば、コンパイル済みデータフローグラフをロードする代わりに、専用成分１１３０はグラフコンパイル手続きを開始して、専用成分１１３０を含むデータフローグラフが使用直前にコンパイルされているマイクログラフを実行できるようにすることができる。このグラフコンパイル手続きは、専用成分１１３０の外部で又は専用成分１１３０の内部で行うことができる。一部の構成では、データ記憶システム１１０７内に記憶される前にマイクログラフ１１６０がシリアル化される。概してシリアル化は、データフローグラフが永続メモリ内に又はメモリバッファ内に容易に記憶され得る形式になるように、コンパイル表現又は未コンパイル表現のデータフローグラフを０と１のバイナリストリームに変換するプロセスである。マイクログラフの高速ローディングが望ましい実装形態では、典型的にはデータフローグラフがデータ構造と共にコンパイル済み表現にシリアル化され、データ記憶システム１１０７内に記憶され、それによりシリアル化されたコンパイル済みデータフローグラフを容易に取り出すことができ、データ構造がランタイム時に動的にデシリアル化されロードされる。コンパイルは、コンピュータによって実行されるように、データフローグラフとして表されるプログラムを含むコンピュータプログラムを準備するプロセスである。コンパイルは、機械コード又はコンピュータ上で実行される準備が整った命令の生成、又はコンピュータ上で実行される仮想マシンによって実行される中間コード、例えばJavaバイトコードをもたらし得る。データフローグラフの場合、コンパイルは、データフローグラフの成分及びリンクを表すデータ構造をコンピュータ上で実行する準備が整った形式で生成することを含む。
【０２６３】
専用成分１１３０の入力リンク１１２５に沿ってデータフローグラフ１１５５を流れるデータは、専用成分１１３０がマイクログラフ１１６０をロードし、マイクログラフ１１６０をデータフローグラフ１１５５内に統合する間一時的にバッファ内に記憶される。同様に、マイクログラフがデータフローグラフ１１５５から切り離されアンロードされる間、データフローはバッファ内に蓄積することを認められる。一部の構成では、切り離されたマイクログラフが、後でアクセスされるように（例えばキャッシュメカニズムを使用して）メモリ内にロードされたままでも良い。
【０２６４】
バッファリングは、成分への作業要素の入力フローを与えるリンクのための入力待ち行列を使用して実装されるフロー制御メカニズムを使用するように構成することができる。このフロー制御メカニズムは、ディスクドライブ等、概して大容量だが低速の不揮発性ローカル記憶域に必ずしも書き込むことなしに、データがデータフローグラフの成分間を流れることを可能にする。入力待ち行列は、概して不揮発性メモリよりも小容量且つ高速の揮発性メモリ内に作業要素を保持できるほど小容量に保つことができる。この記憶空間及び時間の潜在的な節約は、非常に大きいデータセットについてさえ存在する。成分は、入力待ち行列の代わりに又は入力待ち行列に加えて出力バッファを使用することができる。２つの成分がフローによって接続される場合、上流成分は下流成分が作業要素を消費し続ける限り下流成分に作業要素を送信する。下流成分が後れを取る場合、上流成分は下流成分の入力待ち行列を埋め、入力待ち行列が再び空になるまで機能を停止する。
【０２６５】
一部の構成では、マイクログラフ１１６０が、スケジューリングプロセスによるスケジュールベースで、バッチデータフローグラフの一部として、又はコマンドラインから実行され、親データフローグラフの専用成分内に必ずしもロードされない。或いは、スケジューラが専用成分を使用して、待ち行列からのメッセージに応答して適切なマイクログラフをロードする専用成分を含む実行データフローグラフに連続したメッセージフローを与える待ち行列にメッセージを送信することにより、バッチ処理のためのマイクログラフを起動することができる。
【０２６６】
１  専用成分
図３８Ａを参照し、一実施形態では、専用成分３８２００が複数の入力３８２０５、３８２１０、３８２１５を受け付け、複数の出力３８２２０、３８２２５、３８２３０、及び３８２３５を送るように構成される。入力は、データ入力３８２０５、３８２１０、及び制御入力３８２１５を含む。出力は、データ出力３８２２０、３８２２５、３８２３０、及びステータス出力３８２３５を含む。制御入力３８２１５は、（例えば受信される制御要素内で）実行するためのマイクログラフ３８２４０の識別情報、及び任意選択的にマイクログラフ３８２４０を実行するために使用される１組のパラメータを受け付ける。概して、専用成分３８２００は、データ入力３８２０５や３８２１０等のそれぞれのデータ入力ポート上で、入力作業要素のゼロ以上のフローを受け付けることができる。ステータス出力３８２３５は、マイクログラフ３８２４０の実行から、終了ステータス及び追跡情報を含むステータスレコードを作り出す。加えてこの専用成分は、データ出力３８２２０、３８２２５、３８２３０等のそれぞれのデータ出力ポート上で、出力作業要素のゼロ以上のフローを作り出す。一実施形態では、専用成分３８２００が通常の実行中に１つのステータスレコードを作り出し、１つの制御レコードを受け付ける。
【０２６７】
制御入力３８２１５は、ロードすべき対応するマイクログラフをそれぞれ識別する一連の複数の制御要素を受信することができる。各制御入力要素は、識別されるマイクログラフによって処理される作業単位を表す、データ入力上で受信される作業要素のフロー内の作業要素の異なる部分集合に関連する。一部の事例では、作業単位内の１つ又は複数の作業要素を分析することに基づきマイクログラフを識別する制御要素を生成し、その作業単位を処理するのに適切なマイクログラフを選択する。一部の事例では、マイクログラフを識別する制御要素と識別されるマイクログラフによって処理される作業単位を表す作業要素とが独立に受信され、様々な技法の何れかを使用して互いにマッチされる。例えば、マイクログラフを識別する制御要素が最初に受信され、作業単位の少なくとも１つの作業要素内に登場するキー値を対応する制御要素にマッチすることにより、識別されるマイクログラフによって処理される作業単位を表す作業要素が決定される（例えば作業単位内の最初の作業要素だけ、又は作業単位内の全ての作業要素）。或いは、「デリミタ作業要素」と呼ばれる作業要素が、同じ作業単位に属する作業要素の様々なシーケンスを分けるデリミタとして機能し得る。或いは専用成分２００は、それぞれの制御要素に関連する連続した作業単位に属するように所定数の作業要素を受信するように構成される。
【０２６８】
マイクログラフ３８２４０は、専用成分３８２００に適合するように設計されているマイクログラフの一群から選択することができる。例えば、マイクログラフ３８２４０の入力ポート及び出力ポートの数は、専用成分３８２００の入力ポート及び出力ポートの数に一致し得る。この例では、マイクログラフ３８２４０が２つの入力ポート及び３つの出力ポートを有し、それらのポートは、入力フローを受信するように構成されるマイクログラフ３８２４０の２つの異なる成分、及び出力フローを与えるように構成されるマイクログラフ３８２４０の３つの異なる成分上に位置し得る。或いは、マイクログラフ３８２４０の複数の入力ポート又は出力ポートは同じ成分上に位置しても良い。
【０２６９】
一部の実施形態では、専用成分３８２００が既定の状態に関してマイクログラフ３８２４０をモニタし、それらの状態に応答し得る。例えば専用成分３８２００は、マイクログラフ３８２４０の成分を実行するプロセスをモニタするための別個のプロセスを使用して、マイクログラフ３８２４０の実行中の待ち時間が最大閾値又はタイムアウト状態に関して上回るかどうかを判定することができる。それに応答し、専用成分３８２００が、例えばマイクログラフ３８２４０の第２のインスタンスをロードすることによってその状態に応答し得る。同様に誤り状態もモニタされる。誤り状態を検出することに応答し、専用成分３８２００は誤りのログを取り、誤り状態に基づいて作業単位をリダイレクトすることができ、必要な場合はマイクログラフ３８２４０を再開し、ステータス出力３８２３５によって誤りを報告することができる。マイクログラフ３８２４０を再開することは、専用成分３８２００を含む親データフローグラフの他の如何なる成分にも割り込む必要がない。
【０２７０】
一部の実施形態では、専用成分３８２００が入力ポート上のデータフローを分析し、どのマイクログラフ３８２４０を実行するのかを決定する。他の実施形態では、実行するためのマイクログラフ３８２４０の名称又は他の識別情報がデータフローの一部として専用成分３８２００に供給される。更に他の実施形態では、マイクログラフ３８２４０を識別する情報が専用成分３８２００の制御入力３８２１５によって供給される。
【０２７１】
専用成分３８２００は、データ記憶システム１１０７からマイクログラフ３８２４０をロードし、以下でより詳細に説明するように専用成分３８２００を含むデータフローグラフ内にマイクログラフ３８２４０を埋め込み、マイクログラフ３８２４０がデータフローを処理することを可能にする。
【０２７２】
操作が完了すると、専用成分３８２００がマイクログラフ３８２４０を削除する。一部の実施形態では、専用成分３８２００が、記憶位置内に記憶されるマイクログラフキャッシュ内にマイクログラフ３８２４０を記憶することができ、かかるマイクログラフキャッシュからは、後でアクセスするためにデータ記憶システム１１０７からよりもマイクログラフ３８２４０に相対的に容易にアクセスすることができる。一部の実施形態では、マイクログラフ３８２４０がロードされ、統合され、削除されている間、専用成分３８２００が入力データをバッファに入れることができる。
【０２７３】
２  マイクログラフの構造
図３８Ｂを参照し、マイクログラフ３８２４０の一例は、上流成分にリンクされる１つ又は複数の入力ポートに到着するデータフロー内の入力作業要素に対して操作を行い、下流成分にリンクされる１つ又は複数の出力ポートを離れるデータフロー内の出力作業要素を作り出す、データ処理成分３８３０５、３８３１０、３８３１５、及び３８３２０を含む。マイクログラフ３８２４０は、マイクログラフ３８２４０を専用成分３８２００内に埋め込むプロセスを助けるように構成される、「インタフェース成分」と呼ばれる成分３８３００Ａ、３８３００Ｂ、及び３８３０２Ａ、３８３０２Ｂ、３８３０２Ｃも含む。インタフェース成分は、実行するために専用成分内に埋め込む必要がない独立したデータフローグラフとしてマイクログラフを実行することも可能にする。
【０２７４】
インタフェース成分は、マイクログラフを親専用成分のポートに接続するために使用される。マイクログラフを専用成分内に埋め込むことは、各インタフェース成分を専用成分の正しいポートとどのように対にするのかを決定することを含む。入力インタフェース成分（３８３００Ａ、３８３００Ｂ）は出力ポートを有し、出力インタフェース成分（３８３０２Ａ、３８３０２Ｂ、３８３０２Ｃ）は入力ポートを有する。入力インタフェース成分が専用成分の入力ポートと対にされると、その入力ポートと入力インタフェース成分の出力ポートがリンクされるポートとの間にデータフローリンクが生成される。同様に、出力インタフェース成分が専用成分の出力ポートと対にされると、出力インタフェース成分の入力ポートがリンクされるポートとその出力ポートとの間にデータフローリンクが生成される。
【０２７５】
インタフェース成分をそのそれぞれの専用成分の入力ポート及び出力ポートと正しく対にすることは、以下のように決定することができる。インタフェース成分及び専用成分のポートは、任意選択的に識別情報でラベル付けすることができる。専用成分の入力／出力ポートに割り当てられる識別情報と入力／出力インタフェース成分に割り当てられる識別情報との間に一致が認められる場合、そのポートとそのインタフェース成分とが対にされる。識別情報間の一致は厳密でも厳密でなくても良い（例えば識別情報の一部の接頭辞又は接尾辞間の一致を見つけること）。或る対にする手続きでは、厳密な一致が明らかにされた後、数字サフィックスを有するインタフェース成分が一致する数字サフィックスを有するポートにマッチされる（例えば専用成分の「out1」ポートは「Micrograph Output-1」インタフェース成分と対にされる）。
【０２７６】
マイクログラフが（例えば試験のための開発環境１１０８からのコマンドに応答して）専用成分の外側で実行される場合、インタフェース成分がデータセット成分の機能を提供し、インタフェース成分の出力ポート又は入力ポートに接続されるリンク上のデータフロー内の作業要素のソース又はシンクを提供する。マイクログラフが専用成分内に埋め込まれているかどうかに基づいて適切な機能が決定される。インタフェース成分は、マイクログラフが専用成分内に埋め込まれている場合はマイクログラフと専用成分との間で作業要素を送信するための命令、及びマイクログラフが専用成分内に埋め込まれていない場合はマイクログラフと記憶位置との間で作業要素を送信するための命令をそれぞれ含む。記憶位置は、入力作業要素を与えるために読み取られる、又は出力作業要素を受け取るために書き込まれるファイルとすることができる。
【０２７７】
一部の実施形態では、マイクログラフ内に含まれ得るデータ処理成分（この例では成分３８３０５、３８３１０、３８３１５、及び３８３２０）の機能に一定の制約を加えることによってマイクログラフ３８２４０が構成される。例えば一部の実施形態では、マイクログラフ３８２４０のデータ処理成分３８３０５、３８３１０、３８３１５、及び３８３２０が（例えば参照により本明細書に援用する米国特許出願公開第２００７／０２７１３８１号の中でより詳細に説明されているように単一のプロセス内に折り畳まれることによって）単一のプロセス内で実行できることが要求され得る。一部の実施形態では、マイクログラフが、サブスクライブ源（待ち行列等）からデータを受信するサブスクライブ成分をサポートしない。一部の実施形態では、マイクログラフがバッチデータフローグラフとして構成されることが要求され得る。一部の実施形態では、マイクログラフ３８２４０によって実行される如何なるトランザクション操作も単一のトランザクションに収まらなければならない。他の実施形態では、マイクログラフ３８２４０のトランザクションの側面、例えばチェックポイント、トランザクションコンテキスト、及び多相コミットが制御入力３８２１５によって管理される。
【０２７８】
データフローグラフ処理では、連続したデータフローが従来のトランザクションセマンティクスに影響を及ぼし得る。チェックポイント操作は、データフロー内の或る箇所において十分な状態情報を記憶して、データフロー内のその箇所からデータフローグラフが再開することを可能にすることを含む。チェックポイントを余りに頻繁に取る場合は性能が落ちる。チェックポイントを余りにも稀にしか取らない場合、トランザクションが失敗した場合の回復手続きがより複雑且つ多くの資源を必要とするようになる。トランザクションコンテキストは、その操作がより大きいトランザクションの一部であることをマイクログラフに知らせるために使用され得る。このトランザクションは、単一のデータ源に対して作用する複数の成分を包含するより大きいトランザクションとすることができ、又は例えば２相コミット操作において複数のデータ源にわたってトランザクションを調整するのに必要な情報を含み得る。
【０２７９】
３  マイクログラフの管理
図３９を参照し、一実施形態では、専用成分３９４０５が、（例えばローカルメモリ内に記憶される）専用成分にとってアクセス可能なキャッシュ内に複数のマイクログラフを一度にロードされ得る。この例では、１つのマイクログラフ３９４３０が専用成分３９４０５を含むデータフローグラフ内に接続される。専用成分３９４０５の入力３９４４０はリンクによってマイクログラフ３９４３０の入力３９４４５に接続され、マイクログラフ３９４３０の出力３９４５０はリンクによって専用成分３９４０５の出力３９４５５に接続される。マイクログラフ３９４３０の入力３９４４０及び出力３９４５０は、例えば入力インタフェース成分及び出力インタフェース成分、又はマイクログラフを専用成分内に埋め込むための他の任意のメカニズムを表す。
【０２８０】
他のマイクログラフ３９４１０、３９４１５、３９４２０、及び３９４２５を記憶するキャッシュは、接続されているマイクログラフ３９４３０を記憶する同じメモリ内に位置し得る。一部の実施形態では、マイクログラフ３９４１０、３９４１５、３９４２０、３９４２５、及び３９４３０が、専用成分３９４０５を実行する同じプロセス内のスレッドとして、又はそのプロセスの子プロセスとして実行され得る。或いは、マイクログラフ３９４１０、３９４１５、３９４２０、３９４２５、及び３９４３０は、そのプロセスの同じメインスレッド内で実行され得る。一部の実施形態では、専用成分３９４０５がマイクログラフ３９４１０、３９４１５、３９４２０、３９４２５、及び３９４３０の複数のコピーを実行する。一部の実施形態では、専用成分３９４０５は、キャッシュ内に記憶されている被選択マイクログラフのコピーを使用してから、そのコピーが（元のマイクログラフの変更があったことを示す）「ダーティ」として印付けされていない限り、データ記憶システム１１０７内に記憶された元のマイクログラフにアクセスする。被選択マイクログラフのコピーがキャッシュ内にない場合、専用成分３９４０５がマイクログラフをデータ記憶システム１１０７からロードする。一部の実施形態では、被選択マイクログラフが（例えばキャッシュ内のエントリによって）「オフライン」状態にあると示され、かかる状態は被選択マイクログラフが現在使用できないことを示す（例えばそのマイクログラフは開発者によって修正されているプロセスにあり得る）。それに応答し、専用成分は被選択マイクログラフをロードする際の誤りを示すことができ、又は代わりのマイクログラフ（例えば同様の機能を有する別のマイクログラフ）をロードすることができる。
【０２８１】
図４０Ａを参照し、或るシナリオでは、単一の専用成分４０５０５がデータフロー内に同時に統合される複数のマイクログラフ４０５１０、４０５１５、及び４０５２０を有する。作業要素を入力データフローから複数のデータフローへと分割する分割成分４０５５７を使用し、専用成分４０５０５の入力ポート４０５２５が、マイクログラフ４０５２０、４０５１５、及び４０５１０の入力４０５３０、４０５４５、４０５５５にそれぞれ接続される。複数のデータフローから作業要素を収集し、それらを単一の出力データフローへとマージする（「収集成分」と呼ばれる）成分４０５６２を使用し、マイクログラフの出力４０５３５、４０５５０、及び４０５６０が専用成分４０５０５の出力ポート４０５４０に接続される。この構成では、専用成分４０５０５が入力データをマイクログラフ４０５１０、４０５１５、及び４０５２０にルーティングすることができる。例えば、成分が同一マイクログラフの別個のコピーである場合、専用成分４０５０５は分割を行うとき負荷平衡アルゴリズム（例えばラウンドロビンや最低利用等）を利用することができる。
【０２８２】
図４０Ｂを参照し、別のシナリオでは、データフローグラフ４０５６５が複数の専用成分を含み、高度にカスタマイズ可能なコンテナデータフローグラフに構成されるようにマイクログラフの柔軟な組合せを可能にする。この例では、（入力データのバッチ又は入力データの連続ストリームを表し得る）データセット成分４０５７０からの作業要素が（例えば作業要素を再フォーマットするために）データ処理成分４０５７２によってまず処理され、次いでリンク４０５７４上で第１の専用成分４０５７６に送信される。特定の種類の作業要素を検出することに応答し、成分４０５７６は検出した種類の作業要素を処理するように構成されるマイクログラフ４０５７８をロードする。第１の専用成分４０５７６からの処理済みの出力作業要素が、マイクログラフ４０５８２をロードする第２の専用成分４０５８０に送信される。この構成では、第２の専用成分４０５８０内にロードするために選択されるマイクログラフ４０５８２が、第１の被選択マイクログラフ４０５７８の結果に依存し得る。その結果生じる出力作業要素がデータセット成分４０５８４に送信される。データフローグラフ内の戦略的位置にある専用成分を使用し、様々なマイクログラフの多数の組合せを動的にロードすることができる。この単純な例では、第１の専用成分４０５７６内にロードできる１０個の異なる可能なマイクログラフと、第２の専用成分４０５８０内にロードできる１０個の異なる可能なマイクログラフとがある場合、或るデータフローを１００個の異なる実行データフローグラフに分割するのに比べて潜在的にはるかに少ない資源が必要な状態で、且つ作業単位ごとに１００個の異なるデータフローグラフの１つを始動することに比べて潜在的にはるかに高速の待ち時間を伴い、データフローが処理されている間に要求に応じて動的に構築することができる１００個もの数の異なるデータフローグラフがある。
【０２８３】
４  前処理及び後処理
専用成分は、ロードされたマイクログラフ内の成分に加えて他の成分も含み得る。図４１を参照し、一実施形態では、専用成分４１６０５がマイクログラフを実行する前の前処理と、マイクログラフを実行した後の後処理とを含む（図面ではマイクログラフ４１６１５を取り囲む前処理成分４１６１０及び後処理成分４１６２０として表す）。前処理作業及び後処理作業は、例えばトランザクション管理に関係し得る。一部の実施形態では各マイクログラフ４１６１５が別々のトランザクションを表し、その場合、前処理がトランザクションを開始することができ、後処理がそのトランザクションを終了し得る。他の実施形態では、マイクログラフ４１６１５がより長いトランザクションの中のチェックポイントを表し得る。例えばマイクログラフ４１６１５は、２相コミットプロトコルを使用するより長いトランザクションの一部であり得る。かかるトランザクションは、例えば複数の異なるマイクログラフや同じマイクログラフの複数回の実行を使用して処理され得る。
【０２８４】
前処理成分４１６１０はデータ記憶域（不図示）からマイクログラフ４１６１５をロードし、ことによるとロードしたマイクログラフを後でアクセスするためにデータキャッシュ内に記憶し、又はメモリ内のキャッシュ（不図示）のマイクログラフのロードされたバージョンにアクセスし、それを専用成分４１６０５内に統合することができる。後処理成分４１６２０は、ロードされたマイクログラフ４１６１５を専用成分４１６０５のデータフローに対するその統合から削除することができる。例えばマイクログラフ４１６１５による処理のためにデータフロー内のレコードを準備することによる前処理（例えばレコードの再フォーマット）や、専用成分４１６０５の出力に接続される成分による処理のためにマイクログラフ４１６１５から受信されるレコードを準備することによる（例えばレコードの再フォーマットによる）後処理を含む、他の様々な前処理機能及び後処理機能を実行することができる。
【０２８５】
５  データベース接続管理
図４２を参照し、一部のシナリオでは、様々な種類のデータベースにアクセスできるようにするために様々な成分が必要とされる。例えば、或る販売業者によって提供されるデータベース４２７０６にアクセスするには成分４２７０２が必要である一方、別の販売業者によって提供されるデータベース４２７０８にアクセスするには別の成分４２７０４が必要である。概して、成分４２７０２は成分内に統合されるライブラリ４２７１０、例えばデータベース４２７０６の販売業者によって供給されるライブラリにアクセスすることによってデータベース４２７０６にアクセスする。同様に、成分４２７０４は成分内に統合される別のライブラリ４２７１２、例えばデータベース４２７０８の販売業者によって提供されるライブラリにアクセスすることによってデータベース４２７０８にアクセスする。ライブラリは特定の成分内にコンパイルすることができ、又は特定の成分に動的にリンクすることができる。
【０２８６】
図４３を参照し、専用成分４３８０２は複数の異なるマイクログラフ４３８０４、４３８０６、及び４３８０８を含み得る。この例では、マイクログラフ４３８０８が専用成分４３８０２内に埋め込まれ、マイクログラフ４３８０４及び４３８０６が必要に応じて動的に埋め込まれるようにアクセス可能なキャッシュ内にロードされる。マイクログラフの一部は或るデータベース４３７０６にアクセスすることができ、他のマイクログラフは別のデータベース４３７０８にアクセスすることができる。従来、２つのデータベースにアクセスすることは、第１のデータベース４３７０６をサポートするためのライブラリ４３７１０、及びもう一方のデータベース４３７０８をサポートするための別のライブラリ４３７１２が専用成分４３８０２に統合されることを必要とし得る。複数の異なるデータベースライブラリを統合することは、専用成分４３８０２に関連するバイナリサイズの増加、並びに販売業者によって供給される或るライブラリ４３７１０が別の販売業者によって供給される別のライブラリ４３７１２に適合しない場合は予測不能な挙動を引き起こし得る。例えば不適合は、競合する識別名や異なるコンパイルモデルを含み得る。
【０２８７】
不適合を回避し且つ／又はバイナリサイズを減らす１つの方法は、専用成分からライブラリを削除し、代わりに、専用成分を実行しているプロセスとは別のコンピュータプロセスにそれらのライブラリをアクセスさせることである。図４４Ａを参照し、データベースライブラリ４４７１０及び４４７１２が専用成分４４９０２から削除されている（例えば成分４４９０２にコンパイルされておらず又は動的にリンクされていない）。マイクログラフ成分４４９０４、４４９０６、及び４４９０８は、クライアント／サーバインタフェース上でライブラリ４４７１０、４４７１２にアクセスすることによってデータベース４４７０６、４４７０８にアクセスする。ライブラリ４４７１０、４４７１２にアクセスするために、専用成分４４９０２は統合クライアントスタブ４４９１０を使用し、統合クライアントスタブ４４９１０は、プロセス間通信を使用して外部プロセス内で実行される対のサーバスタブ４４９１２と通信する。例えば、外部プロセス及び専用成分４４９０２は共用メモリセグメントにアクセスすることによってデータをやり取りすることができる。同様に、サーバスタブ４４９２０を実行する外部プロセスにアクセスするために、専用成分４４９０２は、プロセス間通信を使用して外部プロセス内で実行されるサーバスタブ４４９２０と通信する別の統合クライアントスタブ４４９１８を使用する。
【０２８８】
サーバスタブ４４９１２は、データベース４４７０６へのアクセスを提供するためにデータベースライブラリ４４７１０と統合する。同様に、サーバスタブ４４９２０は、データベース４４７０８へのアクセスを提供するためにデータベースライブラリ４４７１２と統合する。概して、クライアントスタブ４４９１０、４４９１８はデータベースライブラリ４４７１０、４４７１２よりも小さいメモリフットプリントを有し、従って専用成分がより少ないメモリ資源を使用することを可能にする。加えて、データベースライブラリが専用成分４４９０２の外に移動されているので、データベースライブラリ４４７１０、４４７１２間の不適合のリスクがない。
【０２８９】
図４４Ｂを参照し、一部の実施形態では、クライアントスタブ４４９１０、４４９１８、及びサーバスタブ４４９１２、４４９２０が、データベースライブラリ４４７１０、４４７１２のそれぞれのアプリケーションプログラミングインタフェース（ＡＰＩ）を密に反映するように構成される。マイクログラフ４４９０４、４４９０６、及び４４９０８をライブラリＡＰＩの違いから隔てるために、専用成分４４９０２内に抽象化層４４９３０を統合する。抽象化層４４９３０は、様々なデータベースにアクセスする必要があり得るマイクログラフ内の複数の異なる成分に単一のＡＰＩを提供し、その単一のＡＰＩは、それらのデータベースに関するデータベースライブラリの違いと無関係に標準のデータベース動作を実行するためのものである。一部の実施形態では、抽象化層４４９３０がマイクログラフの成分からの要求をクライアントスタブ４４９１０、４４９１８のライブラリ固有ＡＰＩに対する特定の呼出しへと変換する。一部の実施形態では、抽象化層４４９３０がマイクログラフ成分からの要求を汎用呼出しとして渡し、各クライアントスタブは、汎用呼出しからその個々のサーバスタブＡＰＩに対するライブラリ固有呼出しへの変換を行うように構成される。
【０２９０】
６  コンパイル及びパラメータ
図４５を参照し、一実施形態では、データフローグラフのコンパイル及び実行システム４５１０００が、データフローグラフコンパイラ４５１０１５、パラメータアナライザ４５１０３０、データフローグラフローダ４５１０３５、及びデータフローグラフ実行エンジン４５１０４０を含む。コンパイラ４５１０１５は、パラメータセットデータ記憶域４５１００５からのパラメータセット内のパラメータに基づき、未コンパイルデータフローグラフデータ記憶域４５１０１０からの、マイクログラフを含む未コンパイルデータフローグラフを処理する。所与のパラメータに関連する値は、データフローグラフの様々な特性の何れかを決定し得る。コンパイラ４５１０１５は、パラメータセットの値を使用してデータフローグラフをコンパイルしてコンパイル済みデータフローグラフを生成する。コンパイル済みデータフローグラフは、コンパイル済みデータフローグラフデータ記憶域４５１０２０内に記憶される。データ記憶域４５１０１０及び４５１０２０は、例えばデータ記憶システム１１０７内にホストされ得る。コンパイラ４５１０１５、パラメータアナライザ４５１０３０、及びローダ４５１０３５は、例えば実行時前モジュール１１０５の一部として実装することができる。実行エンジン４５１０４０は実行モジュール１１０６の一部として実装することができる。
【０２９１】
パラメータセットデータ記憶域４５１００５はパラメータセットを含み、各パラメータセットはデータフローグラフに関連し得る。パラメータセットは、パラメータ要素群を含む。それらの要素は、（例えば計算を行うことによって、及び一部の事例では他の参照パラメータの値を見つけることによって）評価されるときパラメータにバインドされる値に解決される、パラメータ名称及び式を含む。各未コンパイルデータフローグラフは、１つ又は複数のパラメータセットに関連し得る。一部のパラメータはコンパイルプロセスに影響し得る。例えば一部のパラメータは、特定の条件付き成分がデータフローグラフのコンパイルバージョンに含まれるかどうかに影響し得る。一部のパラメータは、コンパイル済みデータフローグラフのロード及び起動に影響し得る。例えばパラメータの値は、コンピュータ上に記憶されるファイルへのパス、又は入力データを含む若しくは出力データの対象であるデータセット成分に関連する記憶位置（例えばデータベース内のテーブルを表す記憶位置）の名称であり得る。パラメータの値は、どれ位のやり方並列、所与の成分を実行しなければならないのかを決定し得る。パラメータの値は、成分間のリンクのデータフローが、リンクされる成分を実行する異なるプロセッサ及び／又はコンピュータ間の境界を横断するかどうかを判定することができ、横断する場合、共用メモリフローではなくＴＣＰ／ＩＰフローを割り当てさせる。一部のシナリオでは、パラメータの値が他のパラメータに依存し得る。例えば、通貨換算参照ファイルの名称は日付を規定するパラメータに依存し得る。
【０２９２】
概してパラメータは、コンテキストに基づくパラメータスコーピングのための規則に従って値にバインドされる。所与のパラメータは、第１のコンテキスト内に１つの値を有し、別のコンテキスト内に別の値を有し得る。パラメータは、（例えばパラメータがコンパイルプロセスに影響し得る場合はコンパイラ４５１０１５によって）コンパイル中に、（例えばローダ４５１０３５が実行エンジン４５１０４０のためにコンパイル済みデータフローグラフのデータ構造をメモリ内にロードする場合は）ランタイム時に、データフローグラフが実行されている間（例えばファイルが読み取られ又は書き込まれる直前までファイル名称を与えるパラメータが解決されるのを遅らせる）、又は一部の事例では様々な時点の組合せにおいて値にバインドされ得る。パラメータの値は、例えばユーザインタフェース上で（例えばプロンプトに応答して）利用者によって定められ、ファイルから定められ、データ源内に含まれ、又は同じコンテキスト若しくは異なるコンテキストにおいて別のパラメータに関して定められ得る。例えば、別のパラメータとの「〜と同じ（same as）」関係を有するようにパラメータを指定することにより、パラメータは異なるコンテキストからインポートされ得る（例えば異なる成分のコンテキスト内で評価されるパラメータ）。
【０２９３】
データフローグラフに関するパラメータは、（例えばコンパイラ４５１０１５による）コンパイル中等、任意の入力データが受信される前にバインドされ得る。データフローグラフのコンパイル前又はコンパイル中にバインドされるかかるパラメータは「静的パラメータ」と呼ばれる。データフローグラフに関するパラメータは、（例えばデータフロー内の新たなデータバッチ又は最初の作業単位を受信することに応答してローダ４５１０３５によって）ランタイムの直前や、（例えばデータフロー内の新たな作業単位を扱うために新たなマイクログラフをロードすることに応答して実行エンジン４５１０４０によって）ランタイム中等、新たな入力データを受信することに応じてバインドされても良い。データフローグラフのコンパイル後にバインドされ、ランタイムにより近いかかるパラメータは「動的パラメータ」と呼ばれる。一部の事例では、動的パラメータは、データフロー内の新たなデータバッチ又は作業単位ごとに再評価する必要がない。静的パラメータは、典型的にはグラフがコンパイルされている間に評価され、コンパイル済みデータフローグラフに影響し得る。但し、例えばコンパイルがランタイムまで行われない場合、静的パラメータをランタイム時に評価することもできる。動的パラメータはランタイム時に評価され、データフローグラフを始動する全体の待ち時間に寄与し得るので、一部の実施形態では、動的パラメータの機能を制限することによって動的パラメータの評価を最適化することができる。例えば動的パラメータは、特定のデータタイプ（例えば文字列）に限定することができ、特定の式の中で参照されなくても良く、より制限されたバインディングを有する（例えば「〜と同じ（same as）」バインディングによって直接又は間接的に参照されない）ことがある。しかし他の実施形態では、動的パラメータがその機能の点で制限されなくても良く、他のパラメータと同様に利用される。
【０２９４】
コンパイラ４５１０１５が、コンパイルプロセス中に静的パラメータと動的パラメータとを区別することを可能にする様々なやり方がある。１つの技法は、パラメータセット内の動的パラメータにフラグ又は専用構文を使用し、動的パラメータをバインドしないままにしておくべきことをコンパイラに知らせる。別の技法は、パラメータセットの静的パラメータ及び動的パラメータを様々な部分集合に分け、静的パラメータの部分集合だけをコンパイラ４５１０１５に与える。動的パラメータの部分集合はランタイム時にローダ４５１０３５に与える。コンパイラ４５１０１５は動的パラメータを解決された値にバインドしないが、コンパイラ４５１０１５は、コンパイル中に（例えば不当な構文や他の誤りに関して）動的パラメータを確認するように依然として構成することができる。所与の式は、静的パラメータ参照及び動的パラメータ参照の両方を含み得る。例えば、静的なディレクトリ名称パラメータはコンパイラ４５１０１５によって解決することができるが、動的なファイル名称パラメータは未解決のままにしておくことができ、コンパイラ４５１０１５は未解決の動的パラメータ参照を、動的パラメータとしてかかるパラメータ参照が認識されるので、コンパイルプロセスの間保つことができる。
【０２９５】
一部のシナリオでは、パラメータの存在又は値がデータフローグラフ内の成分のトポロジ及び／又は接続性に影響し得る。パラメータは、１つ又は複数の成分によって実行される操作をグラフの特定の実行中に実行すべきではないことを示し得る。このことは、２つの異なるデータ源に対して同じデータフローグラフが使用される場合に特に該当し得る。例えば、或るデータ源は第１のフォーマット（例えばＵＴＦ−８）とすることができ、別の情報源は少なくとも一部の文字に異なる符号化を使用する第２のフォーマットのテキストを含み得る。両方のデータ源を処理するデータフローグラフは、第２のフォーマットのテキストをＵＴＦ−８フォーマットに変換する必要があり得る。しかし、ＵＴＦ−８データ源にアクセスするとき変換は必要ない。データが既にＵＴＦ−８フォーマットにあること、及び変換成分をバイパスできることをデータフローグラフに知らせるためにパラメータを使用することができる。一部の構成では、パラメータ値に基づいて条件付き成分を除外することは、コンパイル済みデータフローグラフ内で条件付き成分が削除され、データフローで置換されることをもたらし得る。条件付き成分についての更なる説明は、参照により本明細書に援用する米国特許第７，１６４，４２２号の中で見つけることができる。
【０２９６】
図４５を再び参照し、コンパイラ４５１０１５は、未コンパイルデータフローグラフデータ記憶域４５１０１０から未コンパイルデータフローグラフを得る。コンパイラ４５１０１５は、データフローグラフをコンパイルするために使用するパラメータセットをパラメータセットデータ記憶域４５１００５から得る。一部の事例では、複数の異なるパラメータセットを所与のデータフローグラフに使用することができ、パラメータセットごとに、グラフコンパイラ４５１０１５は未コンパイルデータフローグラフの対応するバージョンをコンパイルすることができる。データフローグラフの各コンパイルバージョンは、パラメータセット内のパラメータの値に基づき、一部の成分又は他の実行可能ステートメントを含み又は除外することができる。コンパイル済みデータフローグラフは、例えばコンパイル済みデータフローグラフがシリアル化されるとき、コンパイル済みデータフローグラフを生成するために使用されたパラメータセットからのバインドされたパラメータ値に関連付けられる。コンパイル済みデータフローグラフは、幾つかの異なるメカニズムの何れか（例えば参照用テーブル、データベース内の基本キーに対する外部キーの関係等）を使用し、関連するパラメータセットからのパラメータ値に関連付けられる。コンパイル済みデータフローグラフデータ記憶域４５１０２０は、例えば読書き操作が可能な任意のファイルシステム又はデータベースを使用して実装することができる。
【０２９７】
データフローグラフの実行中（「ランタイム」時）、入力データ源４５１０２５からデータがシステムに入る。入力データ源４５１０２５は多岐にわたる個々のデータ源を含むことができ、そのそれぞれは固有の記憶フォーマット及びインタフェース（例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット）を有し得る。個々のデータ源はシステム４５１０００にとってローカルとすることができ、例えば同じコンピュータシステム（例えばファイル）上にホストされ、又はシステム４５１０００にとって遠隔的とすることができ、例えばローカルエリアデータネットワークや広域データネットワーク上でアクセスされる遠隔コンピュータ上にホストされる。
【０２９８】
パラメータアナライザ４５１０３０及びローダ４５１０３５は、記憶されたコンパイル済みデータフローグラフからデータフローグラフを素早くロードすることを可能にし、受信される入力データに応答してデータフローグラフの様々なコンパイル済みバージョンの中から選択を行うことにより、ランタイム時の柔軟性を依然として与えながら潜在的に長いコンパイルプロセスを防ぐ。パラメータアナライザ４５１０３０は、入力データ源４５１０２５から入力データを受信することに応答し、入力データ及びことによるとランタイムまで分からない可能性がある他の値を分析して、対象データフローグラフと共に使用される１つ又は複数のパラメータ（静的パラメータ及び動的パラメータの両方を潜在的に含む）のための値を決定する。対象データフローグラフは、様々な個々のパラメータセットを使用してコンパイル済みデータフローグラフデータ記憶域４５１０２０内に記憶される様々なバージョンにコンパイルされている未コンパイルデータフローグラフである。ローダ４５１０３５は、パラメータアナライザ４５１０３０によって与えられる静的パラメータの任意の値を、対象データフローグラフのコンパイル済みバージョンの何れかを生成するために使用されている可能性があるそれらの同じパラメータの任意の値と比較して一致を見つける。ローダ４５１０３５が静的パラメータ内の一致を見つける場合、ローダ４５１０３５は動的パラメータを解決してバインドし、実行エンジン４５１０４０によって起動されるようにその結果生じるデータフローグラフをロードすることができる。ローダ４５１０３５が静的パラメータ内の一致を見つけない場合、ローダ４５１０３５は入力データを誤りプロセッサ（不図示）にルーティングすることができ、又は最適化されていないデフォルトとしてあり得る様々なパラメータ値を扱うことができる入手可能な対象データフローグラフのバージョンを有することができる。或いは、ローダはコンパイラ４５１０１５を始動して、適切な静的パラメータ値と共に対象データフローグラフの新たなバージョンをコンパイルすることができる。これらの事例では、コンパイルは必要に応じてその場で行うことができる。対象データフローグラフが最初に実行されるとき、コンパイルがランタイム時に行われ、その結果生じるバインドされた静的パラメータを有するコンパイル済みデータフローグラフが保存される。次に対象データフローグラフが実行されるとき、所望の静的パラメータ値を有するコンパイル済みバージョンが見つからない場合にのみ再コンパイルされる。
【０２９９】
例えば、パラメータＡ、Ｂ、Ｃ（ＡとＢは静的でありＣは動的である）を含むパラメータセットについて、Ａ＝真及びＢ＝偽を使用してコンパイルされている対象データフローグラフの第１のコンパイル済みバージョンと、Ａ＝真及びＢ＝真を使用してコンパイルされている同じ対象データフローグラフの第２のコンパイル済みバージョンとを検討されたい。Ａ＝真、Ｂ＝真、及びＣ＝真を有する対象データフローグラフを使用して受信される作業単位を処理すべきだとパラメータアナライザ４５１０３０が判定する場合、第２のコンパイル済みバージョンをロードすることができ、動的パラメータＣがローダ４５１０３５によってバインドされる。Ａ＝偽、Ｂ＝真、及びＣ＝真を有する対象データフローグラフを使用して受信される作業単位を処理すべきだとパラメータアナライザ４５１０３０が判定する場合、Ａ＝偽、Ｂ＝真の状態で対象データフローグラフの新たなバージョンがコンパイラ４５１０１５によってコンパイルされ、動的パラメータＣがローダ４５１０３５によってバインドされる。新たにコンパイルされるバージョンも、後で使用するためにコンパイル済みデータフローグラフデータ記憶域４５１０２０内に記憶することができる。
【０３００】
ローダ４５１０３５は、入力データ源４５１０２５からの入力データフローを処理するために実行されるグラフ実行エンジン４５１０４０にとってアクセス可能なメモリ内に、選択されたコンパイル済みデータフローグラフをロードする。一部の実施形態では、ローダ４５１０３５の機能が実行データフローグラフ内の専用成分によって行われ、ロードされるデータフローグラフは専用成分内に埋め込まれるマイクログラフである。ローダ４５１０３５は、コンパイル済みデータフローグラフデータ記憶域４５１０２０に必ずしもアクセスする必要なしに、（適切な静的パラメータ値が使用されたと判定した後）、メモリ内にキャッシュされたままである選択されたコンパイル済みデータフローグラフの過去にロードされたバージョンにアクセスすることができる。次いで、ロードされたデータフローグラフが実行エンジン４５１０４０によって実行される。対象データフローグラフによって入力データが処理されると、データフローグラフをシステムからアンロードすることができ、又は後でアクセスするためにキャッシュに入れることができる。
【０３０１】
概して、データフローグラフのコンパイルは、それによりグラフを実行可能なフォーマットに変換するプロセスである。実行可能なフォーマットは、プラットフォーム固有の形式（例えば機械コード）又は中間形式（例えばバイトコード）とすることができる。一部の実施形態では、コンパイラ４５１０１５が静的パラメータを解決し、データフローグラフを詳細に調べ、それを実行される準備が整った１組のデータ構造へと減らす。頂点及びリンクとして表されるデータフローグラフから機械コードへの変換は幾つかのステップを含み得る。それらのステップの１つは、データフローグラフが第３世代プログラミング言語（例えばＣ、Ｃ＃、Ｃ＋＋、Java等）に変換される動的コード生成を含み得る。標準のコンパイラを使用し、第３世代言語から機械可読コード又はバイトコードが生成され得る。
【０３０２】
一部の実施形態では、パラメータを静的パラメータとして扱うか動的パラメータとして扱うかがコンパイルまで決定されない。評価され、その値が静的パラメータとして扱われるコンパイル済みデータフローグラフエリア内にハードコードされるパラメータ。それに対し、動的パラメータは概してコンパイル時に評価されないが、グラフのロード中又は実行中に評価される。上記のように、ランタイム時の高速ローディング及び実行のためのデータフローグラフの様々なコンパイル済みバージョンを準備するために、パラメータセットによって決定される値が使用される。パラメータセットからのパラメータの値がコンパイル済みグラフに有効な唯一の値を明確に定義する場合、その値がコンパイル済みデータフローグラフ内にコード化され、パラメータは静的パラメータとして扱われる。パラメータセットからのパラメータの値があり得る値域を与える他の事例では、パラメータはコンパイル時に静的パラメータとして評価されない可能性があるが、代わりにロード時に又はランタイム時に動的パラメータとして評価され得る。
【０３０３】
更にコンパイルプロセス中、コンパイラは、例えば不要な実行可能ステートメントを除去することによってデータフローグラフを最適化することができる。例えば、データフローグラフは条件付き成分を含み得る。条件付き成分は、更に多くのパラメータの１つの値に基づいてコンパイル済みデータフローグラフ内に含まれる、又はコンパイル済みデータフローグラフから除外される一連の実行可能ステートメントを含み得る。グラフの最適化や専用化等、条件付き成分は様々な目的で使用することができる。グラフの最適化のために、アプリケーションは、データセットからの値を使用しない場合、そのデータセットの処理又は作成を省略し、それによりグラフをより効率的に実行することを可能にし得る。グラフの専用化では、アプリケーションは所望の詳細レベルに基づいて幾つかの異なる出力データセットを作る条件を付けることができ、又はグラフの幾つかの任意選択的な部分の１つを実行可能にし得る。
【０３０４】
上記の技法はコンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えばソフトウェアは、（分散、クライアント／サーバ、グリッド等の様々なアーキテクチャのものとすることができる）１つ又は複数のプログラムされた又はプログラマブルコンピュータシステム上で実行される１つ又は複数のコンピュータプログラムによって手続きを形成し、かかるコンピュータシステムは、少なくとも１個のプロセッサ、少なくとも１つのデータ記憶システム（揮発性及び不揮発性のメモリ及び／又は記憶素子を含む）、少なくとも１つの入力装置又はポート、及び少なくとも１つの出力装置又はポートをそれぞれ含む。ソフトウェアは、例えばデータフローグラフの設計及び構成に関係する他のサービスを提供するより大きいプログラムの１つ又は複数のモジュールを形成し得る。グラフのノード又は成分及び要素は、コンピュータ可読媒体内に記憶されるデータ構造又はデータリポジトリ内に記憶されるデータモデルに準拠する他の編成済みデータとして実装することができる。
【０３０５】
ソフトウェアは、汎用又は専用のプログラマブルコンピュータによって読取可能なＣＤ−ＲＯＭ等の記憶媒体及び／又はハードウェア記憶装置上に与えることができ、又はその実行場所であるコンピュータの記憶媒体にネットワークの通信媒体上で送られ（伝搬信号内に符号化され）得る。機能の全てが専用コンピュータ上で、又はコプロセッサ等の専用ハードウェアを使用して実行され得る。ソフトウェアは、ソフトウェアによって規定される計算の様々な部分が異なるコンピュータによって実行される分散式に実装することができる。本明細書に記載の手続きを実行するために記憶媒体又は装置がコンピュータシステムによって読み取られるときコンピュータを構成し動作させるために、かかる各コンピュータプログラムは、好ましくは汎用の又は専用のプログラマブルコンピュータによって読取可能な記憶媒体又は装置（例えば固体メモリや媒体、磁気媒体、又は光学媒体）上に記憶され、又はダウンロードされる。本発明のシステムは、コンピュータプログラムで構成されるコンピュータ可読記憶媒体として実装されるとも考えられ、そのように構成される記憶媒体は、本明細書に記載の機能を実行するようにコンピュータシステムを特定の且つ既定のやり方で動作させる。
【０３０６】
本発明の幾つかの実施形態を説明してきた。それでもなお、本発明の趣旨及び範囲から逸脱することなしに様々な修正を加えることができることが理解されよう。例えば、上記のステップの一部は異なる順序で実行することができ、従って記載したのと異なる順序で実行することができる。
【０３０７】
上記の説明は、添付の特許請求の範囲によって定められる本発明の範囲を限定するのではなく例示することを意図することを理解すべきである。例えば、上記の幾つかの機能ステップは、全体の処理に実質的に影響を与えることなしに異なる順序で実行することができる。他の実施形態も添付の特許請求の範囲に含まれる。
【図１】
2018528506.tif 000013
【図２】
2018528506.tif 000014
【図３】
2018528506.tif 000015
【図４】
2018528506.tif 000016
【図５Ａ】
2018528506.tif 000017
【図５Ｂ】
2018528506.tif 000018
【図６】
2018528506.tif 000019
【図７】
2018528506.tif 000020
【図８】
2018528506.tif 000021
【図９】
2018528506.tif 000022
【図１０Ａ】
2018528506.tif 000023
【図１０Ｂ】
2018528506.tif 000024
【図１１】
2018528506.tif 000025
【図１２】
2018528506.tif 000026
【図１３】
2018528506.tif 000027
【図１４】
2018528506.tif 000028
【図１５】
2018528506.tif 000029
【図１６】
2018528506.tif 000030
【図１７】
2018528506.tif 000031
【図１８Ａ】
2018528506.tif 000032
【図１８Ｂ】
2018528506.tif 000033
【図１８Ｃ】
2018528506.tif 000034
【図１９】
2018528506.tif 000035
【図２０】
2018528506.tif 000036
【図２１】
2018528506.tif 000037
【図２２】
2018528506.tif 000038
【図２３】
2018528506.tif 000039
【図２４】
2018528506.tif 000040
【図２５】
2018528506.tif 000041
【図２６Ａ】
2018528506.tif 000042
【図２６Ｂ】
2018528506.tif 000043
【図２７】
2018528506.tif 000044
【図２８】
2018528506.tif 000045
【図２９】
2018528506.tif 000046
【図３０】
2018528506.tif 000047
【図３１】
2018528506.tif 000048
【図３２Ａ】
2018528506.tif 000049
【図３２Ｂ】
2018528506.tif 000050
【図３３】
2018528506.tif 000051
【図３４Ａ】
2018528506.tif 000052
【図３４Ｂ】
2018528506.tif 000053
【図３４Ｃ】
2018528506.tif 000054
【図３５】
2018528506.tif 000055
【図３６】
2018528506.tif 000056
【図３７】
2018528506.tif 000057
【図３８Ａ】
2018528506.tif 000058
【図３８Ｂ】
2018528506.tif 000059
【図３９】
2018528506.tif 000060
【図４０Ａ】
2018528506.tif 000061
【図４０Ｂ】
2018528506.tif 000062
【図４１】
2018528506.tif 000063
【図４２】
2018528506.tif 000064
【図４３】
2018528506.tif 000065
【図４４Ａ】
2018528506.tif 000066
【図４４Ｂ】
2018528506.tif 000067
【図４５】
2018528506.tif 000068
【国際調査報告】
2018528506.tif 000069
2018528506.tif 000070
2018528506.tif 000071
2018528506.tif 000072