(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-02-14
(45)【発行日】2022-02-22
(54)【発明の名称】リアルタイムデータストリームに対して実行するためのクエリの選択
(51)【国際特許分類】
G06F 16/9032 20190101AFI20220215BHJP
【FI】
G06F16/9032
(21)【出願番号】P 2017567783
(86)(22)【出願日】2016-08-04
(86)【国際出願番号】 US2016045612
(87)【国際公開番号】W WO2017024164
(87)【国際公開日】2017-02-09
【審査請求日】2019-06-03
(32)【優先日】2015-08-05
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ガドディア,ラジェシュ
(72)【発明者】
【氏名】ホーリー,ジョセフ スケフィントン
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】特開2014-157510(JP,A)
【文献】国際公開第2014/011708(WO,A1)
【文献】特表2013-528884(JP,A)
【文献】特表2013-513864(JP,A)
【文献】米国特許出願公開第2015/0169332(US,A1)
【文献】特開2010-108073(JP,A)
【文献】国際公開第2014/041673(WO,A1)
【文献】勝沼 聡、外5名,車載組込みシステム向けデータストリーム管理システムの開発,電子情報通信学会論文誌,日本,一般社団法人電子情報通信学会,2012年12月01日,第J95-D巻,第12号,p.2031-2047
【文献】勝沼 聡、外3名,車載組込みシステム向けデータストリーム管理の静的スケジューリング方式,情報処理学会論文誌 論文誌トランザクション 2012(平成24)年度(1) [CD-ROM],日本,一般社団法人情報処理学会,2012年10月15日,第5巻,第3号,p.36-50
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するためのコンピュータによって実装される方法であって、
前記データストリーム内の様々な場所に位置する前記データ項目の2つ以上に対する前記クエリを1つ又は複数のコンピュータシステムによって時々実行することであって、前記クエリが或る期間中に前記データストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知であり、
前記クエリがアクティブである間、前記期間中に前記データストリームから規定の時間間隔で前記データ項目が受信される毎に、前記クエリが実行される、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を1つ又は複数のクライアント装置に伝送すること
を含む、コンピュータによって実装される方法。
【請求項2】
その後の時点において、前記中間結果を前記その後の時点における前記クエリの実行結果と集約して最終結果を生成すること
を更に含む、請求項1に記載のコンピュータによって実装される方法。
【請求項3】
前記最終結果を記憶し、前記中間結果を破棄すること
を更に含む、請求項2に記載のコンピュータによって実装される方法。
【請求項4】
前記クエリを時々実行することが、
(i)前記データストリーム内の1つ又は複数の第1のデータ項目であって、前記データストリームの第1の部分に位置する、1つ又は複数の第1のデータ項目と、(ii)前記データストリーム内の1つ又は複数の第2のデータ項目であって、前記データストリームの第2の部分に位置する、1つ又は複数の第2のデータ項目とに前記クエリを実行すること
を含む、請求項1乃至3の何れか一項に記載のコンピュータによって実装される方法。
【請求項5】
前記クエリを実行することが、
前記クエリを表すデータフローグラフを周期的に実行することを含み、前記データフローグラフは前記クエリを実装するための実行可能コンピュータコードを含み、前記クエリに関するクエリ仕様を入力として受信する、請求項1乃至4の何れか一項に記載のコンピュータによって実装される方法。
【請求項6】
前記データフローグラフが第1のクエリを実行する際に行われる操作を表す成分を含み、前記方法が
或る成分に関して、
前記成分のローカル状態を保存するチェックポイント操作を実行して前記データフローグラフの状態の回復性を有効にすること
を更に含む、請求項5に記載のコンピュータによって実装される方法。
【請求項7】
前記クエリが実行される前記データストリーム内のデータ項目の量は前記クエリの実行開始時には未知である、請求項1乃至6の何れか一項に記載のコンピュータによって実装される方法。
【請求項8】
集約済みの結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスすること、
前記集約済みの結果に対して前記ユーザ定義カスタム操作を実行すること、及び
前記ユーザ定義カスタム操作に従って前記集約済みの結果を変換すること
を更に含む、請求項7に記載のコンピュータによって実装される方法。
【請求項9】
既定条件の検出を利用者に知らせるためのほぼリアルタイムの警告を前記集約済みの結果に基づいて生成すること
を更に含む、請求項8に記載のコンピュータによって実装される方法。
【請求項10】
前記データストリームは、データ項目が(i)様々な時点において周期的に受信される、又は(ii)様々な時点において継続的に受信されるデータストリームを含む、請求項1乃至9の何れか一項に記載のコンピュータによって実装される方法。
【請求項11】
前記データストリームをデータ待ち行列、データリポジトリ、又はデータフィードから受信することを更に含む、請求項1乃至10の何れか一項に記載のコンピュータによって実装される方法。
【請求項12】
前記クエリが第1のクエリであり、前記方法が
前記データストリーム内の様々な位置に登場する前記データ項目の2つ以上に対して実行するための第2のクエリを選択すること、及び
前記データストリームの前記データ項目に対して前記第1のクエリ及び前記第2のクエリをほぼリアルタイムで実行すること
を更に含む、請求項1乃至11の何れか一項に記載のコンピュータによって実装される方法。
【請求項13】
表示装置上でレンダリングされるとき、
前記データストリームに対して実行されるクエリを定める情報を入力するための入力フィールド
を含むユーザインタフェース用の情報を生成すること
を更に含む、請求項1乃至12の何れか一項に記載のコンピュータによって実装される方法。
【請求項14】
前記データストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスすること
を更に含む、請求項1乃至13の何れか一項に記載のコンピュータによって実装される方法。
【請求項15】
前記データストリームのデータがほぼリアルタイムのデータであり、前記中間結果がほぼリアルタイムの中間結果であり、前記2つ以上のデータ項目が前記2つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる、請求項1乃至
14の何れか一項に記載のコンピュータによって実装される方法。
【請求項16】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するためのシステムであって、
1つ又は複数の処理装置と、
前記データストリーム内の様々な場所に位置する前記データ項目の2つ以上に対する前記クエリを1つ又は複数のコンピュータシステムによって時々実行することであって、前記クエリが或る期間中に前記データストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知であり、
前記クエリがアクティブである間、前記期間中に前記データストリームから規定の時間間隔で前記データ項目が受信される毎に、前記クエリが実行される、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
ほぼリアルタイムの前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を1つ又は複数のクライアント装置に伝送すること
を含む操作を実行するために前記1つ又は複数の処理装置によって実行可能な命令を記憶する1つ又は複数の機械可読ハードウェア記憶装置と
を含む、システム。
【請求項17】
前記操作が、
その後の時点において、前記中間結果を前記その後の時点における前記クエリの実行結果と集約して最終結果を生成すること
を更に含む、請求項16に記載のシステム。
【請求項18】
前記操作が、
前記最終結果を記憶し、前記中間結果を破棄すること
を更に含む、請求項17に記載のシステム。
【請求項19】
前記クエリを時々実行することが、
(i)前記データストリーム内の1つ又は複数の第1のデータ項目であって、前記データストリームの第1の部分に位置する、1つ又は複数の第1のデータ項目と、(ii)前記データストリーム内の1つ又は複数の第2のデータ項目であって、前記データストリームの第2の部分に位置する、1つ又は複数の第2のデータ項目とに前記クエリを実行すること
を含む、請求項16乃至18の何れか一項に記載のシステム。
【請求項20】
データ記憶域を更に含み、
前記クエリを実行することが、
前記クエリに関連するグラフベースの計算を実装するデータフローグラフを実行することを含み、前記グラフベースの計算は前記クエリを実装するための実行可能コンピュータコードを含み、
前記データフローグラフは前記データ記憶域内のデータ構造によって規定され、前記データ構造によって規定され且つ1つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、前記リンクは前記データ構造によって規定され、前記グラフ成分間のデータフローを表し、
前記データフローグラフは前記クエリに関するクエリ仕様を入力として受信し、前記グラフベースの計算は、1つ又は複数の入力データセットから前記グラフ成分の前記データフローグラフを介して1つ又は複数の出力データセットに流れる前記データストリームに対して実行される、
請求項16乃至19の何れか一項に記載のシステム。
【請求項21】
前記データ記憶域に結合され、前記1つ又は複数の処理装置上にホストされるランタイム環境であって、前記データフローグラフを規定する前記データ記憶域内のデータ構造を読み取り、実行時前モジュールによって前記データフローグラフに指定される前記グラフ成分の前記計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び
前記指定された計算の実行をスケジュールし管理するための実行モジュールを含む、ランタイム環境
を更に含む、請求項20に記載のシステム。
【請求項22】
前記データフローグラフが第1のクエリを実行する際に行われる操作を表す成分を含み、前記操作が
或る成分に関して、
前記成分のローカル状態を保存するチェックポイント操作を実行して前記データフローグラフの状態の回復性を有効にすること
を更に含む、請求項20又は21に記載のシステム。
【請求項23】
前記クエリが実行される前記データストリーム内のデータ項目の量は前記クエリの実行開始時には未知である、請求項16乃至22の何れか一項に記載のシステム。
【請求項24】
前記データストリームのデータがほぼリアルタイムのデータであり、前記中間結果がほぼリアルタイムの中間結果であり、前記2つ以上のデータ項目が前記2つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる、請求項16乃至23の何れか一項に記載のシステム。
【請求項25】
クエリが実行されているとき、前記クエリの中間結果を与えるためにデータストリーム内の様々な場所に位置するデータ項目に対して前記クエリを実行するための1つ又は複数の機械可読ハードウェア記憶域であって、
前記データストリーム内の様々な場所に位置する前記データ項目の2つ以上に対する前記クエリを1つ又は複数のコンピュータシステムによって時々実行することであって、前記クエリが或る期間中に前記データストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知であり、
前記クエリがアクティブである間、前記期間中に前記データストリームから規定の時間間隔で前記データ項目が受信される毎に、前記クエリが実行される、
前記クエリの実行結果を示す情報を生成すること、
前記クエリが実行され続けるとき、
前記データストリーム内で前に登場したデータ項目に対して前記クエリを実行した過去の結果と前記結果を集約することによってクエリ実行の中間結果を生成すること、及び
前記クエリの実行が完了する前にクエリ実行の前記中間結果を1つ又は複数のクライアント装置に伝送すること
を含む操作を実行するために1つ又は複数の処理装置によって実行可能な命令を記憶する、1つ又は複数の機械可読ハードウェア記憶域。
【請求項26】
データ記憶域と、
前記データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、前記グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、1つ又は複数の入力データセットからグラフ成分のグラフを介して1つ又は複数の出力データセットに流れるデータに対して実行され、前記データフローグラフは前記データ記憶域内のデータ構造によって規定され、前記データ構造によって規定され且つ1つ又は複数のリンクによって接続される前記グラフ成分を表す複数の頂点を有し、前記リンクは前記データ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、
前記グラフベースの計算を実行するために1台又は複数台のコンピュータ上にホストされ、前記データ記憶域に結合されるランタイム環境であって、
前記データフローグラフを規定する前記データ記憶域内のデータ構造を読み取り、実行時前モジュールによって前記データフローグラフに指定される前記グラフ成分の前記計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び
前記指定された計算の実行をスケジュールし管理するための実行モジュールであって、それにより
正規化成分が前記ファイルを複数の作業単位に分けるように構成され、
分割成分が前記作業単位のそれぞれに適用されるように構成され、前記作業単位のそれぞれに前記分割成分を前記適用することは、前記作業単位のそれぞれについてマイクログラフ実行成分の複数の異なるインスタンスにわたって前記複数のクエリを分割することを含み、前記インスタンスのそれぞれは前記作業単位内の前記データに対して実行可能な前記クエリの1つに対応し、
前記マイクログラフ実行成分の前記インスタンスの前記対応するそれぞれのインスタンスによって前記クエリのそれぞれを前記データに対して実行するために、再フォーマット成分が前記作業単位のそれぞれの中の前記データを再フォーマットするように構成され、
前記作業単位のそれぞれについて前記マイクログラフ実行成分の前記インスタンスを実行した後、収集成分が前記作業単位に関する部分結果を生成するように構成され、前記部分結果は前記作業単位内の前記データに対して前記クエリの一部又は全てを実行した結果を含み、
マイクログラフ実行成分が、前記複数のクエリのそれぞれについて、前記部分結果に基づき前記ファイルの全ての前記作業単位に対する前記クエリの総和を計算するように構成される、実行モジュール
を含む、ランタイム環境と
を含み、
前記クエリが或る期間中にデータストリーム内に登場するデータ項目に対して実行され、前記期間の終わりは前記クエリの実行開始時には未知であ
り、前記クエリがアクティブである間、前記期間中に前記データストリームから規定の時間間隔で前記データ項目が受信される毎に、前記クエリが実行される、システム。
【請求項27】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
再フォーマット成分の複数の異なるインスタンス及び前記マイクログラフ実行成分の前記複数の異なるインスタンスを前記作業単位のそれぞれについて生成することを更に含み、前記再フォーマット成分の前記インスタンスのそれぞれは前記マイクログラフ実行成分の前記インスタンスの1つにリンクされ関連し、前記マイクログラフ実行成分の前記関連するインスタンスにおいて前記データが処理される前に、前記作業単位内の前記データを再フォーマットするように構成される、請求項26に記載のシステム。
【請求項28】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
前記作業単位内の前記データの属性を決定することを含む前記作業単位を前処理すること、及び
前記決定した属性に基づいて前記インスタンス及び対応するクエリを選択すること
を更に含む、請求項26又は27に記載のシステム。
【請求項29】
前記作業単位のそれぞれに前記分割成分を前記適用することが、
前記インスタンスを前記作業単位に前記割り当てる前に前処理を行うことを更に含み、前記前処理は、前記それぞれのインスタンスに対応する前記クエリのそれぞれを前記実行するのに必要である可能性が高い前記計算資源を明らかにすること、及び前記クエリのそれぞれを実行するための前記明らかにされた計算資源の需要に従って前記インスタンス間で計算資源を分散させることを含む、
請求項26乃至28の何れか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本願は、データストリーム、とりわけリアルタイムデータストリームに対して実行するためのクエリを選択するためのコンピュータシステム、方法、及び機械可読ハードウェア記憶域に関する。とりわけ実装形態は、データ源の分散ネットワークから生じ得るデータストリームに対して実行される複数のアクティブクエリを実装するデータフローグラフベースの計算に関する。
【背景技術】
【0002】
背景
多くのネットワーク化されたデータ処理システムは意思決定のために重要情報への適時のアクセスを必要とする。かかる要件を満たすための従来の手法は、データウェアハウス、データマート、及びレポーティングアプリケーションを構築することである。これらの手法は、パターン又は条件を検索しながら連続して到着するデータストリームをモニタすることができないので、不正検出、サービスモニタリング、ゲーム、リアルタイムトレンディング等、真にリアルタイムのアプリケーションのための厳格なサービスレベル合意書(SLA)の要件を満たすことができなかった。
【0003】
加えて、データベース及び構造化照会言語(SQL)はデータの到着を待つための構成体を有さない。SQLは、クエリが始動されるとき、リポジトリ内にある履歴データに作用する。データウェアハウス内に記憶される履歴データのこの処理は多くの待ち時間要件を満たせないことが多々あり、その理由はデータウェアハウス内のデータを集め、クレンジングし、統合する(ETL-抽出・変換・ロードとして一般に知られている)のに時間がかかるからであり、且つウェアハウスに入ったデータを処理するためのクエリを開始するのにも時間がかかるからである。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
一実装形態では、クエリが実行されているとき、クエリの(例えばほぼリアルタイムの)中間結果を与えるために(例えばほぼリアルタイムの)データストリーム内の様々な場所に位置するデータ項目に対してクエリを実行するためのコンピュータによって実装される方法が、任意選択的に2つ以上のデータ項目が2つ以上のデータ項目のそれぞれに対してほぼリアルタイムでアクセスされる状態で、ストリーム内の様々な場所に位置するデータ項目の2つ以上に対するクエリを1つ又は複数のコンピュータシステムによって時々(例えば周期的に)実行すること、クエリの実行結果を示す情報を生成すること、クエリが実行され続けるとき、(例えばほぼリアルタイムの)データストリーム内で前に登場したデータ項目に対してクエリを実行した過去の結果とその結果を集約することによってクエリ実行の中間結果を生成すること、及びクエリの実行が完了する前にクエリ実行の中間結果を1つ又は複数のクライアント装置に伝送することを含む。動作中にシステムに特定の操作又は動作を実行させるソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せをシステム上にインストールすることにより、それらの動作を実行するように1台又は複数台のコンピュータのシステムを構成することができる。データ処理機器によって実行されるとき機器に特定の操作又は動作を実行させる命令を含めることにより、それらの動作を実行するように1つ又は複数のコンピュータプログラムを構成することができる。
【0005】
動作は、その後の時点において、中間結果をその後の時点におけるクエリの実行結果と集約して最終結果を生成することを含む。動作は、最終結果を記憶し、中間結果を破棄することも含む。クエリを時々実行することは、(i)(例えばほぼリアルタイムの)データストリーム内の1つ又は複数の第1のデータ項目であって、ストリームの第1の部分に位置する、1つ又は複数の第1のデータ項目と、(ii)(例えばほぼリアルタイムの)データストリーム内の1つ又は複数の第2のデータ項目であって、ストリームの第2の部分に位置する、1つ又は複数の第2のデータ項目とにクエリを実行することを含む。クエリを実行することは、クエリを表すデータフローグラフを周期的に実行することを含み、データフローグラフはクエリを実装するための実行可能コンピュータコードを含み、クエリに関するクエリ仕様を入力として受信する。データフローグラフは、第1のクエリを実行する際に行われる操作を表す成分を含み、この方法は、或る成分に関して、その成分のローカル状態を保存するチェックポイント操作を実行してデータフローグラフの状態の回復性を有効にすることを更に含む。クエリは、或る期間中にほぼリアルタイムのデータストリーム内に登場するデータ項目に対して実行され、その期間の終わりはクエリの実行開始時には未知である。クエリが実行されるストリーム内のデータ項目の量はクエリの実行開始時には未知である。
【0006】
動作は、集約済みの結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスすること、集約済みの結果に対してユーザ定義カスタム操作を実行すること、及びユーザ定義カスタム操作に従って集約済みの結果を変換することを含む。動作は、既定条件の検出を利用者に知らせるためのほぼリアルタイムの警告を集約済みの結果に基づいて生成することを含む。ほぼリアルタイムのデータストリームは、データ項目が(i)様々な時点において周期的に受信される、又は(ii)様々な時点において継続的に受信されるデータストリームを含む。動作は、ほぼリアルタイムのデータストリームをデータ待ち行列、データリポジトリ、又はデータフィードから受信することを含む。クエリは第1のクエリであり、この方法は、ストリーム内の様々な位置に登場するデータ項目の2つ以上に対して実行するための第2のクエリを選択すること、及びストリームのデータ項目に対して第1のクエリ及び第2のクエリを(例えばほぼリアルタイムで)実行することを更に含む。動作は、表示装置上でレンダリングされるとき、ほぼリアルタイムのデータストリームに対して実行されるクエリを定義する情報を入力するための入力フィールドを含む、ユーザインタフェースのための情報を生成することを含む。動作は、ほぼリアルタイムのデータストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスすることを含む。
【0007】
上記の内容の全て又は一部は、ハードドライブ、ダイナミックランダムアクセスメモリ等のランダムアクセスメモリ記憶装置、機械可読ハードウェア記憶装置、及び他の種類の非一時的機械可読記憶装置である、1つ若しくは複数の非一時的機械可読記憶媒体及び/又は1つ若しくは複数のコンピュータ可読ハードウェア記憶装置上に記憶され、1つ又は複数の処理装置上で実行可能な命令を含むコンピュータプログラム製品として実装することができる。上記の内容の全て又は一部は、1つ又は複数の処理装置及び述べた機能を実装するための実行可能命令を記憶するためのメモリを含み得る機器、方法、又は電子システムとして実装することができる。
【0008】
大規模なコンピュータネットワークはネットワーク内に分散する様々な情報源(例えば世界中に分散するデータ源)から大量のデータを潜在的に集めることができるが、かかるネットワークは、とりわけデータが継続的に到着するデータストリームを含む場合、集めたデータを抽出し、変換し、ロードする課題に関して言えば待ち時間に悩まされる。かかる分散ネットワークは、ロジスティックネットワーク(例えば空港、鉄道の駅、港、又は他のロジスティックセンタ)、セキュリティ関連ネットワーク(例えばクレジットカード情報の処理、バンキング、又は他の認証システム)、又は産業プロセスを実行する機械のネットワークであり得る。本明細書に記載する実施形態は、データに対して実行される計算の信頼性及び/又は安全性も維持しながら、大量のデータを非常に高速に(例えばリアルタイム/ほぼリアルタイムで)処理することを可能にする。これらの実施形態の脈絡で記載する手法は、データ量、データの発生元である基礎を成すネットワークの大きさ、及びデータストリームに対して実行されるアクティブクエリの量/多様性に関して柔軟なやり方で拡張可能である。
【0009】
1つ又は複数の実施形態の詳細を添付図面及び以下の説明に記載する。本明細書に記載の技法の他の特徴、目的、及び利点がこの説明、図面、及び添付の特許請求の範囲から明らかになる。
【0010】
様々な図面内の同様の参照記号は同様の要素を示す。
【図面の簡単な説明】
【0011】
【
図2】データ処理の結果を集約することの概念図である。
【
図5B】データ処理の結果を集約することの概念図である。
【
図8】データ処理の結果を集約することの概念図である。
【
図9】複数のクエリのダイナミック実行の図である。
【
図10A】主要素の相互関係を示す本発明の一実施形態のブロック図である。
【
図10B】データフローグラフのブロック図である。
【
図11】指定のランタイムパラメータを有する、ロールアップ成分及びソート成分2004を有する典型的なグラフのブロック図である。
【
図12】グラフに関連付けられるランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【
図13】ランタイムパラメータを使用するプロセスを要約する流れ図である。
【
図14】key(キー)プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【
図15】filter(フィルタ)プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【
図16】rollup(ロールアップ)プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【
図17】reformat(再フォーマット)プロンプトによって生成されるグラフィカルダイヤログの一実施形態の図である。
【
図18A】MergeJoin(マージ結合)成分がファイルA及びファイルBからのデータを結合し、結果を出力ファイルに出力する第1のグラフのブロック図である。
【
図18B】Rollup(ロールアップ)成分がファイルAからのデータを集約し、結果を出力ファイルに出力する第2のグラフのブロック図である。
【
図18C】MergeJoin(マージ結合)成分がファイルA及びファイルBからのデータを結合し、その結果生じるデータをRollup(ロールアップ)成分が集約し、最終結果を出力ファイルに出力するグラフのブロック図である。
【
図19】Condition-interpretation(条件解釈)コントロールを有する、条件を提示するグラフィカルダイヤログの一実施形態の図である。
【
図20】汚染が生じる状況を示すグラフの図である。
【
図21】Remove Completely(完全削除)条件付き成分を含むグラフのランタイム準備(runtime preparation)のプロセスを要約する流れ図である。
【
図22】本発明の特定の実施形態に関するReplace With Flow(フローで置換)条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。
【
図23】ランタイムパラメータなしのロールアップアプリケーションを表すグラフの図である。
【
図24】
図23のロールアップアプリケーションのランタイムパラメータ化バージョンを表すグラフの図である。
【
図25】
図24のアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【
図26A】
図25のパラメータグリッド内の情報からウェブインタフェースによって生成されたフォームを表すグラフィカルダイヤログの一実施形態の図である。
【
図26B】利用者によってパラメータ値で埋められた
図26Aのフォームの図である。
【
図27】ランタイムパラメータ化ロールアップ及び結合アプリケーションを表すグラフの図である。
【
図28】
図27のアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【
図29】
図28のパラメータグリッド内の情報からウェブインタフェースによって生成されたフォームを表すグラフィカルダイヤログの一実施形態の図である。
【
図30】ランタイムパラメータ化ロールアップ-結合-ソートアプリケーションを表すグラフの図である。
【
図31】
図30に示すアプリケーションの一例に関するランタイムパラメータグリッドを表すグラフィカルダイヤログの一実施形態の図である。
【
図32A】メタデータが伝搬されるグラフの図である。
【
図34A】成分内及び成分間の依存関係を有するパラメータを含むグラフである。
【
図34B】
図34A内のグラフのパラメータ間の依存関係を表す依存関係グラフである。
【
図34C】
図34A内のグラフのパラメータ間の依存関係を表す依存関係グラフである。
【
図35】修正トポロジカルソートプロセスの図である。
【
図36】データフローグラフが実行されるシステムの構成例のブロック図である。
【
図37】マイクログラフを含む例示的なデータフローグラフの説明図である。
【
図38B】例示的なマイクログラフの説明図である。
【
図39】メモリ内の複数のマイクログラフを有する例示的な専用成分の説明図である。
【
図40A】データフローを処理する複数のマイクログラフを有する例示的な専用成分の説明図である。
【
図40B】複数の専用成分を有する例示的なデータフローグラフの説明図である。
【
図41】前処理成分及び後処理成分を含む例示的な専用成分のブロック図である。
【
図42】それぞれ単一のデータベースと対話する複数のデータフロー成分の一例の説明図である。
【
図43】複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【
図44A】複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【
図44B】共通のプロトコル層を使用して複数のデータベースと対話する例示的なデータフロー成分の説明図である。
【
図45】データフローグラフがランタイム前にコンパイルされるシステムの構成例のブロック図である。
【発明を実施するための形態】
【0012】
説明
本開示と合致するシステムは、リアルタイムトランザクショントラッカ(RTTT)を実装する。概して、RTTTは長い(且つ未知の)期間にわたってデータストリームから情報を得るための操作(例えばクエリ)を実装するソフトウェアプログラムである。RTTTは、リアルタイムアプリケーション内のクエリのアドホックモニタリングを可能にする。以下で更に説明するように、RTTTは動的に追加される複数のクエリを実行することも支援し、部分結果の可視性ももたらす。本明細書で使用するとき、「リアルタイム」は、これだけに限定されないが、ほぼリアルタイム及び実質的にリアルタイムを含み、その何れについてもデータが受信され又はアクセスされるときとそのデータの処理が実際に行われるときとの間に時間のずれがあり得るが、データはデータが受信されるとき依然として実時間で(例えば継続的に又は周期的に)処理される。RTTTを使用し、利用者はリアルタイムでデータストリームに対して(例えば同時に)行われる操作(例えばクエリ)を規定することができる。RTTTは実行されるクエリの中間結果を生成し、実行されるクエリの新たなその後の結果で中間結果を(例えば周期的に)更新する。概して、中間結果はクエリの実行が完了する前に生じるクエリの実行結果を含む。RTTTは、実行するための新たなクエリを(任意の時点において)(例えば周期的に)生成するための、及び/又はデータストリームに対して規定の操作(例えばクエリ)を(所望のやり方で、例えばリアルタイムで)システムによって行うことができるかどうかのフィードバックを利用者に与えるためのインタフェースも利用者に提供する。以下で更に説明するように、利用者はクエリを自在に停止し又は終了することもできる。
【0013】
RTTTは更に、クエリの結果だけを記憶し、データストリーム内で生じる個々の項目を破棄する。RTTTにより、利用者はデータを周期的に且つ/又は継続的にモニタし、そのデータに対して頻繁に(リアルタイムで)作用して情報を得ることができる。
【0014】
図1を参照し、データ処理環境100(例えばランタイム環境)はRTTT103を実装するためのシステム102を含む。RTTT103は、ソースデータを受信するためのソースデータリーダ106、クエリ107a...107n及びクエリオブジェクト111a...111nを記憶するための管理リポジトリ112、クエリオブジェクト111a...111nのどれを実行するのかを決定するためのクエリドライバ又は実行モジュール108、ソースデータに対して(又はその一部に対して)クエリを実行するためのクエリワーカエンジン110a...110nを含む。RTTT103は、本明細書に記載の技法を使用して複数のクエリを実行することを支援する。以下の説明は「クエリ(a query)」又は「クエリ(the query)」に言及する場合がある。「a query」又は「the query」への言及は、単一のクエリへの付随的な説明を制限することなしに便宜上のものである。以下に記載する技法は複数のクエリに適用され得る。
【0015】
概して、ソースデータは、システム102の外部のサードパーティデータ源(例えばシステム)から受信されるデータを含む。ソースデータは、ソースデータリーダ106が外部のシステムから受信するリアルタイムデータストリーム104(例えばほぼリアルタイムのデータストリーム)を含む。リアルタイムデータストリーム104は、例えばストリームが周期的に、断続的に、及び/又は継続的に受信されるとき、データ項目がストリーム内の様々な場所に位置するデータストリームを含む。例えば、一部のデータ項目はストリームの或る部分内に位置し、他のデータ項目はストリームのその後の別の部分内に位置する。リアルタイムデータストリーム104は、データ項目が(i)様々な時点において周期的に受信される、又は(ii)様々な時点において継続的に受信されるデータストリームも含む。リアルタイムデータストリーム104は、例えばトランザクション(例えばロジスティックトランザクション、機械データトランザクション、デビットカードトランザクション、現金自動預払機(ATM)トランザクション、クレジットカードトランザクション、チャージカードトランザクション、ストアドバリューカードトランザクション、ペイメントカードに関する国際トランザクション、ペイメントカードに関する国内トランザクション、人手による現金トランザクション等)を示すトランザクションログフィードデータを含む様々な種類のデータを含む。
図1の例では、ファイル109がリアルタイムデータストリーム104内で受信される。この例では、ファイルは一種のソースデータである。概してファイルは1組のレコード(例えば20万個のレコード)を含み、各レコードはデータ項目を表す。ファイル内のレコードは、例えばRTTT103によって作業単位へと構成され得る。概して、作業単位とは処理されるデータの集まりである。例えば、作業単位は1組のレコード又はレコードの部分集合を表し得る。サードパーティデータ源からのソースデータの到着について、ソースデータリーダ106がシステム102内の複数のディレクトリ(不図示)を走査する。これらのディレクトリは、ソースデータを受信するためにシステム102内で予め構成される。ソースデータリーダ106は、リアルタイムデータストリーム104からデータを読み取る。ソースデータリーダ106は、このデータを単回読み取り、読み取ったそのデータを使用して多くのクエリ(例えばクエリ107a...107n)にサービス提供する。この例では、システム102がリアルタイムデータストリーム104内で生じるデータ項目を(例えば永続的に)記憶するためのデータ記憶域を含まない。むしろ、リアルタイムデータストリーム104内のデータに対してクエリが実行される間システム102のバッファキャッシュ内に一時的に記憶されることを別にすれば、リアルタイムデータストリーム104はソースデータリーダ106によって読み取られ、その後破棄される。クエリの実行後、バッファキャッシュのコンテンツも破棄される。
【0016】
RTTT103は、クエリを作成し、作成したクエリがシステムによって実行され得るかどうかのフィードバックを得るためのユーザインタフェースを利用者(例えばアナリスト)に提供するクエリクリエータ114も含む。クエリクリエータ114は、アナリストがクエリを生成するためのユーザインタフェースを提供するモジュールを含む。一例では、クエリクリエータ114がデータエントリ用のユーザインタフェースである。別の例では、クエリクリエータ114がスプレッドシートのテンプレートを含む。クエリクリエータ114はクエリ構文を検証し、クエリのための実行コードであるクエリワーカエンジンを(テンプレートから)生成する。実行コードはシステム102内のディスク上のファイルとして記憶され、管理リポジトリ112はクエリが開始し停止するときを追跡する。以下で説明するように、クエリワーカエンジンは任意のクエリオブジェクトを実行するために使用される汎用実行コードを含む。クエリクリエータ114は、管理、メタデータ、セキュリティ、及び監査に使用されるクエリメタデータ(例えばクエリ状態)を管理リポジトリ112に登録する。クエリ状態は、クエリが現在実行されているかどうか、又はクエリが最後に実行されたときを規定する。
【0017】
クエリクリエータ114のユーザインタフェースにより、クライアント装置116がクエリ107aをシステム102に伝送する。利用者は、システム102に伝送され記憶される複数のクエリ107a...107nを定義することができる。クエリ107aを伝送しているクライアント装置116は、クエリ107aを作成する利用者117によって操作される。クエリ107aは、クエリの構文を規定するクエリ構文情報を含む。クエリ107aを受信することに応答し、クエリクリエータ114はクエリ構文を検証し、クエリオブジェクト111aを生成する。クエリ107aはクエリ仕様、即ちクエリの詳細な記述(例えばクエリターム)を含む。
【0018】
例えばクエリ107aは、入力データストリーム(例えばリアルタイムデータストリーム104)をどのように処理するのか、及び例えば表示するために結果をどのように処理するのか(例えば利用者がどの結果を見たいのか)を規定するユーザ入力情報である。クエリ107aは、クエリが実行するための基準も規定する。クエリオブジェクト111aはクエリ107aの機械表現(即ち機械言語表現)であり、そのためクエリワーカエンジンはクエリを読み取って処理することができる。クエリワーカエンジンはクエリオブジェクトを実行する。便宜上、及び制限なしに、クエリという用語はユーザ規定のクエリ(例えばクエリ107a)又はクエリオブジェクト(例えばクエリ111a)を指すために使用され得る。
【0019】
先に説明したように、クエリワーカエンジンはクエリのための実行コードである。この実行コードは、インスタンス化されていないデータフローグラフ、例えば具体的なインスタンスについて表現されていないデータフローグラフを含む。このインスタンス化されていないデータフローグラフは様々な成分を含む。クエリオブジェクトを読み込むとき、例えばクエリオブジェクトによって規定されるクエリを実行するのに必要な成分に基づき、クエリワーカエンジン又は実行時前モジュールが特定の成分をオフにし、他の成分をオンにする。つまりクエリオブジェクトは、クエリの仕様を満たすためにどの成分をクエリワーカエンジンによってローカルに実行すべきかを規定する。この例では、クエリクリエータ114が各クエリのクエリオブジェクトを生成する。例えばクエリクリエータ114は、クエリ107a...107nのそれぞれについてクエリオブジェクト111a...111nを生成する。
【0020】
一例では、クエリ及びクエリ仕様を作る際に使用されるデータを利用者が入力するグラフィカルユーザインタフェース(GUI)用のデータをシステム102が生成する。このGUIにより、クエリに関連しクエリを識別するために使用されるクエリ識別情報(ID)を利用者が入力する。以下でより詳細に説明するように、クエリIDは、クエリ仕様を取り出し、クエリごとの結果ファイル、例えばクエリ実行の中間結果及び最終結果を記憶するためのファイルに名称を付けるためにも使用される。利用者は更に、クエリ実行の開始時間、クエリ実行の停止時間、及び報告間隔(例えばクエリの実行結果を利用者が見ることができる頻度)を規定するデータをクエリ仕様内に入力する。クエリの開始時間/停止時間を規定することにより、利用者は、特定の時点において実行され、特定の時間にわたって実行されるようにクエリをスケジュールすることができる。改変形態では、クエリの自動的な開始及び停止を可能にするコントロールを(例えばグラフィカルユーザインタフェース内の表示によって)システム102が利用者に提供する。
【0021】
クエリクリエータ114により、利用者はリアルタイムで実行するための1つ又は複数のクエリを動的に追加することができる。クエリが作成されると、利用者はクエリ仕様を更新して(例えば現在時間であるように)新たな開始時間及び/又は新たな停止時間を規定することにより、クエリを(例えば実行されている1組の複数のクエリに)動的に追加することができる。つまりクエリクリエータ114により、利用者は既に実行されている1組の複数のクエリに更なるクエリを動的に追加することができる。利用者は、リアルタイムの現在の実行のために複数のクエリを動的且つリアルタイムで追加することができる。
【0022】
クエリ107aは、クエリを実装するために実行するためのコンパイル済みデータフローグラフの名称も含む。概して、データフローグラフは有向グラフである。コンパイル済みデータフローグラフのこの名称はクエリ仕様の一部として保存される。以下でより詳細に説明するように、クエリは、リアルタイムデータストリーム104の一部にクエリを適用するデータフローグラフによって実装される。この例では、データ処理環境100は、頂点間の(成分間の作業要素、即ちデータの流れを表す)有向辺によって接続される(データ処理グラフ成分又はデータセットを表す)頂点を含むデータフローグラフとしてクエリを開発するための環境(例えば開発環境)である。例えば、かかる環境については以下でより詳細に説明する。そのようなグラフベースのクエリを実行するためのシステムについては、「グラフとして表現される計算の実行(Executing Computations Expressed as Graphs)」と題された米国特許第5,966,072号の中で説明されている。このシステムに従って作られるデータフローグラフは、グラフ成分によって表される個々のプロセスの内外に情報を出し入れするための、プロセス間で情報を動かすための、及びプロセスの実行順序を定めるための方法を提供し得る。このシステムは、利用可能な任意の方法からプロセス間の通信方法を選ぶアルゴリズムを含み得る(例えばグラフのリンクによる通信経路は、プロセス間でデータを渡すためにTCP/IP若しくはUNIXドメインソケットを使用することができ、又は共用メモリを使用することができる)。
【0023】
本明細書に記載のデータフローグラフ(例えばマイクログラフ)はシステムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、1つ又は複数の入力データセットから処理グラフ成分のグラフを介して1つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ1つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、グラフベースの計算を実行するために1台又は複数台のコンピュータ上にホストされ、データ記憶域に結合されるランタイム環境であって、データフローグラフを規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフに指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュール、及び本明細書に記載の方法の1つ又は複数の操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを含む、ランタイム環境とを含み得る。
【0024】
システム102を使用して開発されるデータフローグラフは、管理リポジトリ112(又は別のデータ記憶域)内に記憶され、RTTT103によってアクセスされ得る。RTTT103は、データフローグラフの成分に関連するクエリを実行してリアルタイムデータストリーム104内で受信されるデータを処理するためにデータフローグラフを実行することができる。
【0025】
クエリクリエータ114を使用し、利用者はクエリに関する様々なクエリ基準及びクエリパラメータを規定することができる。概して、クエリ基準はクエリの実行前に満たされる条件(例えばクエリされるデータのタイプ)を含む。一例では、クエリが例えばクエリ基準に基づいてではなく、クエリの開始時間に基づいて実行のために選択される。つまり、利用者はクエリの開始時間を規定し、クエリはその時間において「起動」し又は実行し始める。例えば結果内に表示される属性(例えば利用者がどの属性をクエリ結果内で見たいのか)、クエリ結果をどのように集約するのかを規定する集約キー、フィルタ条件、ソート条件(例えば日付に基づいて等、クエリ結果をどのようにソートするのかを規定する情報)、出力様式(例えばクエリ結果を出力するためのフォーマットを規定する情報)、及び警告閾値(警告の送信をトリガする1つ又は複数の既定条件を規定する情報)を含む様々な種類のクエリパラメータがある。
【0026】
例えば、利用者はフィルタ条件(リアルタイムデータストリーム104内に含まれるデータ項目をどのようにフィルタにかけるのかを規定する情報)を規定することができる。フィルタ条件は、クエリ結果の中からどのタイプのデータをフィルタで除去する(除外する)のか、及びクエリ結果内にどのタイプのデータをフィルタで入れる(含める)のかを指示する。利用者が与えるフィルタ条件に基づき、システム102はフィルタ条件を用いてクエリオブジェクト111aを更新し、クエリオブジェクト111aをクエリワーカエンジンに与えてクエリワーカエンジンが利用者のフィルタ条件に従ってクエリ結果をフィルタにかけることを可能にする。
【0027】
クエリクリエータ114を使用し、利用者はクエリ結果に対するデータ変換のためのカスタム操作を定義することもできる。利用者は、拡張2進化10進コード(EBCDIC)日付時刻を読み取り、変換するための操作を規定することができる。利用者は、通貨額を表すデータ項目のフォーマットを米国ドル(USD)通貨に変換するための別の操作を規定することができる。利用者は、リアルタイムデータストリーム104内のデータのタイプから支払カードの種類(例えばデビットカード、ATMカード、ストアドバリューカード、クレジットカード、チャージカード等)を決定するための更に別の種類の操作を規定することができる。クエリパラメータ及びユーザ定義カスタム操作により、クエリワーカエンジン(例えばクエリワーカエンジン110a...110nの1つ)は利用者の規定に従ってクエリ結果をカスタマイズすることができる。具体的には、クエリワーカエンジンは(例えば管理リポジトリ112内のクエリオブジェクト111aにより)、クエリ実行の集約済みの(例えば最終)結果に対するデータ変換のためのユーザ定義カスタム操作を示す情報にアクセスする。クエリワーカエンジンは、集約済みの結果に対してユーザ定義カスタム操作を実行し、ユーザ定義カスタム操作に従って集約済みの結果を変換(例えば修正)する。
【0028】
クエリクリエータ114は、(互いに関連する)クエリ107a及びクエリオブジェクト111aを管理リポジトリ112(例えばクエリ及び関連するクエリオブジェクトを記憶するためのデータリポジトリ)内に記憶する。この例では、管理リポジトリ112が、リアルタイムデータストリーム104に対して実行されるクエリ107a...107n及びクエリオブジェクト111a...111nを記憶する。この例では、クエリ107a...107nがクエリ107aを含み、クエリオブジェクト111a...111nがクエリオブジェクト111aを含む。先に説明したように、クエリクリエータ114はクエリ107aの監査及びセキュリティを提供する。クエリクリエータ114は更に、クエリオブジェクト111a...111nをクエリドライバ108に登録する。
【0029】
以下でより詳細に説明するように、クエリドライバ108は、実行するためのクエリオブジェクト111a...111nの1つ又は複数を選択し、選択したそれらのクエリオブジェクトを何時実行するのかを決定するRTTT103の部分である。クエリドライバ108は、入力メッセージバス上のソースデータのリアルタイムストリームを読み取る継続的アプリケーションを含む。一例では、クエリドライバ108がデータフローグラフを継続的に実行する。データフローグラフにより、クエリドライバ108は、更に多くのデータを(例えばデータストリームから)検出し又は受信するとき、どのクエリオブジェクトを実行するのかを明らかにするために管理リポジトリ112を確認するように構成される。クエリドライバ108は、実行する必要があるクエリオブジェクトごとにクエリワーカエンジンの1つのインスタンスをインスタンス化する。
【0030】
クエリドライバ108は、アクティブであり且つ(例えば現時点で及び/又は近い時点で)実行が予定されているクエリを管理リポジトリ112に(例えば断続的に)ポーリングする。アクティブクエリを管理リポジトリ112に断続的にポーリングすることにより、クエリドライバ108は、例えば特定の時点において開始するようにスケジュールされることにより動的に追加される複数のクエリを実行できるようにする。本明細書に記載するように、クエリは規定の時点において開始し停止するようにスケジュールされ得る。既に実行されている(元の)1組の所与のクエリについて、クエリドライバ108は例えば管理リポジトリ112をポーリングした結果に基づき、実行されている1組の元のクエリに加えられる追加のクエリを識別することができる。この例では、これらの追加のクエリは、元の組の中のクエリの実行時の後の時点において実行が予定されている。管理リポジトリ112を断続的にポーリングすることにより、クエリドライバ108は、実行すべき更なる追加のクエリを加えることによって既に実行されているクエリを動的に増加させる。改変形態では、管理リポジトリ112にクエリが登録されると、どのクエリを(及び何時)実行するのかを規定する情報を管理リポジトリ112がクエリドライバ108にプッシュする。このプッシュされる情報は、登録されるクエリのためのアクティブクエリワーカエンジンを規定する情報を含む。例えばクエリに関するクエリオブジェクトを生成し、そのクエリオブジェクトを管理リポジトリ112内に記憶することを含め、管理リポジトリ112にクエリを登録する様々なやり方がある。
【0031】
クエリドライバ108は、入力データを小さい作業単位、例えば直近の5秒のうちに到着した全データに一括する。先に説明したように、クエリドライバ108は管理リポジトリ112をポーリングしてその時点におけるアクティブクエリワーカエンジンを決定することにより、どのクエリオブジェクトを実行するのかを作業単位ごとに決定する。それらのアクティブクエリワーカエンジンは、現在アクティブなクエリを表す。先に説明したように、クエリは開始時間を有する。クエリワーカエンジンは、その開始時間にオンになる(例えばアクティブとして列挙される)ようにプログラムされる。クエリドライバ108は、現在の作業単位のために実行される全てのクエリについて、クエリワーカエンジンの1つのインスタンスを呼び出す。クエリワーカエンジンが実行を終了すると、制御権がクエリドライバ108に戻り、クエリドライバ108は管理データベース(例えば管理リポジトリ112)内のクエリ状態を更新する。
【0032】
改変形態では、クエリクリエータ114がクエリオブジェクト111a...111nの1つをクエリドライバ108に登録し、クエリオブジェクト111a...111nのそれぞれ及びクエリオブジェクト111a...111nのそれぞれのためのクエリIDを実行するためのクエリ基準を規定するデータを(例えばそのメモリキャッシュ内に)記憶する。記憶済みの情報を使用し、クエリドライバ108は、クエリオブジェクト111a...111nのどれをリアルタイムデータストリーム104に対してリアルタイムで、及びリアルタイムデータストリーム104の受信時に実行すべきかを決定する。クエリドライバ108は、例えばそれらのクエリに関するクエリ仕様に基づき、利用者が規定したクエリの開始時間及び停止時間を明らかにすることによってこの決定を行う。一部の例では、クエリ仕様はクエリの開始時間及び停止時間を規定する。別の例では、クエリドライバ108が、クエリ基準をリアルタイムデータストリーム104内のデータ項目の品質(例えば属性)と比較することによってこの決定を行う。クエリオブジェクト111a...111nの1つ又は複数のクエリ基準が満たされると(及び/又は特定のクエリが開始時間に従って開始すべきだと)クエリドライバ108が決定する場合、クエリドライバ108は適切なクエリIDを使用して、管理リポジトリ112からクエリ基準が満たされているクエリを取り出し、適切なクエリのためのクエリオブジェクトを取り出す。別の例では、クエリ仕様は、実行されているクエリのクエリ基準を満たすデータをリアルタイムデータストリーム104が含む限りクエリが実行されるべきだと指示する。
【0033】
クエリドライバ108は、ソースデータリーダ106からのリアルタイムデータストリーム104を読み取る上記のデータフローグラフ(例えば連続群、周期グラフ等)を実装する。グラフを使用し、クエリドライバ108は、リアルタイムデータストリーム104のどのデータ項目が管理リポジトリ112内に記憶されたクエリのクエリオブジェクト111a...111nのクエリ基準を満たすのかを決定する。クエリ基準が満たされたクエリを識別すると、クエリドライバ108はクエリワーカエンジン(例えばクエリワーカエンジン110a...110nの1つ)のインスタンスを呼び出す。改変形態では、クエリドライバ108がアクティブクエリワーカエンジンのリストを得るために管理リポジトリ112をポーリングし、それらのアクティブクエリワーカエンジンをリアルタイムデータストリーム104又はその一部に適用する。クエリドライバ108は、どのクエリが実行されているのか、クエリが何時実行されるのか、及びどの程度長く実行されるのかを追跡するためのクエリ実行ステータス(例えば監査証跡)もクエリのクエリ状態の一部として管理リポジトリ112内に記録する。
【0034】
概して、クエリワーカエンジンはユーザクエリを支援することができる汎用プログラムである。所与の作業単位に対して実行する必要があるユーザクエリごとに、クエリワーカエンジンの1つのインスタンスがクエリドライバ108によって生成される。現在のシステムの日付時刻が対応するクエリのモニタリング期間内に含まれるクエリワーカエンジンだけがインスタンス化される。実際のユーザクエリは、クエリワーカの機能を駆動する(例えば特定のユーザクエリが集約又はソートを有さない場合、対応するクエリワーカのインスタンスについてそれらの機能がオフにされる)。クエリワーカエンジンは警告基準値の計算も行い、そのように要求される場合は閾値において警告を送る。
【0035】
クエリワーカエンジンは、クエリに関する上記のデータフローグラフ(例えば単一の汎用グラフ)、例えばクエリオブジェクト111a...111nの1つを含む。クエリオブジェクトはグラフを実行することによって実行される。クエリドライバ108は、実行されるクエリごとに、グラフとしてクエリワーカエンジンの1つのインスタンスを生成し又は選択する。
図1の例では、クエリドライバ108がリアルタイムデータストリーム104内のデータ項目に対してクエリオブジェクト111a...111nを(例えば同時に)実行する。これらのクエリオブジェクトを実行するために、クエリドライバ108はクエリワーカエンジン110a...110nを生成し又は選択する。この例では、クエリワーカエンジン110a...110nがクエリオブジェクト111a...111nをそれぞれ実行する。
【0036】
一例では、クエリオブジェクト111a...111nの1つの実行開始時に、リアルタイムデータストリーム104内のデータ項目の量が未知である。加えて、データ項目はリアルタイムデータストリーム104内で或る期間にわたって登場する。クエリオブジェクト111a...111nの1つの実行開始時に、この期間の終わりは未知である。この例では、ソースデータリーダ106がリアルタイムデータストリーム104内でファイル109を受信する。この例では、ソースデータリーダ106が規定の時間間隔において(例えば5分おきに)新たなファイルを受信する。クエリドライバ108は、クエリオブジェクト111a...111nのどれをファイル109に対して実行すべきかを決定する。この例では、クエリドライバ108は、クエリオブジェクト111a...111nのそれぞれをファイル109に対して実行すべきだと決定する。そのため、クエリドライバ108は、クエリオブジェクト111a...111nをファイル109に対して(同時に)実行するためにクエリワーカエンジン110a...110nを生成し又は取り出す。このプロセスは、例えばクエリが引き続きアクティブであり実行されていることを規定する開始時間及び終了時間を有するクエリについて、次のファイルが到着するとき繰り返される。この例では、ソースデータリーダ106がファイル109を読み込み、ファイル109をクエリドライバ108に伝送する。クエリドライバ108は、クエリオブジェクト111a...111nをそれぞれ実行するとき使用するためのクエリワーカエンジン110a...110nのそれぞれにファイル109を伝送する。
【0037】
クエリワーカエンジンは警告基準値も生成し、(例えばユーザ入力がクエリ処理に関する既定の要件に準拠しない場合は)クエリに関する警告を送る。例えば利用者がクエリ仕様を定める場合、利用者は警告(例えば或る事象の発生を明記する通知メッセージ)をトリガする様々な既定の事象を規定する。それらの事象は、関連するクエリのクエリオブジェクト内に記憶することができる。別の例では利用者は、事象数が閾値を上回る場合は通知を受けることを要求しながら、事象の閾値を規定することができる。概して、事象は予め規定した1つ又は複数のデータ値又はタイプの発生を含む。クエリドライバ108は、クエリワーカエンジン110a...110nによって実行されている様々なクエリに関する既定の事象を示すデータをクエリワーカエンジン110a...110nのそれぞれに伝送し、クエリワーカエンジン110a...110nが適切な警告を生成することを可能にする。
【0038】
リアルタイムデータストリーム104内のデータ項目に対してクエリオブジェクト111a...111nを実行することに基づき、クエリワーカエンジン110a...110nは中間結果118a...118nを生成する。中間結果118a...118nは、クエリ実行の持続時間の間中(利用者が見直すために)入手可能である。以下でより詳細に説明するように、クエリワーカエンジン110a...110nは中間結果118a...118nのそれぞれを、クエリオブジェクト111a...111nのその後の実行のその後の結果と組み合わせる。これらの組み合わさった結果は、新たな中間結果又は最終結果(例えばクエリの実行が終わる場合)をもたらす。
【0039】
中間結果118a...118n(又は最終結果)を使用し、クエリワーカエンジン110a...110nは実行されるクエリに関する警告120及びクエリ結果122を(例えばコンマ区切り(CSV)形式や構造化照会言語(SQL)フォーマットで)生成する。一例では、クエリ結果が部分結果、例えばクエリが依然として実行されており完了する前の現時点までのクエリ実行結果を含む。この例では、例えばクエリが実行され続けるとき、部分結果が新たな結果によって継続的に及び/又は周期的に更新される。例えば1つ又は複数のリアルタイムデータ項目がクエリ条件の1つ又は複数を満たすことをRTTT103が検出するとき、部分結果がリアルタイムで表示されもする。新たなリアルタイムデータ項目がクエリ条件を満たすことをRTTT103が継続的に検出するとき、RTTT103は、例えば新たに検出される項目に基づいて部分結果を更新し、表示する。この例では、システム102が警告120及びクエリ結果122をクライアント装置124に伝送する。一例では、クエリ結果122が後で取り出すために管理リポジトリ112内に記憶される。概して、警告は検出事象を利用者に知らせる通知メッセージを含む。概して、クエリ結果はクエリ実行結果の視覚化を含み、特定の事象が検出される頻度及び時点を明記する情報を含む。警告120は、電子メール又は簡単なメッセージングサービス(SMS)の警告とすることができる。システム102は、定義された閾値、例えば警告が送信されるために超えられなければならない絶対値(例えば事象の絶対値)を規定する情報において警告を送るように構成され得る。警告120及びクエリ結果122は、例えばクライアント装置124の利用者125が見るためにクライアント装置124にそれぞれ伝送される。システム102は、例えば統合された出力や付加された出力を含む様々な種類のクエリ結果を出力する。概して、統合された出力は、結果をチャート及び他の視覚化へと定量化するデータを含む。概して、付加された出力は結果のデータファイルを含む。クエリはリアルタイムで(及びリアルタイムデータストリーム104が受信されるとき)実行されるので、システム102は結果をリアルタイムで且つデータが到着したすぐ後で送ることができる。
【0040】
一例では、データ処理環境100は、支払カード(例えばデビットカード、ATMカード、ストアドバリューカード、クレジットカード、チャージカード等)が不正行為の危険にさらされている場合を明らかにするために使用される。この例では、システム102は、カードを発行しているエンティティ(例えば発行エンティティ)から危険にさらされている1枚又は複数枚のカードを規定する情報を受信する。この例では、ソースデータリーダ106が、トランザクションを示すリアルタイムデータストリームを発行エンティティのシステムから受信する。そのリアルタイムデータストリームに基づき、システム102は危険にさらされているカードからのトランザクションをモニタし、それらのカードによって開始されるトランザクションの数及びタイプのカウントを決定する。例えば人手による現金トランザクション、ATMトランザクション、国内使用トランザクション、国際使用トランザクション、デビットカードトランザクション、チャージカードトランザクション、ストアドバリューカードトランザクション、クレジットカードトランザクション等を含む様々な種類のトランザクションがある。この例では、従業員(例えば不正防止部門のアナリスト)がクエリクリエータ114を使用して警告条件を規定する。例えば警告条件は、危険にさらされているカードに関する様々な種類のトランザクション(例えば国際使用トランザクション)の閾値量をシステム102が特定するとき、(例えば発行エンティティがトランザクションを拒否することができるように)発行エンティティのシステムに警告することを規定する。
【0041】
RTTT103は、ロジスティック事象又は加工された商品の総数を地域や国等ごとにモニタするために使用され得る。RTTT103は、特定の期間にわたる(例えば2013年11月15日の08:00:00から開始するN時間の期間にわたる)特定の国内の特定の製品に関する総売上高及びトランザクションカウントを明らかにするための販売分析にも使用される。RTTT103は、地域や国等ごとのマーケティングオファーの辞退の総数をモニタするために使用され得る。利用者はRTTT103を構成して、辞退の総数が閾値を上回る場合は通知を受けたいことを規定することができる。RTTT103は、入力データ内の必須欄の何れかがヌル又は空白である場合に警告を生成するために使用され得る。
【0042】
一例では、RTTT103が、警告のためのリアルタイムローリングウィンドウ操作(例えば集約)も実行する。定義された時間窓について、例えば合計操作、カウント操作、平均値操作、最小値操作、最大値操作等を含む様々な種類の操作がある。時間窓自体のサイズは、ユーザ定義パラメータ(例えば10分や60分等)である。例えば利用者は、10分間のローリング時間窓にわたるオファーの辞退数をカウントするようにRTTT103を構成することができる。利用者は、自分が何時どのように(例えば電子メールによってまたSMSによって等)通知されたいのかを規定する様々な警告閾値を定めることもできる。例えば利用者は、辞退のカウントが閾値量を上回る場合、電子メールの警告を送信することによって利用者に通知するように規定することができる。
【0043】
別の例では、金融機関が或る地域内で新製品のポートフォリオを立ち上げることを計画しており、ビジネスユーザは立ち上げ後の最初の「N」時間(モニタリング期間)にわたるその製品のアップテイク(uptake)をモニタしたい。ビジネスユーザは、製品及び地理ごとに分類される契約顧客のカウントや委任された総額等の幾つかの基準値をモニタしたい。ビジネスユーザは、新規顧客が一定の閾値額よりも多く製品に投資する場合も、モニタリング期間中に警告を欲しい。ビジネスユーザは、ポートフォリオのアップテイクをモニタリング間隔中に定期的にモニタする必要があり、トレンディングチャートを作るために情報を要求に応じて必要とする。この例では、SQLクエリ及び分析のために全データセットがデータウェアハウス内で入手可能になるモニタリング期間の終了までビジネスユーザは待ちたくない。この例では、短期間のモニタリング要件のために新たな専用の報告リポジトリ内に入力データフィードが記憶されず、記憶することはデータウェアハウスとデータが重複する原因となる。本明細書に記載の技法を使用し、要求されたモニタリング情報を利用者にリアルタイムで与えるためにデータが「その場で」(例えばリアルタイムで)クエリされる。加えて利用者は、それぞれ独自のモニタリング期間を有する何百ものクエリを予め設定することができる。それらのクエリは同時に実行される。各クエリは連続したデータストリームに対してリアルタイムの計算を行い、事業体が入手可能な結果を継続的に生成する。個々のクエリごとのモニタリング間隔の終了時にシステムが最終結果を受信者にプッシュし、システム資源を解放するためにクエリを自動で消去する。
【0044】
一例では、クエリドライバごとに1つのデータストリームがある。この例では、データストリームが1つのフォーマットのレコードを含む。この例では、各ストリームが特定のフォーマットのレコードを表す複数のデータストリームのために、データ処理環境が複数のクエリドライバを含み、各クエリドライバはデータストリームの1つに割り当てられる。
【0045】
図2を参照し、
図150は、クエリ実行の中間結果をクエリ実行のその後の結果と集約することを概念的に示す。この例では、特定のクエリが時点T1において実行される。クエリの実行に基づき、RTTT103が結果152(例えば時点T1における結果)を生成する。時点T1の後の時点T2において、クエリが再び(例えば今度は異なるデータに対して)実行される。例えば、クエリは受信される新たなファイルに対して再実行され得る。時点T2におけるクエリの実行に基づき、RTTT103は、時点T2におけるクエリの実行結果である結果156を生成する。RTTT103は、結果152を結果156と組み合わせて時点T2における中間結果158を生成する。概して、中間結果は現在の期間までの全結果を集約したものである。その後の各時点における新たな中間結果を決定するこのプロセスは時点Tnまで続く。時点Tnにおいて、クエリの実行が完了する。加えて時点Tnにおいて、RTTT103が時点Tnにおけるクエリ実行の結果162を決定する。RTTT103は、(時点Tnよりも前の全時点の集約済みの結果である)中間結果160を結果162と組み合わせることによってクエリ実行の最終結果164を生成する。この例では、中間結果160は時点Tn-1における中間結果である。結果162は、時点Tnにおける結果(例えば時点Tnだけにおける結果)である。
【0046】
図3を参照し、マイクログラフ200が示されている。概してマイクログラフは、上記のデータフローグラフの専用の下位グラフであり、動的に取り出され、マイクログラフ実行成分内に埋め込まれるように構成される。動的にロードされるかかるグラフを実行するためのシステムについて以下で説明する。一部の実装形態では、マイクログラフが事前コンパイルされる場合がある。
【0047】
一部の例では、データフローグラフの閲覧、構成、及び/又は実行を可能にするユーザインタフェース内にマイクログラフ200が表示される。マイクログラフ200は、
図1に示すシステム102上のRTTT103によって実行されるデータ処理操作を表す。一例では、クエリワーカエンジンがマイクログラフ200(又はマイクログラフのインスタンス)を実行する。マイクログラフ200は、(例えばリアルタイム)データストリームの一部に対してクエリを実行する。例えば、ファイル(例えばリアルタイムデータストリームの一部)が規定の時間間隔において(例えば5分おきに)システム102に到着する。それに応答し、複数のクエリがファイルに対して実行されながら、システム102はシステム102のバッファキャッシュ内にそれらのファイルを保持する。既定の間隔において受信されるファイルについて、システム102はファイルに対して実行されるクエリごとにマイクログラフ(例えばマイクログラフ200)を実行する。
【0048】
この例では、マイクログラフ200が「マイクログラフ入力」と呼ばれる操作を表すグラフ成分202を含み、以下、この成分はマイクログラフ入力成分202と呼ぶ。マイクログラフ入力操作は、どのクエリを実行するのかを規定する情報及びクエリが実行されるフォーマット済みデータ(例えばフォーマット済みファイルやフォーマット済み作業単位等)を(例えばマイクログラフ200を呼び出し、従ってマイクログラフ200にデータを渡す別のデータフローグラフ内のグラフ成分から)受信する。マイクログラフ200は、「複数ファイル読取」と呼ばれる操作を表す成分204も含み、以下、この成分は複数ファイル読取成分204と呼ぶ。この例では、マイクログラフ入力成分202から複数ファイル読取成分204にデータが流れる。複数ファイル読取成分204はデータベースからファイルを読み取り、マイクログラフ入力成分202によって受信される入力情報にそのファイルを追加する。例えば、複数ファイル読取成分204は、特定のクエリの結果に対して実行されるデータ処理操作、例えば特定のクエリの結果を(例えば利用者が見直すために)どのように出力するのか、結果をどのようにソートするのか、クエリの中からどのタイプのデータをフィルタで除去するのか等を規定する情報を読み取ることができる。一例では、複数ファイル読取成分204が、実行されるクエリに関するクエリオブジェクトに接触するデータファイルを読み込む。クエリオブジェクトを使用し、クエリを実行することができ、又はクエリオブジェクトと合致するやり方で結果が得られる。複数ファイル読取成分204は、読み取ったファイルを入力データに追加した結果をロールアップ成分206に出力する。
【0049】
ロールアップ成分は、データ、例えばデータに対するクエリの実行結果を集約する。この例では、ロールアップ成分206が複数ファイル読取成分204の出力にクエリ(例えばクエリタームやクエリ文字列)を適用する。クエリを適用することに基づき、ロールアップ成分206は、ファイル又は分割されたデータのグループ分けにクエリを適用した結果を決定する。結果は、クエリタームに一致するデータ又はクエリ文字列によって規定されるデータのタイプに対応するデータを含む。
【0050】
この例では、例えば直前に受信したファイル又は作業単位に対するこの特定のクエリ実行について、ロールアップ成分206がクエリ実行結果を集約する。ロールアップ成分206の構成にもよるが、ロールアップ成分206は個々のデータ項目を単一のデータ項目に集約し、又は個々のデータ項目数のカウントを与える。ロールアップ成分206の出力は、ファイル又は作業単位にクエリを適用した集約済みの結果である。ロールアップ成分206は、クエリオブジェクトによって規定されるフォーマット又はやり方で結果を出力することもできる。
【0051】
マイクログラフ200は、過去に受信したファイルにクエリを適用することの集約済みの前の結果を示すデータを記憶する、過去のランニング集約成分(previous running aggregations component)210も含む。これらの集約済みの前の結果はクエリごとの結果ファイル、例えば特定のクエリに関する結果(例えば中間結果)を記憶するファイル内に記憶される。クエリごとの結果ファイルは、既定の間隔において(例えば5分間隔や5分間隔の数倍で)利用者又は中央サーバに折り返し報告され得るランニング合計を保持する。クエリごとの結果ファイルはデータリポジトリ(例えば管理リポジトリ112)内に記憶され、過去のランニング集約成分210によってアクセスされる。
【0052】
データは過去のランニング集約成分210及びロールアップ成分206から、結合操作を実装する結合成分208に流れる。「結合」操作は2つのタイプのデータ、例えば或るデータ源の中に含まれる或るタイプのデータと、別のデータ源の中に含まれる別のタイプのデータとを組み合わせる。この例では、結合成分208が、クエリ適用の現在の結果(例えばロールアップ成分206の出力)と過去のランニング集約成分210の出力とを結合する。結合成分208は、(i)現在のクエリ実行に関する現在の集約結果を(ii)過去のクエリ実行に関する過去の集約結果と組み合わせる、新たなクエリごとの結果ファイルを書き込む。この組合せに基づき、結合成分208は(現在の集約結果と過去の集約結果との組合せである)新たな集約結果をもたらす。結合成分208は、その新たな集約結果をデータリポジトリ内の新たなクエリごとの結果ファイル内に記憶することができる。それらの新たな集約結果は中間結果である。それらの中間結果は後で、例えば後の時点においてその後の結果と結合され得る。
【0053】
データ(例えば中間結果)は、結合成分208から次のランニング集約成分212に流れる。次のランニング集約成分212は、(中間結果を含む)新たなクエリごとの結果ファイルによってデータリポジトリを更新し、例えばクエリの次回の実行中に、過去のランニング集約成分210がそのクエリごとの結果ファイルにアクセスすることを可能にする。
【0054】
マイクログラフ200の各成分は1つ又は複数の接続ポートを含み、その接続ポートにより、成分がデータフローグラフの1つ又は複数の他の成分にデータフロー接続(「接続」又は「リンク」とも呼ばれる)によって接続され得る。接続ポートは、成分内にデータを受信するための入力ポート又は成分からデータがそこを通って出力される出力ポートであり得る。一部の例では、接続ポートが入力ポートなのか出力ポートなのかを、接続ポートを描く記号が示す場合がある。例えば
図3の例では、複数ファイル読取成分204が入力ポート記号によって表される入力ポート214と、出力ポート記号によって表される出力ポート216とを有する。
【0055】
この例では、マイクログラフ200内の成分の少なくとも一部が、グラフ成分のローカル状態を(例えばシステム102の)バッファ内に保存してデータフローグラフの状態の回復性を有効にするチェックポイント操作を実行する。本明細書に記載の他のデータフローグラフ内の成分も同様にチェックポインティングを行う。データフローグラフに関して上記で説明したように、マイクログラフ200はシステムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、1つ又は複数の入力データセットから処理グラフ成分のグラフを介して1つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ1つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、1つ又は複数のデータ処理装置上にホストされるランタイム環境は、マイクログラフ200(即ちグラフ成分202、204、206、208、210、212を表す頂点及びその間のリンク)を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってマイクログラフ200に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得るとを含む。ランタイム環境は、
図3の脈絡で説明した操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。
【0056】
図4を参照し、データフローグラフ300は、例えばファイルが到着した瞬間に実行することに始まり、ファイルに対してクエリを実行する。一例では、クエリドライバがデータフローグラフ300を実行する。上記のように、データフローグラフ300は以下を含むシステムによって実装することができ、システムによって実装することができ、そのシステムは、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、1つ又は複数の入力データセットから処理グラフ成分のグラフを介して1つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ1つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、1つ又は複数のデータ処理装置上にホストされるランタイム環境であって、データフローグラフ300(即ちグラフ成分を表す頂点及びその間のリンク)を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフ300に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得る、ランタイム環境とを含む。ランタイム環境は、
図4の脈絡で説明した操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。これらのクエリは、クエリごとにマイクログラフ(例えばマイクログラフ200)を実装することによって実行される。データフローグラフ300は、ソースデータリーダにサブスクライブする(例えばそこからデータを受信する)サブスクライブ成分302を含む。サブスクライブ成分302により、データフローグラフ300は(例えばリアルタイム)データストリーム内に含まれるデータ項目に例えばリアルタイムでアクセスする。この例では、サブスクライブ成分302が(例えば数千ものレコードを含む)ファイルを受信する。データは、サブスクライブ成分302から結合成分304に流れる。結合成分304は、或るデータ源(又は複数のデータ源)からデータ(例えばレコード)を順々に読み取り、一連の離散的な作業単位へと入力データを構成する。先に説明したように、作業単位は、例えば入力レコードに基づいて所定のフォーマットで記憶されるレコードを表すことができ、又は例えば処理されるトランザクションを表し得る。一部の実装形態では、処理される作業単位のカウント等、各作業単位がバッチ内で一意の数字によって識別される。次いで、作業単位はデータフローグラフ300内の次の成分に順に渡される。
【0057】
結合成分304は更に、ファイルを現在アクティブなクエリと結合する。概して、現在アクティブなクエリとは、(例えばリアルタイム)データストリームに対して実行すべきだとクエリドライバが決定したクエリである。一例では、結合成分304が、実行される現在アクティブなクエリのリストを取り出す。このリストは、クエリドライバ108上でローカルに記憶される場合はクエリドライバ108(
図1)から、又は管理リポジトリ112から取り出される。このリストは、実行されるクエリのクエリIDを規定する。現在アクティブなクエリは、リアルタイム又はファイル時間に基づいて決定される。
【0058】
例えば、データリポジトリは現在アクティブなクエリのデータベーステーブルを含む。現在アクティブなクエリは、クエリIDによってテーブル内で識別される。現在アクティブなクエリごとに、データベーステーブルはタイムスタンプも規定する。このタイムスタンプは、クエリが実行されるべきだとクエリドライバ108が決定する時点において規定する。一部の例では、結合成分304が現在のファイル時間(例えばファイルが目下受信されている現在の時間間隔)内に生じるタイムスタンプを有するクエリをデータベーステーブル内で識別する。他の例では、結合成分304が、現在時間に近いタイムスタンプ(例えば現在時間とタイムスタンプによって規定される時間との差が閾値時間未満であるタイムスタンプ)を有するクエリをデータベーステーブル内で識別する。更に別の例では、結合成分304が現在アクティブなクエリであるとして規定されるクエリを選択する。結合成分304は現在アクティブなクエリを選択し、選択したそれらのクエリをリアルタイムデータに結合する。結合成分304は更に、クエリを処理する際に使用するために、選択したクエリに関するクエリ仕様も取り出す。
【0059】
データは結合成分304から分割成分306に流れ、分割成分306は(例えば同じファイルに対して)処理される現在アクティブなクエリを複数の成分のインスタンス、例えば再フォーマット成分のインスタンス308a...308n(以下、再フォーマット成分308a...308n)、及びマイクログラフ実行成分のインスタンス310a...310n(以下、マイクログラフ実行成分310a...310n)に分割する(割り当てる)。つまり分割は、成分の様々なインスタンスにわたって現在アクティブなクエリを分けることを表す。この例では「n」の現在アクティブなクエリがある。この例では、ファイルが「n」回、クエリごとに1回処理される。クエリを分割することにより、クエリを互いに対して(及び様々な分散システムにわたって)並列に実行することができる。分割成分306は、最初のクエリを最初のインスタンスに、2番目のクエリを2番目のインスタンスに等々指定することにより、クエリをラウンドロビン式に分割する。一例では、インスタンスの一部がシステム上で実行され、それにより全てのインスタンスを様々なシステムにわたって分散させる。
【0060】
作業単位の処理が完了すると、結果が収集成分338に渡され、収集成分338は複数のインスタンスから結果を集め、それらの結果をデータフローグラフ内の次のデータ処理成分に渡す。
【0061】
データ(例えばクエリ及び現在のファイルの分割を規定するデータ)は、分割成分306から再フォーマット成分308a...308nに流れる。再フォーマット成分308a...308nのそれぞれは、現在アクティブなクエリの1つに対応する。再フォーマット成分は再フォーマットプロセスを表し、そのためデータフローグラフ300がシステム102によって実行される場合、再フォーマット成分によって表される再フォーマットプロセスが実行される。概して、再フォーマットプロセスは、データを或るフォーマットから別のフォーマットに変換するための一連の命令を含む。この例では、再フォーマット成分が(例えば現在のファイル内の)データレコードをデータフローグラフ(例えば別のデータフローグラフや、データフローグラフ300に接続されるマイクログラフ200の1つ又は複数)によって読取可能なフォーマットに再フォーマットする。
【0062】
再フォーマットされたデータは再フォーマット成分308a...308nからマイクログラフ実行成分310a...310nに流れ、マイクログラフ実行成分310a...310nは、ファイル内のデータレコードに対して(連続的に)クエリを実行するためのマイクログラフを実行する。具体的には、マイクログラフ実行成分310は、実行するためのマイクログラフ(例えばマイクログラフ200)を選択する。例えばファイルに対してクエリを連続的に処理するために、マイクログラフがクエリごとに実行される。この例では、マイクログラフ実行成分310a...310nのそれぞれが、現在のファイルに対して処理される「n」のクエリの1つに対応する。
【0063】
データフローグラフ300は、ファイル内のデータレコードに対するクエリの実行結果を集める収集成分312も含む。概して、収集成分312はマイクログラフ実行成分310a...310nから結果を集め、それらの結果をデータフローグラフ300内の次のデータ処理成分に渡す。データは、マイクログラフ実行成分310a...310nから収集成分312に流れる。収集成分312は、例えば実行されるクエリに関するクエリごとの結果ファイルにアクセスすることによってクエリの実行結果を集める。クエリの実行結果を示すデータは、収集成分から公開成分314に流れ、公開成分314は、結果を例えば所与のクエリID又は複数のクエリIDに関するクエリごとの結果ファイルの内容を表示する結果閲覧GUI内で、又は公開データに対して更なるグラフベースの計算を実行するように構成される別のデータフローグラフに公開する。一例では、クエリごとの結果ファイルが、前回のクエリ実行の小計及びランニング総計の両方を記憶する。この例では、直近の5分間の結果及びクエリが最初に実行され始めてからの結果を表示するダッシュボードをGUIが含む。ダッシュボードは、様々な時間尺度に基づく複数組の合計、例えば直近の5分間、直近の10分間、直近の30分間等の結果も表示する。ダッシュボードは様々なレベルの粒度、例えば1つ又は複数の特定のクエリに関する結果及び/又は全てのクエリに関する結果を表示する。
【0064】
図5Aを参照し、データフローグラフ400は、例えば複数のクエリを並列に実行し且つ特定のクエリに関するデータレコードを並列に更に処理するために、所与のファイル/クエリの組合せの中の並列処理を実装する(例えばパイプライン並列処理を提供する)。このプロセスは大きいファイル(例えば2ギガバイトを超えるファイル)の拡張性を改善し、それにより処理時間を短縮し、処理速度を上げる。例えば、システム102はファイルを既定の回数(例えばN回)処理し、それはファイルが関連クエリごとに処理されるからである。この例では、Nの関連クエリがある場合、システム102はファイルをN回処理する。クエリは直列に又は並列に処理することができる。クエリを直列に処理する場合、ファイル内のデータ項目に対してクエリを連続的に適用する。例えば現在のファイル内のデータを作業単位に分け、並列に実行されるクエリをそれらの作業単位に適用することにより、データフローグラフ400はクエリを直列に処理する代わりに特定のクエリのデータを並列に処理する。
【0065】
上記のように、データフローグラフ400は、データ記憶域と、データ記憶域に結合され、ファイルに対して実行される複数のアクティブクエリに関連するグラフベースの計算を実装するデータフローグラフを生成するように構成される計算環境であって、グラフベースの計算は複数のクエリを実装するための実行可能コンピュータコードを含み、1つ又は複数の入力データセットから処理グラフ成分のグラフを介して1つ又は複数の出力データセットに流れるデータに対して実行され、データフローグラフはデータ記憶域内のデータ構造によって規定され、データ構造によって規定され且つ1つ又は複数のリンクによって接続されるグラフ成分を表す複数の頂点を有し、リンクはデータ構造によって規定され、グラフ成分間のデータフローを表す、計算環境と、データ記憶域に結合され、1つ又は複数のデータ処理装置上にホストされるランタイム環境であって、データフローグラフ400(即ちグラフ成分を表す頂点及びその間のリンク)を規定する記憶済みのデータ構造を読み取り、実行時前モジュールによってデータフローグラフ400に指定されるグラフ成分の計算を実行するための計算資源を割り当て設定するように構成される実行時前モジュールを含み得る、ランタイム環境とを含むシステムによって実装され得る。ランタイム環境は、
図5A/Bの脈絡で記載する操作が実行されるように、指定された計算の実行をスケジュールし管理するための実行モジュールを更に含み得る。
【0066】
データフローグラフ400は、(
図4のサブスクライブ成分302に関して説明した機能を実行する)サブスクライブ成分402、及び(
図4の結合成分304に関して説明した機能を実行する)結合成分404を含む。データは結合成分404から正規化成分406に流れ、正規化成分406は、データを並列に処理するための一連の行範囲にファイルのコンテンツを分ける。例えばファイルはデータの行を含み、例えば各行はデータレコードを表す。正規化成分406は、それらの行を様々な行範囲(例えば行の部分集合)に指定する。行範囲は作業単位を表す。一例では、ファイルが1万行のトランザクションデータを有する。この例では、行1~1000が行範囲I(例えば第1の作業単位)に指定され、行1001~2000が行範囲II(例えば第2の作業単位)に指定され、その後も同様に続く。
【0067】
再フォーマット成分410及びマイクログラフ実行成分412のインスタンスを各作業単位に割り当てるために、データは正規化成分406から(分割成分306に関して説明した機能を実行する)分割成分408に流れる(例えば
図4の脈絡で説明したように、再フォーマット成分410は再フォーマット成分308a...308nの複数のインスタンスを含むことができ、マイクログラフ実行成分412はマイクログラフ実行成分310a...310nの複数の対応するインスタンスを含み得る)。先に説明したように、分割は、成分の様々なインスタンスにわたって現在アクティブなクエリを分けることを表す。この例では、各分割が行の異なる部分集合(又は作業単位)を処理する。分割成分408は、実行されるクエリ(例えば現在アクティブなクエリ)を各作業単位に割り当てる。例えば各作業単位について、実行されるクエリの総数が、その作業単位のための再フォーマット410及びマイクログラフ実行412の様々なインスタンスに割り当てられる。
【0068】
(作業単位ごとの)分割を示すデータが分割成分408から、データフローグラフ(例えばマイクログラフ200)内に入力するために作業単位内のデータを再フォーマットするための再フォーマット成分410のインスタンスに流れる。概して、再フォーマットプロセスは、データを或るフォーマットから別のフォーマットに変換するための一連の命令を含む。この例では、再フォーマット成分が作業単位を各マイクログラフによって読取可能なフォーマットに再フォーマットする。再フォーマットされたデータは、特定の作業単位に対してクエリを実行するための部分和を計算するマイクログラフ実行成分412のインスタンスに流れる。再フォーマット成分410は、再フォーマット成分308a~nに関して説明した機能を実装する。マイクログラフ実行成分412は、マイクログラフ実行成分310a~nに関して説明した機能を実装する。
図5Bに関して以下でより詳細に説明するように、マイクログラフ実行成分412の各インスタンスは特定の作業単位に対して特定のクエリを実行する。つまり、実行される「p」のクエリがある場合、各作業単位は「p」回処理される。作業単位は並列に処理される。各作業単位について、クエリは並列に処理される。概して、部分和とは、データの一部(例えばファイルや特定の作業単位の一部)に対するクエリの実行結果を示すデータである。各作業単位について、マイクログラフ実行成分412のインスタンスが現在アクティブなクエリごとに実行される。それを行うために、システム102はマイクログラフ実行成分412のpの異なるインスタンスを生成し、マイクログラフ実行成分412の各インスタンスは「p」の現在アクティブなクエリの1つのためのものである。
【0069】
分割成分408の一側面は、再フォーマット410及びマイクログラフ実行412のインスタンスを各作業単位に実際に割り当てる前に、分割成分408が前処理を行うことであり得る。前処理は、それぞれのインスタンス(例えばインスタンス1からp)に指定されるクエリのそれぞれ(例えばクエリ1からpのそれぞれ)を実行するのに必要である可能性が高い計算資源を明らかにすること、及びクエリのそれぞれを実行するための計算資源の明らかにした需要に従ってインスタンス間で計算資源を分散させることを含むことができ、関連するクエリ(例えばクエリ1)を実行するのにより多くの計算資源が必要になる可能性が高いと判定されるインスタンス(例えばインスタンス1)に対し、関連するクエリを実行するのにより少ない計算資源が必要になる可能性が高い(例えばクエリ2はクエリ1よりも少ない計算資源を必要とする)と判定されるインスタンス(例えばインスタンス2)よりも多くの計算資源が割り当てられる。加えて又は代わりに、前処理は、分割成分408によって受信される作業単位のデータフォーマットを明らかにすること、及び明らかにした作業単位のデータフォーマットに基づいて作業単位をインスタンスの1つに割り当てることを含む。例えば分割成分408は、作業単位を明らかにしたデータフォーマットからインスタンスのそれぞれによって、具体的にはマイクログラフのそれぞれによって要求されるデータフォーマットに変換するのに必要な計算資源及び/又は時間を求めることができ、作業単位をインスタンスに割り当てることができ、それにより、実行されるクエリを実行することが最少の計算資源及び/又は変換時間を必要とする。
【0070】
前処理は、データ処理速度を更に速めることができ、クエリの実行にかかる時間を更に短縮することができる。このことは、たとえ分散ネットワーク及び/又は大量のデータが関与してもデータセキュリティを確実にするために利用者、トランザクション、又はデータ片を非常に高速に認証しなければならないネットワーク(例えばクレジットカード処理、バンキング、又は飛行機旅行に関係する認証システム)内でも有益であり得る。
【0071】
データフローグラフ400は、特定の作業単位に対してクエリを実行するための部分和を作業単位のそれぞれについてまとめる収集成分414を含む。この例では、データ(例えば部分和を示すデータ)が収集成分414から、総和(global sum)を計算するマイクログラフ実行成分416に流れる。概して、総和はファイルに対してクエリを実行した(例えばファイルの全ての行範囲(作業単位)に対してクエリを実行した)最終結果を示すデータである。総和を計算するために、マイクログラフ実行成分416は、各作業単位に対するクエリの実行結果を集約する別のマイクログラフ(例えばマイクログラフ200)を実行する。一例では、クエリに関する総和(例えばそのクエリを全ての作業単位に対して実行した結果)を計算するためにマイクログラフ実行成分416の関連インスタンスを各クエリが有する。つまり、マイクログラフ実行成分416は、特定のクエリに関する部分和を(様々な作業単位にわたって)集約することによって(例えばその特定のクエリに関する)総和を計算する。総和を示すデータは、マイクログラフ実行成分416から総和(例えばファイルに対してクエリを実行した結果)を公開する公開成分418に流れる。公開成分418の機能は、公開成分314に関して先に説明した機能を含む。
【0072】
図5Bを参照し、
図500は
図5Aの成分406、408、410、412、及び414の実行結果の一例を示す。この例では、正規化成分406がファイルを「q」の作業単位、例えば作業単位502a...502qに分ける。この例では、ファイルに対して実行される「p」の現在アクティブなクエリもある。ファイルは、その後正規化成分406によって作業単位に分散されるデータを含む。先に説明したように、分割成分408が作業単位502a...502qのそれぞれに適用される。作業単位502a...502qのそれぞれに分割成分408を適用することは、作業単位ごとに「p」のクエリを(例えば再フォーマット成分410の関連する別のインスタンスに加えて)マイクログラフ実行成分412の「p」の異なるインスタンスにわたって分割する。この例では、分割成分408が、作業単位502aについてマイクログラフ実行成分412のインスタンス506a...506pを生成し、各インスタンスはクエリに対応する。分割成分408は、作業単位502qについてマイクログラフ実行成分412のインスタンス508a...508pを生成し、各インスタンスはクエリに対応する。マイクログラフ実行成分のインスタンス310a...310nは、マイクログラフ実行成分412のインスタンス506a...506pのために使用することができ、又はかかるインスタンス506a...506pと同一とすることができ、再フォーマット成分410のそれぞれのインスタンス308a...308nと通信し得る。或いは、マイクログラフ実行成分412の複数のインスタンスと共に単一の再フォーマット成分410を使用することができる。
【0073】
分割成分408は、マイクログラフに作業単位を転送する前に作業単位内のデータを再フォーマットするための、再フォーマット成分410のqの異なるインスタンスを作業単位ごとに生成することもできる。作業単位ごとにマイクログラフ実行成分412のインスタンスを実行した後、収集成分414が作業単位の部分結果を生成する。例えば、マイクログラフ実行成分412のインスタンス506a...506pを実行した後、収集成分414は作業単位502aの部分結果510aを生成する。部分結果510aは、作業単位502a内のデータに対してクエリ1...pを実行した結果を含む。マイクログラフ実行成分412のインスタンス508a...508pを実行した後、収集成分414は作業単位502qの部分結果510qを生成する。部分結果510qは、作業単位502q内のデータに対してクエリ1...pを実行した結果を含む。収集成分414は、部分結果510a...510qをマイクログラフ実行成分416に伝送し、マイクログラフ実行成分416はファイル内の全ての作業単位に対して各クエリを実行するために総和を計算する。
【0074】
本明細書に記載のデータフローグラフ(及びマイクログラフ)は、例えば誤り事象から回復可能である。回復性を確実にするために、(データフローグラフ又はマイクログラフ内の)成分がチェックポインティングによってローカル状態を保持する。ローカル状態は、処理が生じたデータストリーム内の位置、例えばデータストリーム内のどの箇所まで処理が生じたのかを規定する。ローカル状態は、その箇所までの処理結果も規定する。一例では、ファイルが一連の作業単位へと構成される。つまり、ファイル内に含まれるデータレコードが一連の作業単位へと構成される。各作業単位は、指定された識別情報(ID)を有する。データフローグラフが作業単位の処理を開始するとき、データフローグラフの1つ又は複数の成分がIDを記憶して、作業単位のどれが処理されているのかを規定する。成分はチェックポインティングも行い、作業単位に対して(成分によって規定される)動作を行った結果を記憶する。この結果はIDに関連して記憶される。チェックポインティングは、ストリーム内のどのデータが既に処理されているのか及びそのデータを処理した結果を規定するために、データストリーム内にマーカを効果的に挿入する。チェックポインティングによるこの回復性により、データフローグラフ又はマイクログラフがクラッシュし又は他の方法で誤りに遭遇した場合、データフローグラフ又はマイクログラフは、どの単位まで既に処理しているのかを突き止め、(例えばそのストリームを再び処理し始めなければならないのではなく)その作業単位から処理を続行することによって回復することができる。
【0075】
一例では、システム102がファイルをディスク内、ディスク上、及び/又はメモリキャッシュ内に保持する(しかし例えばファイルをデータリポジトリ内には記憶しない)。この例では、クエリワーカエンジンが、ファイルに対するクエリオブジェクトの処理をクエリワーカエンジンが完了したというメッセージをクエリドライバに送信する。ファイルを処理している全てのクエリワーカエンジンからクエリドライバがそのメッセージを受信すると、そのファイルはアーカイブされ且つ/又はそのファイルはキャッシュ及び/又はディスクから消去される。この例では、ファイルをアーカイブすることは、ファイルがデータリポジトリ内に記憶されることをもたらさない。
【0076】
図6を参照し、システム102(又はシステム102上のRTTT103)は、リアルタイムデータストリーム内の様々な時点において登場するデータ項目に対して実行するためのクエリを選択する際にプロセス600を実装する。動作面では、システム102は、データ項目のそれぞれに対してリアルタイムでストリームのデータ項目にアクセスする(602)。例えばシステム102は、データ待ち行列、(例えばシステム102の内部の又はシステム102の外部の)データリポジトリ、又はデータフィード(例えば
図1のリアルタイムデータストリーム104)からリアルタイムデータストリームを受信することによってデータ項目にアクセスする。一例では、例えば或るデータ項目がストリーム内の別のデータ項目の前に生じることにより、2つ以上のデータ項目のそれぞれがストリーム内の様々な場所に位置する状態で、システム102が2つ以上のデータ項目のそれぞれに対してほぼリアルタイムで2つ以上のデータ項目にアクセスする。
【0077】
システム102は、例えばデータ項目のコンテンツを分析することによってデータ項目の属性、例えば受信データ項目のデータタイプやフォーマットを明らかにする(604)。システム102は、リアルタイムデータストリームに対して実行するための候補である既定のクエリに管理リポジトリ内でアクセスする。システム102は、実行候補である様々なクエリのためのクエリ基準に対して属性を比較する(606)。その比較に基づき、システム102は、様々な時点において登場する且つ/又はストリーム内の様々な場所に位置するデータ項目の2つ以上に対して実行するためのクエリを選択する(608)。例えばシステム102は、データ項目の属性の1つ又は複数によって満たされるクエリ基準を有するクエリを選択する。システム102は更に、例えばクエリに関連するデータ項目が受信されるときに基づき、様々な時点において(及び/又はデータ項目がストリームの様々な部分に登場するに関して)クエリを選択する。
【0078】
改変形態では、システム102は、データ項目の1つ又は複数の属性に基づき、ストリーム内の様々な時点において登場するデータ項目の2つ以上に対して実行するための別のクエリも選択する。システム102は、選択したこれらのクエリの両方をストリームのデータ項目に対してリアルタイムで実行する。更に別の改変形態では、システム102は、例えばクエリのユーザ規定開始時間に基づき、その時点のためのアクティブクエリワーカエンジンを選択することによってクエリのどれを実行するのかを決定する。先に説明したように、クエリワーカエンジンはクエリの開始時間においてアクティブになるようにプログラムされる。システム102(又はクエリドライバ)は、現在の作業単位に対して実行される全てのクエリについて、クエリワーカエンジンの1つのインスタンスを呼び出す。
【0079】
図7を参照し、システム102(又はシステム102上のRTTT103)は、クエリが(例えばその後登場するデータ項目に対して)実行され続けるとき、クエリの(例えばほぼリアルタイムの)中間結果を与えるためにリアルタイムデータストリーム内の様々な時点において登場するデータ項目に対してクエリを実行する際にプロセス700を実装する。動作面では、システム102は、ストリーム内の様々な時点において登場するデータ項目の2つ以上に対してクエリを時々実行する(702)。例えばシステム102は、(i)リアルタイムデータストリーム内の第1のデータ項目(第1のデータ項目は第1の時点において受信される)、及び(ii)リアルタイムデータストリーム内の第2のデータ項目(第2のデータ項目は第2の時点において受信される)に対してクエリを実行する。
【0080】
システム102は、クエリを実装する上記のデータフローグラフを断続的に(又は周期的に)実行することによってクエリを実行する。この例では、データフローグラフがクエリを実装するための実行可能コンピュータコードを含む。クエリを実行することに基づき、システム102が最初の結果、例えばクエリの実行結果を示す情報を生成する(704)。システム102は、クエリが後の時点において実行されるかどうかを判定する(706)。例えばシステム102は、クエリ仕様内のクエリ停止時間に基づいてこの判定を行う。クエリが後の時点において実行されないとシステム102が判定する場合、システム102は、最初のクエリ実行結果を最終結果であるように設定する(708)。クエリが後の時点において実行されるとシステム102が判定する場合、システム102はクエリを再実行する(710)。クエリの再実行に基づき、システム102は、再実行結果をリアルタイムデータストリーム内で過去に登場したデータ項目に対してクエリを実行した過去の結果(例えば最初の結果)と集約することによって中間結果を生成する(712)。一例では、クエリが実行されているとき、例えばその後の結果と後で集約される中間結果をシステム102が生成する。この例では、例えばどのカード又はトランザクションが危険にさらされているのかを明らかにするために、利用者(例えばビジネスアナリスト)が中間結果を表示して見直したい可能性がある。この例では、クエリの実行が完了する前に、システム102がクエリ実行の中間結果を利用者のクライアント装置に伝送する。
【0081】
システム102は、クエリが後の時点において実行されるかどうかを判定する(714)。クエリが後の時点において実行されないとシステム102が判定する場合、システム102は、クエリ実行の中間結果を最終結果であるように設定する(716)。クエリが後の時点において実行されるとシステム102が判定する場合、システム102は必要に応じて動作710、712、714、716を繰り返す。これらの動作を繰り返すことに基づき、システム102は、後の時点においてクエリを実行することに関する結果と中間結果とを(後の時点において)集約し、例えば最終結果を生成する。この例では、システム102が最終結果をデータリポジトリ内に記憶し、中間結果を破棄する。最終結果(又は中間結果)に基づき、システム102は既定条件の検出を利用者に知らせるためのリアルタイムの警告を生成する。
【0082】
本明細書に記載の技法を使用し、データが受信されるとき、及びデータベースの記憶済みのデータにアクセスする(待ち時間を増やす)ことなしに、RTTTはリアルタイムデータストリーム内のデータ項目に対して同時クエリを実行する。データの受信時にリアルタイムでクエリを実行することにより、RTTTはクエリが実行されるとき、クエリ実行のリアルタイムの結果(例えば中間結果及び最終結果の両方)を生成する。結果を受信するために、利用者は全てのデータが受信されるのを待つ必要がない。むしろ利用者は、クエリが実行されているときにリアルタイムで結果を受信することができる。
【0083】
加えて、将来の既定のモニタリング期間にわたってユーザ定義クエリが実行される。データはモニタリング期間中に継続的に到着し、結果を生成する際にモニタリング期間中の入力データが利用される。静的データに対する一時クエリの従来のデータベースプロセスモデルではなく、RTTTは一時データに対する静的クエリを実装する。クエリは利用者によって事前に作成され、それらのクエリはモニタリングの開始時間までシステム内で休止状態にある。利用者は簡単なインタフェースを使用して、必要な属性、フィルタリング、集約、ソート基準、開始/停止時間等のクエリ制御パラメータ、任意選択的な警告条件、結果受信者リスト等のクエリ術語を規定する。クエリは連続したデータフィード(例えばメッセージ待ち行列やポート上のメッセージ)を「リスン」し、モニタリングの開始時間に「起動」し、ストリーム内のデータに対して計算を行い、ストリーム内にデータがない場合はスリープする。中間結果はクエリの「寿命」の全体を通して入手可能であり、最終結果はクエリのモニタリング期間の終了時に直ちに入手可能である。
【0084】
図8を参照し、
図800は、例えば
図5Aの脈絡で説明したデータフローグラフの基礎を成すシステムにより、(例えば5つの異なるマイクログラフ、例えばマイクログラフ200によって実行される)5つの同時クエリによってファイル内のデータレコードを処理することを概念的に表示する。この例では、RTTT103は(ひいてはリアルタイムデータストリーム801内に含まれる)ファイル802a...802nを周期的に受信する。RTTT103は、ファイル802a...802nを時間間隔T
1...T
nのそれぞれにおいて受信する。この例では、ファイル802a...802nのそれぞれがストリーム801内の様々な場所に位置する。例えばファイル802aは、ファイル802bを含むストリーム801内の場所(例えば部分)の前に来る、ストリーム801内の別の場所(例えばストリーム801の特定の部分)に位置する。つまり、ストリーム801の一部はファイル802aを含み、別の部分はファイル802bを含み、その後も同様に続く。
図8に示す説明のための例は、クエリ806、808、810、812、814がファイル802a...802nに対して実行される特定の時点を示す。つまり、ファイル802a...802nは特定の時点(例えばクエリ806、808、810、812、814が同時に実行されている時点)の間に受信されるストリーム801内のファイルを表す。この例では、クエリ806、808、810、812、814の1つ又は複数が異なる時間間隔に対して実行されるので、クエリ806、808、810、812、814は
図8に示していない(ストリーム801内に含まれる)他のファイルに対しても実行され得る。この例では、最終結果を決定する際、それらの他のファイルに対する実行結果を使用することができる。
【0085】
この例では、RTTT103が時刻08:00:30においてファイル802aを、時刻08:01:00においてファイル802bを、その後も同様にファイルを受信する。RTTT103は30秒ごとに新たなファイルを受信する。ファイル802はレコード804a...804nを含む。この例では、ファイル802内に250,000個のレコードがある。この例では各レコードが以下のタイプのデータ、つまり日付(dd/mmm/yyyy)、時間(hh:mm:ss)、製品識別情報(「prod id.」)、国識別情報(「country id.」)、州識別情報「(state id.)」、及び売上高を含む。他のファイル(例えばファイル802b...802n)も個々のデータレコードを含む。
【0086】
この例では、運動靴の会社に(例えば新たなマーケティングキャンペーンのリリース後の)スニーカの売上高を見たい、且つ例えばマーケティングキャンペーンの直後やその間のスニーカ販売の上昇(例えば増加)量がどれ位か等、質問を動的に、例えばリアルタイムで生成する経営者がいる。
【0087】
この例では、経営者がRTTT103を使用してクエリ806、808、810、812、814を作成し、ファイル802a...802nに対して実行する。この例では、クエリ806、808、810、812、814が様々な期間にわたって実行され且つ/又は様々な時点において実行を開始するので、クエリ806、808、810、812、814のそれぞれは、ファイルが受信されるとき及びクエリの実行が開始し停止するときに応じてファイル802a...802nの一部しか処理することができない。
【0088】
この例では、運動靴の会社が2つの異なる運動靴のブランド、Acmeスニーカとcool runningスニーカに対して2つの世界的なキャンペーンを立ち上げている。Acmeスニーカのキャンペーンは、2014年11月14日(14/NOV/2014)の08:00:00(キャンペーンが立ち上げられる各国の現地時間)に立ち上げられる。cool runningスニーカのキャンペーンは、2014年11月14日(14/NOV/2014)の13:00:00(キャンペーンが立ち上げられる各国の現地時間)に立ち上げられる。クエリ806、808、810、812、814のそれぞれは、「DD/MM/YYYYから始まるN時間の期間にわたる国Y(又は国内の特定の州)での製品Xの総売上高及び/又はトランザクションカウントを表示せよ」のフォーマットに概して従う。この例では、クエリ806は、14/Nov/2014の08:00:00から10時間の期間にわたってSingaporeで売れたAcmeスニーカのトランザクション数(Tx)をカウントするためのクエリである。クエリ808は、14/Nov/2014の08:00:00から10時間の期間にわたってGeorgia, USAで売れたAcmeスニーカのトランザクション数(Tx)をカウントするためのクエリである。この例では、クエリ808が国全体ではなく特定の州に関する基準値を対象とするので、クエリ808の方が細粒度である、クエリ806。クエリ810は、14/Nov/2014の08:00:00から10時間の期間にわたって米国で売れたAcmeスニーカの総売上高をカウントするためのクエリである。クエリ812は、14/Nov/2014の13:00:00から24時間の期間にわたって日本で売れたcool runningスニーカの総売上高をカウントするためのクエリである。クエリ814は、14/Nov/2014の13:00:00から24時間の期間にわたって米国で売れたcool runningスニーカの総売上高及びトランザクション数をカウントするためのクエリである。
【0089】
本明細書に記載の技法を使用し、RTTT103は、電子データウェアハウスにレコードを記憶することなしに、レコード(例えばファイル802aのレコード804a...804n及びファイル802b...802n内のレコード)をクエリ806、808、810、812、814に同時に、例えばリアルタイム/ほぼリアルタイムで通す。クエリ806、808、810、812、814がレコード(例えば804a...804n)を処理すると、RTTT103は結果816、818、820、822、824をそれぞれ生成し、クエリが処理されているときクエリ実行の実時間の結果を与える。この例では、RTTT103が毎分約500,000個のレコードを処理し、毎分複数のファイルを受信する。この例では、RTTT103がクエリ806、808、810、812、814を継続的に実行し、ファイル802a...802nが受信されるときファイル802a...802nを例えばほぼリアルタイムで処理する。例えば時刻08:00:00において、クエリ806、808、810、812、814がファイル802aに対して実行される。時刻08:00:30において、クエリ806、808、810、812、814がファイル802bに対して実行され、(例えばhatファイルが30秒ごとに受信される場合は)その後も同様に続く。
【0090】
クエリ806を実行することに基づき、RTTTは(例えばデータがファイルとして周期的に受信される場合)新たな入力データファイルを処理した後で毎回中間(増分)結果を生成する。この例では、クエリ条件に一致するレコードがある場合、現在の1組の入力データが処理されるや否や中間結果が作り出される。ファイルは30秒ごとに到着し、08:00:00に開始するクエリ806、808、及び810について中間結果が08:00:30、08:01:00等々において作り出され又は更新される。この例では、それらのクエリのための最初のデータファイルが到着するとき8:00:00の時点で少なくとも1足のAcmeの靴がSingaporeとGeorgiaで直ぐに売れている。販売がない場合、それらの場所で最初の1足が売れるとき8AM以降の任意の時点において出力が作り出される。
【0091】
この例では、RTTT103がSingaporeでのAcmeの靴に関するトランザクション数を表示する結果816を生成する。この例では、結果816が中間(例えば部分)結果816a、816b、及び最終結果816cを含む。中間結果816a、816bによって示すように、最初の1足のAcmeの靴はSingaporeで08:00:00から08:00:30の間に売れており、第2の1足のAcmeの靴はSingaporeで08:00:30から08:01:00の間にそれぞれ売れている。この例では、RTTTがクエリ基準に一致するレコードを検出するとき中間結果が(リアルタイムで)更新される。この例では、中間結果816a、816bは、例えば08:00:30、08:01:00等々において中間結果が作り出される時間を表示する。この例では、中間結果はトランザクションが生じた時間(又は増分若しくは追加のトランザクションが生じた時間)を表示する。
【0092】
この例では、表示される最終結果のそれぞれは、クエリが実行を開始したときからの集約済みの結果である。例えば、18:00:00に関して示す最終結果816c(例えば157,692個のトランザクション)は08:00:00から18:00:00までのトランザクション数である。この例では、18:00:00に示す結果は複数のファイルを処理した結果である。これらの結果のそれぞれは、RTTT103によってファイルが受信されるとき生で、ほぼリアルタイムで提供される。本明細書に記載の技法を使用し、クエリがデータに対してリアルタイムで且つデータの受信時に作用するので、データの記憶はない。クエリは、履歴データではなく将来到着するデータに作用するので将来的なものである。クエリは数秒から数週間又は数カ月に至る持続時間にわたって実行されるように設定され得る。RTTTは、モニタリング期間中に利用者が中間結果を受信する能力も与える。データは1回読み取られ、個々のクエリロジックを独立に適用するクエリワーカに分散される。例えばシステムは、システム内で同時にアクティブな何百ものクエリワーカを含み得る。事業体に送られる情報の待ち時間は数秒程度である。
【0093】
図9を参照し、
図900は2015年11月14日の8amから2015年11月15日8amまでの24時間の期間にわたり複数のクエリを動的に実行することの視覚的な説明図を示す。クエリ902、904は、2015年11月14日の8amから開始して10時間にわたる実行が予定されている。クエリ906は、同じく2015年11月14日の8amから開始して24時間にわたる実行が予定されている。8amにおいて(又は8amより前の予め規定された時間間隔において)、クエリドライバ108(
図1)がアクティブクエリを求めて管理リポジトリ112をポーリングする。ポーリングに基づき、クエリドライバ108が8amに実行が予定されているものとしてクエリ902、904、906を識別し、クエリ902、904、906を実行するためにクエリワーカエンジンをインスタンス化する。クエリ902、904、906は、ほぼリアルタイムのデータストリーム911に対して実行される。
【0094】
この例では、クエリ908が、2015年11月14日の1pmから開始し、2015年11月14日の11pmに終了する10時間にわたる実行が予定されている。クエリ910は、2015年11月14日の1pmから開始して翌日(2014年11月15日)の1pmに終了する24時間にわたる実行が予定されている。管理リポジトリ112の断続的なポーリングの間、クエリドライバ108は実行のためのアクティブクエリとしてクエリ908、910を識別し、1pmにおいてクエリ908、910の実行を開始させる一方、クエリ902、904、906は依然として実行されている。この例では、クエリ908、910が、既に実行されている他のクエリ(即ちクエリ902、904、906)と同時に実行されるように動的に追加される。6pmにおいて、クエリ902、904が実行を完了する一方、クエリ906、908、910は実行を続ける。11pmにおいて、クエリ908が実行を完了する一方、クエリ906、910は実行を続ける。翌日の8amにおいて、クエリ906が実行を完了するのに対し、クエリ910はその実行を続ける。
【0095】
図9は、24時間(2014年11月14日の8amから2014年11月15日の8amまで)の期間中にほぼリアルタイムのデータストリーム911内でRTTT103によって受信されたファイルであるファイル912a...912n、914a...914n、916a...916n、918a...918nも示す。この例では、RTTT103がファイル912a...912nを8am~1pmまでに、ファイル914a...914nを1pm~6pmまでに、ファイル916a...916nを6pm~11pmまでに、ファイル918a...918nを11pm~翌日の8amまでに受信する。この例では、ほぼリアルタイムのデータストリーム911内に含まれるファイルが、例えば30秒ごとを含む様々な時間間隔においてRTTT103によって受信される。ファイル912a...912n、914a...914n、916a...916n、918a...918nに対して(それらのファイルのそれぞれが受信されるとき)適切なクエリが実行され、ファイル912a...912n、914a...914n、916a...916n、918a...918nを処理することに基づいてそれらのクエリの中間(又は最終)結果が更新される。クエリ902、904、906、908、910は、クエリの開始時間及び停止時間に応じてファイル912a...912n、914a...914n、916a...916n、918a...918nの様々な組合せに対して実行される。
【0096】
この例では、RTTT103がファイル912a...912n、914a...914nを8am~6pmの間に受信する。クエリ902、904は、ファイル912a...912n、914a...914nのそれぞれが受信されるときファイル912a...912n、914a...914nをほぼリアルタイムで処理し、クエリ902、904を実行することに関する中間結果及び最終結果を生成する。
【0097】
RTTT103は、8am(11/14/2014)~8am(11/15/2014)の間の24時間の期間中にファイル912a...912n、914a...914n、916a...916n、918a...918nを受信する。クエリ906は、ファイル912a...912n、914a...914n、916a...916n、918a...918nのそれぞれが受信されるときファイル912a...912n、914a...914n、916a...916n、918a...918nをほぼリアルタイムで処理し、クエリ906を実行することに関する中間結果及び最終結果を生成する。RTTT103はファイル914a...914n、916a...916nを1pm~11pmの間の10時間の期間中に受信する。クエリ908は、ファイル914a...914n、916a...916nのそれぞれが受信されるときファイル914a...914n、916a...916nをほぼリアルタイムで処理し、クエリ908を実行することに関する中間結果及び最終結果を生成する。RTTT103はファイル914a...914n、916a...916n、918a...918nを1pm~翌日の8amの間に受信する。クエリ910は、2014年11月14日の1pmから開始して24時間実行されることが予定されている。クエリ910は、ファイル914a...914n、916a...916n、918a...918nのそれぞれが受信されるときファイル914a...914n、916a...916n、918a...918nをほぼリアルタイムで処理し、クエリ910を実行することに関する中間結果を生成する。クエリ910は、クエリ910が完了するまで(11/15/2015の)8am以降に受信される(不図示の)他のファイルを処理し続ける。
【0098】
一例では、データ処理環境が、頂点間の(作業要素、即ちデータの流れを表す)有向辺によって接続される(データ処理成分又はデータセットを表す)頂点を含むデータフローグラフとしてクエリを開発するための環境を含む。
【0099】
概略
図10Aは、主要素の相互関係を示す本発明の一実施形態のブロック図である。グラフィック開発環境(GDE)1002は、実行可能グラフを作成し、グラフ成分のパラメータを定めるためのユーザインタフェースを提供する。GDEは、例えば本発明の譲受人から入手可能なCO>OPERATING SYSTEM(登録商標)のGDEとすることができる。GDE1002は、リポジトリ1004及び並列オペレーティングシステム1006と通信する。リポジトリ1004及び並列オペレーティングシステム1006に更に結合されるのは、ウェブインタフェース1008及び実行部1010である。
【0100】
リポジトリ1004は、好ましくはグラフベースのアプリケーションの開発及び実行、並びにグラフベースのアプリケーションと他のシステム(例えば他のオペレーティングシステム)との間のメタデータの交換を支援するように設計される拡張可能なオブジェクト指向データベースシステムである。リポジトリ1004は、(これだけに限定されないが)ドキュメンテーション、レコードフォーマット、変換関数、グラフ、ジョブ、及びモニタリング情報を含むあらゆる種類のメタデータのための記憶システムである。リポジトリは当技術分野で知られており、例えば米国特許第5,930,794号、同第6,032,158号、同第6,038,558号、及び同第6,044,374号を参照されたい。
【0101】
並列オペレーティングシステム1006は、GDE1002内で生成されるデータフローグラフの表現を受け付け、そのグラフによって定義される処理ロジック及び資源に対応するコンピュータ命令を生成する。次いで、並列オペレーティングシステム1006は、典型的にはそれらの命令を(同種でなくても良い)複数個のプロセッサ上で実行する。適切な並列オペレーティングシステムは、本発明の譲受人から入手可能なCO>OPERATING SYSTEM(登録商標)である。
【0102】
ウェブインタフェース1008は、リポジトリ1004のコンテンツのウェブブラウザによるビューを提供する。ウェブインタフェース1008を使用し、利用者はオブジェクトの閲覧、新たなオブジェクトの作成、既存のオブジェクトの変更、アプリケーションパラメータの規定、ジョブのスケジューリング等を行うことができる。ウェブインタフェース1008は、グラフのランタイムパラメータに関してリポジトリ1004内に記憶された情報に基づき、パラメータ化グラフのためのフォームベースのユーザインタフェースを自動で作成する。
【0103】
実行部1010は、ウェブインタフェース1008によってアクセスされる任意選択的なリポジトリベースのジョブスケジューリングシステムである。実行部1010は、ジョブ及びジョブ待ち行列をリポジトリ1004内のオブジェクトとして保持し、ウェブインタフェース1008がジョブ及びジョブ待ち行列のビューを提供し、その操作を助ける。
【0104】
図10Bは、入力データセット1022がフロー1024によってフィルタ成分1026に接続されている、簡単なデータフローグラフ1020を示す。フィルタ成分1026は、フロー1028によって出力データセット1030に接続される。データセットは、例えばデータフローグラフによって実行される計算のためにデータ(例えば入力データセット)を提供し又はデータ(例えば出力データセット)を受信するファイルやデータベーステーブルを含み得る。
【0105】
データフローグラフ内の「フロー」によって表されるデータフローは、離散的なデータ要素へと編成することができる。例えばそれらの要素は、レコード(又は行)及びフィールド(又は列)へと編成されるデータセットからのレコードを含み得る。フィールドのシーケンス及びレコード内の値に対応するデータタイプを記述するメタデータは「レコードフォーマット」と呼ばれる。
【0106】
グラフ内の成分及びデータセットは、フローに接続するための入力/出力ポートを有する。フロー1024及び1028の「ソース端」は、入力データセット1022の出力ポート及びフィルタ成分1026の出力ポートのそれぞれとインタフェースする。フロー1024及び1028の「シンク端」は、フィルタ成分1026の入力ポート及び出力データセット1030の入力ポートのそれぞれとインタフェースする。データセット又は成分の入力ポート又は出力ポートは、ポートの内外に流れるデータのためのレコードフォーマット等のメタデータに関連する。
【0107】
ポートのレコードフォーマット又は成分に関連する他のメタデータを含むパラメータは、パラメータスコーピングのための規則に従って値にバインドされる。パラメータは、設計時に又はランタイム時(即ち以下に記載の「ランタイムパラメータ」)に値にバインドされ得る。パラメータの値は、例えばユーザインタフェース上で(例えばプロンプトに応答して)利用者によって定義され、ファイルから定義され、又は同じコンテキスト若しくは異なるコンテキスト内の別のパラメータに関して定義され得る。例えば、別のパラメータに対する「~と同じ(same as)」関係を有するようにパラメータを指定することにより、パラメータを異なるコンテキストからエクスポートすることができる(例えば異なる成分のコンテキストで評価されるパラメータ)。
【0108】
グラフ内で使用される成分は、「下位グラフ」を形成するフローによって相互接続される他の成分を使用して実装することができる。別のグラフ内の成分として下位グラフを使用する前に、成分の入力及び/又は出力ポート等、成分の様々な特性を定義する。一部の事例では、下位グラフの成分間の関係に関与する成分の特性は、グラフ内でその成分が使用される前に規定されるべきである。例えば、下位グラフの成分のランタイムパラメータに関するプロンプティングオーダを選択する必要があり得る。グラフ内の成分のランタイムパラメータに関するプロンプティングオーダを選択するための手法について以下でより詳細に説明する。
【0109】
メタデータの伝搬
レコードフォーマットパラメータ等、ポートに関連するメタデータの値は「伝搬」によって得ることができる。メタデータの伝搬は「外部的に」又は「内部的に」に生じ得る。外部的なメタデータの伝搬では、第1の成分のポートに関するレコードフォーマットパラメータの値は、フローによって第1の成分に接続される第2の成分のポートに関するレコードフォーマット値を伝搬することによって値を得ることができる。値は、フローのソース端からシンク端へと下流に、又はフローのシンク端からソース端へと上流に伝搬し得る。メタデータは、定義されたメタデータを有するポートから定義されたメタデータを有さないポートに伝搬する。
【0110】
内部的なメタデータの伝搬では、成分の1つのポートに対して定義されるメタデータが、成分を実装する下位グラフに基づいてその成分の別のポートに伝搬する。一部の事例では、内部的なメタデータの伝搬が「非変換」内部データパス上で行われる。例えば利用者は、ソート成分に流れ込むレコードのデータタイプを規定するメタデータをソート成分の入力ポートに提供し得る。ソート成分はレコードを再順序付けするが変換はしないので、データタイプはソート成分によって変更されず、ソート成分の出力ポートに変更されずに伝搬し、ソート成分から流れ出るレコードのデータタイプを正確に記述する。
【0111】
一部の成分は、自らを流れるデータを変換(又は任意選択的に変換)する。例えば利用者は、フィルタ成分に流れ込むレコードのフィールドを規定するメタデータをフィルタ成分の入力ポートに提供し得る。フィルタ成分は、各レコードから所与のフィールドの値を削除することができる。フィルタ成分の出力ポートに関するメタデータが、成分のフィルタ動作による入力ポートのメタデータに関係することを規定するために、メタデータの定義を使用することができる。例えば、レコードフィールドを規定するメタデータからフィルタ済みのフィールドを削除することができる。かかるメタデータの定義は、入力ポートのメタデータが分かる前にさえ供給され得る。従って以下でより詳細に説明するように、或るポートに関連するメタデータを別のポートのためのメタデータを含む1つ又は複数のパラメータに応じて規定できるようにすることにより、メタデータは変換内部データパス上でさえ伝搬し得る。
【0112】
内部的なメタデータの伝搬及び外部的なメタデータの伝搬は、グラフが構築されている設計時に生じるように任意選択的に構成することができ、利用者はグラフ内の一部の成分の一部のポートに関するメタデータを供給する。或いはメタデータの伝搬は、ランタイム時又はランタイム直前を含むグラフの構築後に生じ得る。
【0113】
ランタイムパラメータ
ランタイムパラメータは、アプリケーションビルダがパラメータ設定(例えばソート機能、ファイル名称、レコードフォーマット、変換関数等の主要パラメータ)の値をランタイム(例えばコンピュータシステム上でプログラムが実行される又は近々実行される時点)まで保留することを可能にする。ランタイムパラメータの値は、エンドユーザによって供給され又は他のランタイムパラメータ若しくはオブジェクトリポジトリ内に記憶されるオブジェクトの組合せから導出され得る。
【0114】
ランタイムパラメータは、アプリケーションに一定量の柔軟性を加える。更なる柔軟性は、要求に応じてメタデータを計算するためのパラメータ(データフォーマット又はタイプ、及びプログラムロジック又は変換)を使用することによって実現される。タイプ及び変換は、他のタイプ及び変換、利用者が供給するパラメータ値、及び(例えばリポジトリからの)記憶済みのオブジェクトから合成して作ることができる。このことは、任意の種類の入力データに作用する、又はその構造がランタイムパラメータ値によって直接若しくは間接的に制御される一連の変換によってデータを作り出す、「汎用」アプリケーションを構築できるようにする。
【0115】
一部の実装形態では、ランタイムパラメータを作成し又は編集するとき、開発者はパラメータごとのプロンプト及びプロンプトを表示するための条件を規定することができる。条件が満たされる場合、システムはパラメータ値を受け付けるためのグラフィカルユーザインタフェース(GUI)コントロールを提示するようにプロンプティング指令を解釈する。
【0116】
ランタイムパラメータの指定
ランタイムパラメータは、グラフの実行時(即ちランタイム)における外部入力に基づいて開発者がグラフの挙動を修正するためのメカニズムを提供する。好ましい実施形態では、それらの外部値は利用者が直接入力することによって与えられる。但し、それらの外部値は、環境変数やコマンドラインパラメータを含む幾つかの異なる情報源から来る場合もある。GDE1002は、これらの状況の全てを扱うための並びにグラフがGDEから直接実行される場合は開発者に試験値を促すための正しいコードを生成する。ランタイムパラメータを使用し、開発者は例えば、入力ファイルのパスが特定の名称を有する環境変数によって提供されることを明確に宣言することができ、その環境変数はグラフのインタフェースの既知の部分になる。従って、かかるパラメータに対する明確に定義されたインタフェースがある。例えば特定のグラフの実行を制御する1組のパラメータを見つけるために、生成済みのシェルスクリプトを読み取り、環境変数及びコマンドライン引数に対する参照のためにそのシェルスクリプトを検索する必要はない。
【0117】
図11は、指定のランタイムパラメータを有する、ロールアップ成分2002及びソート成分2004を有する典型的なグラフ2000のブロック図である。入力用のインタフェース2006内で、ランタイムパラメータ(ソート成分2004のためのキー及びロールアップ成分2002のための規則)が利用者に提示される。以下の節では、ランタイムパラメータをどのように指定するのか、及びユーザ入力を促すランタイムパラメータの提示用の統合ユーザインタフェースをどのように作成するのかについて説明する。
【0118】
ランタイムパラメータは、幾つかのやり方で指定され又は定義され得る。1つのやり方は、GDE1002内で表示されるランタイムパラメータグリッドを使用することによる。
【0119】
図12は、グラフに関連付けられるランタイムパラメータグリッド3000を表すグラフィカルダイヤログの一実施形態の図である。適切なフィールドを単純に埋めることによって新たなランタイムパラメータが作成される。各ランタイムパラメータに関連するオブジェクトがリポジトリ1004内に作成され、パラメータを利用する全てのグラフ成分にリンクされる。例えば、グラフソート成分のためのソートキーがランタイムパラメータとして定義される場合、ソートキーのパラメータを表すオブジェクトがリポジトリ1004内に記憶され、関連するソート成分にリンクされる。ランタイムパラメータを定める代わりのやり方は、グラフ成分の既存のパラメータに特別にフラグを立て、それを他の成分に対して「可視化」する(エクスポートする)ことである。これらの方法の組合せを使用しても良い。例えば、成分を作成するとき、開発者はランタイムパラメータとしてその成分の特定のパラメータを指定することができる。開発者は、グラフに関するランタイムパラメータ全てのデフォルト値及び他の特性を設定し、新たなランタイムパラメータを定めるためにパラメータグリッドを使用することができる。
【0120】
グラフが実行されるとき、ユーザ入力から又は外部のプログラム源(例えばコマンドラインパラメータや環境変数)から各パラメータの値を得るためにパラメータが処理される。図示の実施形態では、ランタイムパラメータグリッド3000が以下のフィールドを含む。
【0121】
Name(名称)3002-このフィールドはランタイムパラメータの名称を含む。名称について示す一例は「Score_threshold」である。
【0122】
Type(タイプ)3004-このフィールドはランタイムパラメータ内で許可される値のタイプを含む。タイプについて示す一例は「整数」である。図示の実施形態でサポートされるタイプは以下の通りである。
・ブール-値は真又は偽であり得る
・選択-値は値一覧のうちの1つである
・コレータ-主要パラメータ値
・データセット-外部のデータファイルの名称及び位置
・日付-日付値
・式-算術式、論理式、及び/又は条件式(例えば選択式)
・浮動小数-浮動小数点数
・整数-整数値
・レイアウト-並列レイアウト又は直列レイアウトの定義
・レコードフォーマット-レコード記述又はレコード記述を含むファイル
・文字列-任意の文字列
・変換-変換記述又は変換記述を含むファイル
【0123】
Location(Loc)(位置)3006-このフィールドはレコードフォーマット及び変換のタイプと共に使用される。このフィールドは、タイプフィールド3004がファイルの位置を記述するかどうか又は埋込記述を含むかどうかを規定する。サポートされる位置は以下の通りである。
・埋込-パラメータがレコード記述又は変換記述を含む。
・ホスト-パラメータがホストマシン上のファイルへの参照を含む。
・ローカル-パラメータがローカルマシン上のファイルへの参照を含む。
・リポジトリ-パラメータが参照を含む、リポジトリ変換又はレコードフォーマット。
【0124】
Default Value(デフォルト値)3008-このフィールドは、(1)外部のプログラム源から他の値が提供されない場合に使用されるランタイムパラメータのデフォルト値、又は(2)ユーザ入力からランタイム値をどのように導出するのか若しくはグラフを実行する利用者からその情報をどのように対話式に得るのかを記述する規則又は式を含む。後者の場合、利用者が入力値を与えない場合にランタイムパラメータに値を与えるために、第2のデフォルト値のフィールド(不図示)を使用することができる。「ブール」及び「選択」のタイプでは、このフィールドは利用者を有効な選択肢に限定する。「レイアウト」のタイプでは、このフィールドは読み取り専用であり、現在定められているレイアウトの定義を表示する。他の全てのタイプでは、このフィールドは好ましくは利用者が有効な文字列を入力することができる簡単なテキストエディタである。
【0125】
Edit(編集)3010-パラメータ行内の編集空間3010(又はアイコン、例えば鉛筆アイコン)をクリックすると、デフォルト値のフィールド3008を編集するための様々なオプションを利用者に紹介するより高度な編集ウィンドウが提示される。図示の実施形態では、以下のエディタがその関連するタイプに使用可能である。
・単一ライン編集-整数、浮動、日付、及び文字列のタイプ用。
・選択ダイヤログ-ブール及び選択のタイプ用。
・キーエディタ-コレータのタイプ用。
・ファイルブラウザ-データセットのタイプ、並びに位置が埋め込まれていないレコードフォーマット及び変換のタイプ用。
・変換エディタ-埋込の位置を有する変換のタイプ用。
・レコードフォーマットエディタ-埋込の位置を有するレコードフォーマットのタイプ用。
・式エディタ-式のタイプ用。
・レイアウトエディタ-レイアウトのタイプ用。
【0126】
上記のエディタはKind(種類)フィールドの値(以下参照)が(パラメータ言語の)「PL」でない限り起動される。この場合、グラフの実行時にパラメータ値を導出し又は促すための規則を定めるためのエディタが利用者に提示される。
【0127】
Description(記述)3012-開発者がランタイムパラメータの期待値を記述する自由形式のフィールドである。デフォルト値が利用者に入力値を尋ねるための規則を含む場合、ランタイム時のプロンプトとして使用される。
【0128】
Kind(種類)3014-このフィールドは、グラフの実行時にグラフが何処から関連パラメータの値を得るのかを定める。サポートされるkind(種類)フィールド3014の値は以下の通りである。
・Environment(環境)-ランタイムパラメータの値は、同じ名称の環境変数内で見つかることが予期される。環境変数が定義されていない場合、default value(デフォルト値)フィールド3008内の値が使用される。パラメータが要求され(即ちエクスポートされるパラメータ)且つdefault value(デフォルト値)フィールド3008が空の場合、ランタイム誤りが生じてグラフの実行が停止する。
・Positional(位置)-ランタイムパラメータの値は、アプリケーションを呼び出すコマンドライン上のその相対位置において予期される。例えば、ランタイムパラメータが定義された第3の位置的ランタイムパラメータである場合、そのパラメータ値は、実行スクリプト内の第3の位置的コマンドライン引数として予期される。規定された任意の位置的パラメータが与えられなければならず、1つが欠落している場合ランタイム誤りが生じる。
・Keyword(キーワード)-ランタイムパラメータの値は、キーワードコマンドラインパラメータとして予期される。図示の実施形態では、キーワードパラメータが以下の形式のものである:
-<parameter name> <parameter value>
キーワードパラメータは任意選択的であり、キーワードパラメータが与えられず、default value(デフォルト値)フィールド3008が空白であり、対応するエクスポートパラメータが必要である場合にのみランタイム誤りが生じる。
・Fixed(固定)-パラメータのランタイム値は常にデフォルト値である。このことは、2つ以上のランタイムパラメータ間で定数値を共有するのに有用である。
・PL-ランタイムパラメータのデフォルト値は、ランタイムパラメータの値を他のパラメータから導出するように、又は更なる入力を利用者に促すようにグラフの実行時に解釈されるPL式を含む。本発明の任意の特定の実施形態で使用するために選択される成分記述言語は、公開されているオブジェクト指向スクリプト言語「Python」等、任意の適切なスクリプト言語とすることができる。かかるスクリプトはプログラム制御下でメタデータ(タイプ及び変換)を構築し、条件付き試験、比較、データ変換、算術演算及び論理演算、文字列及びリストの操作、並びにユーザ入力、外部的にプログラムで供給される入力、及び他のランタイムパラメータに対する他の機能を実行し、任意のランタイムパラメータのための最終値を生成することができる。
【0129】
図示の実施形態では、ランタイムパラメータグリッド3000上に直接作成されているランタイムパラメータを参照するのに有用な規約は、ドル記号「$」が前に付くパラメータ名称を単純に入力することである。例えば$keyは、keyと名付けられたランタイム変数を参照する。図示の実施形態では、新たなランタイムパラメータが、デフォルトで「文字列」のタイプ、及びデフォルトのランタイムkind(種類)のための高度なオプションダイヤログ内の値に基づくデフォルトのkind(種類)となる(デフォルトのランタイムkind(種類)は「環境」である)。
【0130】
ランタイムパラメータ値はランタイム時に決定され得るので、且つPLスクリプトは条件付き試験を提供し得るので、「条件付き」ランタイムパラメータが作成され得る。条件付きランタイムパラメータは、パラメータに関する条件(ランタイム時に決定される)の全てが有効になっている場合にのみユーザ入力のためのプロンプトを生成させる。従って、データセットをソートすべきかどうかを要求する第1のプロンプトに利用者が「いいえ」で応答する場合、ソートキーを要求する第2の条件付きプロンプトを表示する必要はない。
【0131】
従って、設計段階(「設計時」)の間、開発者はグラフ成分の特定のパラメータを「ランタイム」パラメータとして指定する。次いで、そのグラフ成分に関連するオブジェクトが、関連するパラメータデータ(例えば
図11のパラメータグリッド3000からの情報のタイプ)と共に記憶される。
【0132】
図13は、ランタイムパラメータを使用するプロセスを要約する流れ図である。ランタイムの間、実行されるアプリケーションに対応するパラメータオブジェクトを(例えばリポジトリから)取り出す(ステップ4000)。かかる各オブジェクトについて、ユーザ入力が示されているかどうかに関する判定を行う(ステップ4002)。ユーザ入力が示されている場合、プロンプトを表示するための任意の条件が満たされているかどうかを判定し(ステップ4003)、このステップは前のプロンプトへのユーザ入力を評価することを含み得る。ユーザ入力が示されていない場合、デフォルト値を使用する(ステップ4008)。或いは、パラメータ値が必要ではない場合があり(例えば利用者がソート機能を活性化しないことに決めた場合ソートキーは必要ない)、従って無視することができる。さもなければ、ユーザ入力のためのプロンプトを生成する(ステップ4004)。
【0133】
特定のパラメータに関して利用者が値を入力しない場合(ステップ4006)、そのパラメータのデフォルト値を選択することができる(ステップ4008)。或いは、ユーザ入力がないことを示すために誤り状態を発生させても良い。何れにせよ(ユーザ入力がないことによる誤り状態がないと仮定し)、入力の変換並びに他のパラメータに基づく依存関係及び条件を考慮に入れ、パラメータの最終値の決定を行う(ステップ4010)。
【0134】
特定のパラメータに関してユーザ入力が示されていないと判定される場合(ステップ4002)、環境変数やコマンドラインパラメータ等によってパラメータ値を外部的にプログラムで供給すべきかどうかを判定する(ステップ4012)。外部的にプログラムで供給しない場合、パラメータのデフォルト値を選択する(ステップ4014)。或いは、規定されたタイプの使用可能な入力がないことを示すために誤り状態を発生させても良い。何れにせよ(外部入力がないことによる誤り状態がないと仮定し)、入力の変換並びに他のパラメータに基づく依存関係及び条件を考慮に入れ、パラメータの最終値の決定を行う(ステップ4010)。
【0135】
最終的なパラメータ値が決定されると、任意選択的なステップとして、上記で略述した規定の条件及び規則に従い、(以下で論じる)全ての条件付き成分を完全に削除し又はフロー(即ちグラフのリンク又は辺)によって置換することができる(ステップ4016)。操作上のグラフ構造が最終的な形になり、最終的なパラメータ値が決定されると、グラフを従来のやり方で実行する(ステップ4018)。
【0136】
試験値
ランタイムパラメータを有するグラフの作成及び試験中に開発者を支援するために、GDE1002の好ましい実施形態はランタイムパラメータに関する試験値もサポートする。開発者がランタイムパラメータを有するグラフを実行する場合、又はグラフ成分に影響を及ぼす基礎を成すコードを見たい場合、GDE1002は、1つ又は複数のランタイムパラメータの新たな試験値を利用者が入力することができる関連する試験パラメータグリッドを表示する。好ましくは、使用される試験値の最後の組が記憶され、グラフと共に保存される。
【0137】
ランタイムパラメータごとに、開発者が所望の試験値を試験値の列内に入力する。それぞれの試験値の列には、edit(編集)フィールドを関連付けることができる。パラメータのkind(種類)がPLである場合を除き、試験値フィールド及びedit(編集)フィールドは、ランタイムパラメータグリッド3000内のdefault value(デフォルト値)フィールド及びedit(編集)フィールドと同じに振る舞う。
【0138】
特定のランタイムパラメータの値を利用者に促すべきだとPL式が示す場合、試験値フィールド及びedit(編集)の挙動は関連するPL式の解釈に基づく。PL式が単純に他の入力に基づいて値を導出する場合、通常モードではランタイムパラメータは試験値グリッド内で見えない。
【0139】
ランタイムパラメータが自らの値を得る方法の規定
パラメータがランタイムパラメータとして指定された後、対応するオブジェクトがリポジトリ1004内に作成される。ランタイムパラメータが「PL」の値のkind(種類)フィールド3014を有する場合、パラメータのdefault value(デフォルト値)フィールド3008は以下の好ましい形式を有するprompt_for擬似関数を含む。
prompt_for “prompt-kind [modifiers]”options...
【0140】
上記で示したように、prompt_for擬似関数は、前の入力に基づいてプロンプトを表示すべきかどうかを決定する条件式の一部であり得る。
【0141】
かかるオブジェクトでは、直接入力ランタイムパラメータ(direct entry runtime parameter)を利用者に提示するためにユーザインタフェースが使用される。好ましい実施形態では、ウェブインタフェース1008がこの機能を提供する。具体的には、ランタイムの間、対応するユーザプロンプトを有する(例えばHTMLの)ウェブページを生成するために、各ランタイムパラメータオブジェクトの各prompt_for擬似関数がウェブインタフェース1008によって構文解析される。(或いは、かかるウェブページはランタイム前に生成され、ランタイム時に単純に提示され得る。しかし、かかるウェブページをランタイムに生成することは一層の柔軟性をもたらす。具体的には、ページのコンテンツが前のユーザ入力に依存し得る。)ウェブインタフェース1008は、かかるウェブページを表示しユーザ入力を受け付けることができる従来のウェブブラウザと共に使用される。
【0142】
prompt_for擬似関数は、パラメータ値をどのように促すのかをウェブインタフェース1008に指示する。具体的には、prompt-kindパラメータ、文字列定数はどのような種類のユーザインタフェース(UI)要素を提示するのかを指示する(テキストボックスやドロップダウンリスト等)。文字列のmodifiers(修飾子)部分、キーワードのコンマ区切りのリストは様々な種類のプロンプトに共通の幾つかのオプションを提供する。図示の実施形態では、修飾文字列内でスペースは有意ではない。修飾キーワードは以下の通りに解釈される。
・キーワードin placeは、アプリケーションのサマリレベルユーザインタフェースにおいて要素を直接提示すべきことを宣言し、下位レベルに「ドリルイン」することなしに値が供給されることを可能にする。in placeが規定されていない場合、パラメータ値を供給するための別のページに利用者を移動させる簡単な「編集」ボタンがサマリレベルインタフェースに提示される。
・キーワードblank okは、利用者が値を供給しなくても良いことを宣言し、アプリケーションがデフォルト値に妥当なやり方で対処する。blank okが規定されていない場合、利用者は何らかの値を供給することなしにアプリケーションを実行することができない。
【0143】
以下は様々な種類の修飾子を有するprompt_forコールの幾つかの例である:
${prompt_for “text,inplace”}
${prompt_for “filter, in place”, $input_type}
${prompt_for “radio, blankok, in place”, ${list 1, 2, 3}}
【0144】
この節の残りの部分では様々なprompt-kinds及びそれらの対応するoptionsを列挙し、そのそれぞれがウェブインタフェース1008によって生成されるウェブページ内にどのように現れるのかを説明する。
【0145】
text [size]-従来の単一ラインテキストボックスの文字幅sizeを提示する(sizeが供給されない場合、ブラウザのテキストボックスのデフォルトのサイズとする)。
【0146】
radio choice-list [description-list]-choice-listの要素ごとに1つのボタンがある1組のラジオボタン形式で従来の「1つを選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述(description)で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。
【0147】
radioplus choice-list [description-list]-radioと同様だが、テキストボックスの隣に追加のボタンを提示して、利用者がchoice-list内にない「書込み」値を選択することを可能にする。
【0148】
checkbox choice-list [description-list]-choice-listの要素ごとに1つのボタンがある1組のチェックボックス形式で従来の「ゼロ以上を選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述(description)で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。
【0149】
dropdown choice-list [description-list, size]-choice-listの要素のためのドロップダウンリスト形式で従来の「1つ選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述(description)で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。sizeが供給される場合、その多数の選択を一度に見ることができ、さもなければ1つだけを見ることができる。
【0150】
multidropdown choice-list [description-list, size]-choice-listの要素のためのドロップダウンリスト形式で従来の「ゼロ以上を選択して下さい」プロンプトを提示する。description-listが供給される場合、対応する記述(description)で各選択にラベル付けし、さもなければchoice-listからの対応項目の文字列形式でその選択にラベル付けする。sizeが供給される場合、その多数の選択を一度に見ることができ、さもなければブラウザのデフォルトの項目数が表示される。
【0151】
key type-obj [size]-所与のtype-objからのフィールドで作られるキー(コレータとしても知られる)のためのプロンプトを提示する。キーは、type-obj内のフィールド数をデフォルトとするsize部分と同程度多くても良い。
【0152】
図14は、key(キー)プロンプトによって生成されるグラフィカルダイヤログ5000の一実施形態の図である。以下は3入力keyプロンプトのスクリプトテキストの一例であり、ファイル/datasets/fixedはドロップダウンボックス5002内に示す使用可能なキーのコンテンツを定める:
${prompt_for “key”, ${dataset_type “/datasets/fixed”},3}
図示の実施形態では、通常の照合順序は昇順だが、利用者は関連するチェックボックス5004をチェックすることによってキーの降順の照合を選択することができる。
【0153】
fiter type-obj-所与のtype-objの各フィールドに対する条件で作られるフィルタ式のためのプロンプトを提示する。「blank ok」修飾子はフィルタに影響せず、空のフィルタは「真」の式を与える。
【0154】
図15は、filter(フィルタ)プロンプトによって生成されるグラフィカルダイヤログ6000の一実施形態の図である。それぞれの式のテキスト編集ボックス6004に関連する使用可能なフィールド名称6002はtype-objによって定義される。比較値をテキスト編集ボックス6004内に入力し、比較演算子(例えば等号、より大きい、以下)を対応するドロップダウンリストコントロール6006から選択する。
【0155】
flexifilter type-obj-filterプロンプトと同様だが、所与のtype-objの各フィールドに対する条件で作られるフィルタ式のためのプロンプトを提供し、各ライン上のフィールド名称はドロップダウンリストから選択可能である。これにより、複数の条件に対して同じフィールドを使用することが可能になる(例えばfield STATE=MA OR field STATE=CA)。
【0156】
rollup type-obj key [size]-所与のキーによってロールアップされている所与のtype-objのフィールドに基づくロールアップ計算のためのプロンプトを提示する。ロールアップは、type-obj内のフィールド数をデフォルトとするsize規則と同程度多くても良い。blank ok修飾子はロールアップに影響せず、空のロールアップは各グループのキー値だけを提供するパッケージをもたらす。
【0157】
図16は、rollup(ロールアップ)プロンプトによって生成されるグラフィカルダイヤログ7000の一実施形態の図である。図示の実施形態では、ドロップダウンボックス7002の列が、利用可能なロールアップ計算関数(例えば合計、最小値、最大値)を定義する。各計算に関連する使用可能なフィールド名称7004がtype-objによって定義される。各ロールアップ規則は、利用者が所望の式を定義するための関連するテキスト編集ボックス7006、ソース値が計算に関与する基準を(ブール式によって)定義するための「場所(where)」テキスト編集ボックス7008、及び計算結果を受け取るフィールドを指定するための出力フィールドテキスト編集ボックス7010を有する。明確に導出できる場合、出力フィールドの名称は規定しなくても良い。
【0158】
reformat type-obj [size]-所与のtype-objのフィールドに基づく再フォーマット計算のためのプロンプトを提示する。再フォーマットは、type-obj内のフィールド数をデフォルトとするsize規則と同程度多くても良い。
【0159】
図17は、reformat(再フォーマット)プロンプトによって生成されるグラフィカルダイヤログ8000の一実施形態の図である。図示の実施形態では、reformatプロンプトが、入力フィールドを同様の名称の(チェックボックスコントロールを使用して個々に、又はSelect All(全て選択)若しくはSelect None(選択しない)ボタンを使用することによって集合的に選択/選択解除される)出力フィールドに単純にコピーするためのセクション8002を含む。このプロンプトの第2のセクションは、再フォーマットの式(例えばtotal=revenue_1-revenue_2)の定義を可能にするテキスト編集ボックス8004の列を含む。各規則は、再フォーマットされた結果を受け取るフィールドを指定するための関連する出力フィールドテキスト編集ボックス806を有する。
【0160】
outputspec-出力データセット仕様のためのプロンプトを提示する。表示されるコントロールは、使用可能なフォーマットオプションを提示するためのドロップダウンコントロール、及び出力データセットの特定のインスタンスの名称を入力するためのテキスト編集ボックスを含む。blank ok修飾子は出力データセットの仕様に影響を与えない。
【0161】
fpath starting-point-ファイルパスのためのプロンプトを提示する。このプロンプトは基本的にテキストボックスだが、ファイルパスを閲覧するためのポップアップウィンドウを出現させる「閲覧(Browse)」ボタンを隣に有する。テキストボックスが空白でない場合、閲覧操作のための開始点としてそれを使用し、空白の場合はstarting-point引数を使用する。
【0162】
rpath starting-point-リポジトリパスのためのプロンプトを提示する。プロンプトは基本的にテキストボックスだが、閲覧するためのポップアップウィンドウを出現させる「閲覧(Browse)」ボタンを隣に有する。テキストボックスが空白でない場合、閲覧操作のための開始点としてそれを使用し、空白の場合はstarting-point引数を使用する。
【0163】
radiofpath choice-list [description-list]-radioplusと同様だが、「書き込み(write-in)」スロット内にfpath型のbox-plus-browseボタンを提示する。
【0164】
radiorpath choice-list [description-list]-radioplusと同様だが、「書き込み(write-in)」スロット内にrpath型のbox-plus-browseボタンを提示する。
【0165】
条件付き成分
一部の実装形態は、パラメータ値及び算出メタデータに基づいてグラフの成分及びフローの構造を変えることを可能にする条件付き成分メカニズムを含む。グラフの各成分は、ランタイム時にその成分がグラフ内に現れるかどうかを制御する条件を有する。条件はランタイムパラメータによって直接又は間接的に計算され得る。グラフの最適化や専用化等、条件付き成分は様々な目的で使用することができる。最適化のために、アプリケーションは、特定のデータセットからの値を使用しない場合、そのデータセットの処理を省略し、それによりグラフをより効率的に実行させることもある。専用化では、アプリケーションは所望の詳細レベルに基づいて幾つかの異なる出力データセットを作る条件を付けることができ、又はグラフの幾つかの任意選択的な部分の1つを実行可能にし得る。
【0166】
図18Aは、MergeJoin(マージ結合)成分9000がファイルA及びファイルBからのデータを結合し、結果を出力ファイル9002に出力する第1のグラフのブロック図である。
【0167】
図18Bは、Rollup(ロールアップ)成分9004がファイルAからのデータを集約し、結果を出力ファイル9002に出力する第2のグラフのブロック図である。
【0168】
図18Cは、MergeJoin(マージ結合)成分9006がファイルA及びファイルBからのデータを結合し、その結果生じるデータをRollup(ロールアップ)成分9008が集約し、最終結果を出力ファイル9002に出力するグラフのブロック図である。条件付き成分を使用し、これらの3つのグラフを単一のグラフへと組み合わせることができる。その単一のグラフは
図18Cのグラフのように最初は見えるが、その正確な構造はランタイムまで決定されない。適切な条件を設定することによってRollup(ロールアップ)成分9008を接続(フロー)で置換し、
図18Aのグラフと同様のランタイムグラフをもたらすことができる。同様に、適切な条件を設定することによってMergeJoin(マージ結合)成分9006をファイルAへの接続(フロー)で置換し、
図18Bのグラフと同様のランタイムグラフをもたらすことができる。
【0169】
図示の実施形態では、条件付き成分は頂点を定義する任意のグラフ成分(即ち入力/出力ファイル等のデータセット成分、再フォーマット成分やソート成分等の処理成分、又は下位グラフとして知られる他のグラフ)とすることができる。好ましい実施形態では、条件付き成分が2つの専用パラメータ、つまりCondition(条件)及びCondition-interpretation(条件解釈)によって制御される。条件は、ランタイムまでその評価が保留されるブール式又は値である。図示の実施形態では、「偽」及び「0」の値は偽の条件を規定し、他の全ての値(空を含む)は真の条件を示す。Condition-interpretation(条件解釈)パラメータは相互排他的な2つの許容値、つまりRemove Completely(完全削除)及びReplace With Flow(フローで置換)を有する。
【0170】
図19は、Condition-interpretation(条件解釈)コントロール1904を有する条件1902を提示するグラフィカルダイヤログ1900の一実施形態の図である。Condition-interpretation(条件解釈)コントロール1904は、Remove Completely(完全削除)解釈1906又はReplace With Flow(フローで置換)解釈1908の選択を可能にする。
【0171】
Remove Completely(完全削除):この解釈では、Condition(条件)が満たされる場合、成分及びその接続フロー(即ちグラフのリンク又は辺)の全てがグラフから削除される。アクティブなRemove Completely(完全削除)条件は、成分及びその成分の全ての直接接続フローをグラフから機能的に削除する。Remove Completely(完全削除)条件は、任意の成分に対して使用することができる。
【0172】
グラフから削除される条件付き成分は、その条件付き成分の存在に依存する他の接続成分を汚染し(poison)、かかる成分の削除を引き起こし得る。
【0173】
図20は、かかる汚染が生じる状況を示すグラフ2100の図である。入力ファイル成分2102に関する条件が削除を示し、その対応する条件解釈がRemove Completely(完全削除)である場合、入力ファイル成分2102及びその接続フローの両方がグラフ2100から削除される。かかる削除はひいてはソート成分2104を汚染し、ソート成分2104の削除を引き起こし、その理由はソート成分2104の入力は必須の入力ポートだが、それに接続されるデータフローがもはやないからである。かかる削除はひいてはロールアップ成分2106を汚染し、ロールアップ成分2106の削除を引き起こし、その理由はロールアップ成分2106の入力は必須の入力ポートだが、それに接続されるデータフローがもはやないからである。この「消失汚染」を止める唯一の方法は、下流成分の任意選択的なポート又はカウントされるポートへの接続である。従って、入力ファイル成分2102に関する条件が削除を示す場合、ソート-ロールアップグラフの分流全体2108がグラフ2100から効果的に削除される。
図20の結果は、元のグラフ構造の公称3入力結合成分2110がランタイム時に2入力結合成分になることである。
【0174】
一実装形態では、汚染(「黙示条件」としても知られる)の詳細なセマンティクスは下記の通りである。
・成分が必須のポートを有し、それに接続される活きたフローが存在しない場合、その成分及びその成分に接続される全てのフローがグラフから削除される。
・成分がグラフから完全に削除される場合、その成分のポートに接続される全てのフローがグラフから削除される。
・成分がフローで置換される場合、その成分のdesignated input port(指定の入力ポート)及びdesignated output port(指定の出力ポート)以外の全てのポートに接続される全てのフローがグラフから削除される。
・必須のインデックス付きポートが自らに接続される活きたフローを有さない場合、同じインデックスを有する対応する任意選択的なインデックス付きポートごとに、その対応するポートに接続される如何なるフローもグラフから削除される。
【0175】
これらの規則には幾らかの驚くべき結論がある。例えば、任意選択的なポートだけを有する成分は汚染が原因で削除されることはない。従って、所望の場合は明確に削除しなければならない。
【0176】
図21は、Remove Completely(完全削除)条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。Condition-interpretation(条件解釈)がRemove Completely(完全削除)であり且つCondition(条件)が満たされない場合(ステップ2200)、条件付き成分をグラフから削除しない(ステップ2202)。Condition(条件)が満たされる場合(ステップ2200)、条件付き成分は、その成分に接続される全てのフローと共にグラフから削除する(ステップ2204)。次いで、全ての「汚染された」成分及びフローを上記の規則に従ってグラフから削除する(ステップ2206)。
【0177】
Replace With Flow(フローで置換):この解釈では、Condition(条件)が満たされる場合、成分がフロー(即ちグラフの辺)で置換される。Replace With Flow(フローで置換)の条件解釈は追加情報を必要とする。
図19を参照すると、利用者は、グラフから成分が削除される場合に接続を行う入力ポート1910(又はカウントされるポート群)及び出力ポート1912(又はカウントされるポート群)を指定する。デフォルトでは、厳密に1つの必須の入力ポート又はカウントされるポートがあり、厳密に1つの必須の出力ポート又はカウントされるポートがある場合、それらは指定のフロースルー接続ポートである(designated input port(指定の入力ポート)及びdesignated output port(指定の出力ポート)とそれぞれ呼ばれる)。必須のポートは、少なくとも1つのフローが接続されることを必要とするポートである。
【0178】
図22は、本発明の特定の実施形態に関するReplace With Flow(フローで置換)条件付き成分を含むグラフのランタイム準備のプロセスを要約する流れ図である。図示の実施形態の中の(CO>OPERATING SYSTEM(登録商標)内で入手可能な成分に基づく)特定の使用可能な入力及び出力に対する一部の成分の依存関係が原因で、幾つかの規則がこの実装形態及びReplace With Flow(フローで置換)条件の使用に適用される。
・Condition-interpretation(条件解釈)がReplace With Flow(フローで置換)であり、Condition(条件)が満たされない場合(ステップ3300)、条件付き成分をグラフから削除しない(ステップ3302)。
・指定の入力ポート及び指定の出力ポートを有する成分は、自らの指定の入力ポートに接続される厳密に1つの活きた直接のフロー、及び自らの指定の出力ポートに接続される厳密に1つの活きた直接のフローがある場合にのみフローで置換することができる(「活きた」フローとは、ランタイム時に削除されていないフローである)(ステップ3304)。フローで置換する場合、成分自体をグラフから削除し、その成分の指定の入力ポートに接続される活きた直接のフローと、その成分の指定の出力ポートに接続される活きた直接のフローとを互いにリンクする(ステップ3306)。削除される成分の他のポート(即ち特別に指定された入力ポート及び出力ポート以外の任意のポート)に直接リンクされる他の如何なるフローもグラフから削除される。削除された成分に接続された「汚染された」成分及びフローはどれも上記のように削除される(ステップ3308)。
・Replace With Flow(フローで置換)条件を有する成分が、カウントされる入力群内の複数の指定の入力ポートに付加される活きたフローを有する場合(ステップ3310)、グラフを有効にするにはその成分が必要なので、その成分はグラフから削除しない(ステップ3312)。
・必須入力に活きたファンインフローを有する成分は特殊な扱いが必要である。「活きたファンインフロー」とは、その成分が必須入力ポートに接続される活きたファンインフロー若しくは全対全のフローを有すること、又は単一の必須入力ポートに接続される複数の活きた直接のフローを有することを意味する。かかる成分では、Replace With Flow(フローで置換)条件を解釈することは、活きた入力フローの全てを集める収集成分で条件付き成分を置換するものとする(ステップ3314)。置換された成分に接続されていた「汚染された」如何なるフロー及び成分も上記のように削除する(ステップ3316)。
【0179】
メタデータ伝搬の態様
グラフのメタデータは、例えばグラフの開発者によって、グラフの利用者によって、又はグラフの別の部分からの伝搬によって供給され得る。ポートのためのレコードフォーマット(例えばポートに流れ込む又はポートから流れ出るレコードのフィールドシーケンスやデータタイプ)、ソート性、圧縮法、文字セット、バイナリ表現(ビッグエンディアン、リトルエンディアン)、パーティション化、成分がどの計算資源(例えばプロセッサや一時的なディスク空間)を使用し得るのか、データ変換、成分が使用し得るメモリ量等、データ又はデータに対する計算に関連するメタデータを含む様々な種類のメタデータを伝搬することができる。グラフ構造の様々な側面がメタデータの伝搬に影響を及ぼし得る。これらの側面の2つを以下で説明する。
【0180】
成分削除後の伝搬
一部の実装形態では、グラフ成分を削除した後にフローが生成される場合、かかるフロー内のデータを定義するメタデータを訂正後のグラフ内でどのように伝搬させるべきかを決めなければならない。メタデータはフローの両端から入手可能であり得る。一部の実装形態では、フローの上流端からのメタデータが好ましい。
【0181】
フローの上流端が削除された成分(又は収集成分によって置換されている成分)の場合、GDE1002は、削除されていない成分を見つけるまでグラフを上流に「進む」ことによってそのフローのためのメタデータを見つける。その上流成分によってさらされるメタデータは、生成されるフローのためのデータの特性を定義するために使用される。
【0182】
変換済みのメタデータの伝搬
上記のように、或るポートに関連するメタデータを別のポートのためのメタデータを含む1つ又は複数のパラメータに応じて規定できるようにすることにより、メタデータは変換内部データパス上でさえ伝搬し得る。
図32Aは、データセット31302及びデータセット31304からのデータに対する結合操作を計算するグラフ31300を示す。この例では、グラフの開発者はデータセットの出力ポートにおいてメタデータを供給する。次いで、そのメタデータが入力データセットのレコードに対する結合操作を計算する「スマート結合」成分31306に伝搬される。例えば、メタデータは出力ポート31308から入力ポート31310に伝搬する。次いで、メタデータが「スマート結合」成分31306によって変換され、「スマート結合」成分31306の出力ポート31316からフィルタ成分31318の入力ポート31317に伝搬される。
【0183】
図32Bは、「スマート結合」成分31306を実装する下位グラフを示す。成分31306は、結合成分31350が実行する結合操作のキーフィールドをその値が表すkey_fieldパラメータを使用する。成分31306は、条件付きソート成分31354及び31356を含むための条件としてもkey_fieldパラメータを使用する。入力ポート31310に流れ込むレコードがkey_fieldに関して既にソートされている場合、ソート成分31354は条件を取り消される。同様に、入力ポート31314に流れ込むレコードがkey_fieldに関して既にソートされている場合、ソート成分31356は条件を取り消される。入力レコードの何れかのフローがkey_fieldに関してまだソートされていない場合、ソート成分31354及び31356はレコードをソートしてから結合成分31350に流し込む。
【0184】
変換済みのメタデータの伝搬をこの「スマート結合」成分を介して可能にするために、グラフの開発者は「スマート結合」成分31306の出力ポート31316のためのメタデータ(例えばフィールドを記述するためのメタデータ)を、第1の入力ポート31310のためのメタデータinput0.metadata、第2の入力ポート31314のためのメタデータinput1.metadata、及びキーフィールドパラメータkey_fieldに応じて定義する:
output.metadata=metadata_join(key_field,input0.metadata, input1.metadata)
【0185】
出力ポートのメタデータは、関数の引数を(適切なコンテキストに関して)値にバインドし、その結果に対して関数metadata_joinを実行することによって決定される。この例では、ポート31310及び31314のためのメタデータが未定義なので、伝搬されるメタデータはメタデータパラメータinput0.metadata及びinput1.metadataにバインドされる。利用者は、ポート31308から「スマート結合」成分31306の入力ポート31310に流れるレコードに関するフィールド「A」及び「B」を規定する出力ポート31308のためのメタデータを供給する。利用者は、ポート31312から「スマート結合」成分31306の入力ポート31314に流れるレコードに関するフィールド「A」及び「C」を規定する出力ポート31312のためのメタデータも供給する。利用者が供給するこのメタデータはポート31310及び31314に伝搬する。結合操作のためのキーフィールドはフィールドAなので、「仮パラメータ」key_fieldが値「A」にバインドされる。
【0186】
関数metadata_joinは、key_fieldパラメータの値が、input0.metadata及びinput1.metadataによって規定されるフィールドの両方の組の構成要素かどうかを最初に判定することによって出力メタデータを決定する。構成要素である場合、出力メタデータはフィールドの2つの組の和集合である。構成要素ではない場合、出力メタデータはフィールドの空集合を示す。
【0187】
メタデータが「スマート結合」成分31306の入力ポートに伝搬した(又は例えば利用者によって他のやり方で供給された)後、「スマート結合」成分31306の出力ポートのための変換済みのメタデータはフィールドA、B、及びCを含む。次いで、この変換済みのメタデータは他の成分に伝搬され得る。この例では、変換済みのメタデータがフィルタ成分31318に伝搬する。
【0188】
利用者によって供給されようがポート間で伝搬されようが、メタデータは利用者に表示することができる。例えば、利用者は入力装置(例えばマウス)を使用して成分の一部を、そのメタデータ値を見るために選択することができる。メタデータの伝搬はかかるユーザ選択に応答してトリガすることもできる。
【0189】
例示的なメタデータ伝搬プロセス
図33は、例示的なメタデータ伝搬プロセス22400の流れ図を示す。プロセス22400は、例えばグラフ内の変更がある度に、利用者のアクションに応答して、及び/又はグラフを実行する直前に実行することができる。プロセス22400は、フローによって決定される部分的な順序に従ってグラフ内の各成分が順序付けされた状態で作業リストを生成する(22402)(例えば成分Aから成分Bへのフローがある場合、成分Aは成分Bの前に来る)。フローが2つの成分間の一意の順序を決定しない場合、均衡を破るために成分ラベルのアルファベット順を使用することができる。アルファベット順の使用は、(成分ラベルが一意だと仮定して)作業リスト内の成分の安定した順序付けをもたらす。伝搬プロセス22400が(例えば新たな成分の追加後に)グラフについて繰り返される場合、新たな作業リストは、作業リスト内の成分間の同一順序を予め保つ。
【0190】
プロセス22400は、作業リストの始まりから開始し、作業リスト内の成分ごとに、成分を実装する下位グラフの仕様(例えば下位グラフ内のデータフロー)に基づいてメタデータを成分内で内部的に(例えば入力ポートから出力ポートに、又は出力ポートから入力ポートに)伝搬する(22404)。この内部的なメタデータの伝搬は、非変換データパスの両端上のポート間でメタデータを変換せずに転送することを含む。内部的なメタデータの伝搬は、上記のようにグラフのパラメータ及び/又は他のポートのメタデータを参照するメタデータ定義を有するポートに関してメタデータを導出することも含む。プロセス22400がかかるメタデータ定義に遭遇する場合、プロセス22400はメタデータを導出するのにその値が必要な任意のパラメータを評価する。
【0191】
作業リスト上の成分について内部的なメタデータの伝搬を行った後、プロセス22400は、メタデータを有する成分の各ポートからメタデータを有さない関係する成分のポートにメタデータを外部的に伝搬する(22406)。この外部的な伝搬によってメタデータを取得する成分はどれも作業リストの最後に移される(22408)。プロセス22400は、作業リスト上の最後の成分を処理した後に終了する(22410)。
【0192】
この種の外部的なメタデータの伝搬をサポートする成分間の一種の関係は、2つの成分のポート間の(例えば入力ポートから出力ポートへの、又は出力ポートから入力ポートへの)データフローリンクである。
【0193】
この種の外部的なメタデータの伝搬をサポートする成分間の別の種類の関係は、或るポートのメタデータを別のポートにも使用できることを示すリンクである。この種の「メタデータリンク」は必ずしもデータフローリンクに対応しない。例えば或るポートは、特にどのポートにも関連しないグラフ内のメタデータへのメタデータリンクを有し得る。
【0194】
成分化された下位グラフ内のランタイムパラメータ
下位グラフを別のグラフ内の成分として使用するために「成分化」する前に、成分の入力及び/又は出力ポート等、成分の様々な特性を定義する。ランタイムパラメータを有する成分を含む下位グラフでは、ランタイムパラメータのプロンプト順序を選択すべきである。グラフ内の成分は必ずしも連続して順序付けされないので、利用者を促すためのランタイムパラメータの複数の可能なグローバル順序があり得る。グローバル順序の一部は、各成分に関連する元の順序と一致しない。依存関係を考慮するために適切な場合は再順序付けしながら、各成分内のパラメータの順序をできるだけ維持する、プロンプトのためのグローバル順序を生成することが有用である。例えば、成分は「処理したデータをどこに記憶しますか?」と尋ねるプロンプトの前に、「どのデータを処理しますか?」と尋ねるプロンプトを順序付けることができる。これらのプロンプトは何れの順序で提供できても、この順序で提供することが望ましい可能性がある。
【0195】
プロンプトされるランタイムパラメータを評価するプロセス内で、プロンプトされないランタイムパラメータを評価する必要があり得るので、プロンプトの順序はランタイムパラメータ全てに関する評価順序から得られる。グラフのランタイムパラメータ(どの成分にも関連しないグラフのパラメータを含む)に関する評価順序を決定するための1つの手法は、パラメータ間の依存関係を表す1つ又は複数の有向非循環グラフに基づいてトポロジカルソートを実行することを含む。しかし、一部のトポロジカルソートアルゴリズムはパラメータを不必要に再順序付けし、ランタイムパラメータの不所望のプロンプト順序の原因となる場合がある。
【0196】
ソートの例1
第1の例では、パラメータソートプロセスが2つのグラフ成分、つまりComponent(成分)Iと、Component(成分)Iに接続されるComponent(成分)IIとのパラメータに関する最初のパラメータリストを提供する。この例では、パラメータは「成分内」の依存関係しか有さない。つまり、成分のパラメータは同じ成分内の他のパラメータにしか依存しない。パラメータは以下のように定義される:
Component(成分)Iは以下のパラメータを含む:
【数1】
Component(成分)IIは以下のパラメータを含む:
【数2】
【0197】
パラメータを列挙する順序は、利用者に値を促す所望の順序を定義する。パラメータの最初のリストは、成分ごとにこの「最初の順序」を維持する。「序数」が各パラメータに割り当てられて、最初の順序内のそのパラメータの位置を示す。以下の表は、この最初の順序内のパラメータを列挙する。
【0198】
【0199】
「依存関係」の列は、列挙するパラメータが依存する他のパラメータを示す。依存関係はパラメータの評価に順序付けの制約を課し、つまり或るパラメータが別のパラメータによって使用される(例えば参照される)前に、そのパラメータが定義されなければならない。
【0200】
「共通トポロジカルソート」アルゴリズムがこのリストを通過し、通過する度に依存関係を有さないパラメータを順序付けされた出力リスト内に転送する。各通過後、転送されるどのパラメータも依存関係の列から削除される。このプロセスは全てのパラメータが転送されるまで繰り返される。他のパラメータに依存するパラメータが、それらの他のパラメータが評価されてから評価されるように、出力リスト内のパラメータの順序は「最終順序」を表す。
【0201】
この例では、最初の通過時にパラメータx、q、a、及びcが出力リスト内に転送される。2回目の通過時にパラメータy及びbが出力リスト内に転送される。3回目及び最後の通過時に、パラメータzが出力リスト内に転送される。従って、パラメータの最終順序はx、q、a、c、y、b、zである。この順序はパラメータの依存関係によって課される順序付けの制約を満たすが、パラメータを不必要に再順序付けする。この例では、最初の順序もパラメータの依存関係によって課される順序付けの制約を満たす。
【0202】
順序付けの制約を満たすグラフのパラメータに対する評価順序を決定するための他の手法は、最初の順序を尊重する。例えば、一部の手法は順序付けの制約を満たすようにパラメータを順序付け、最初の順序に基づく基準に従って順序を選択する。基準は、最初の順序の近くに順序を保つことを優先する(例えば最初の順序への変更に基づいて基準値を最小化する)多岐にわたる基準の何れかを含み得る。一部の事例では、複数の順序が所与の基準をその基準に従って同等に良好に満たし得るので、唯一の「最良」の順序が存在しないこともある。
【0203】
最初の順序を尊重する手法の一例は「修正トポロジカルソート」手法である。この手法では、最初の順序に基づく基準は、如何なる非転送パラメータにも依存しない先行パラメータが転送される前に、最初のリストから転送されるパラメータの数を最小化することである。換言すると、「修正トポロジカルソート」は、依存関係の列から転送されるパラメータを削除してから依存関係がない次のパラメータを転送する。上記の例では、「修正トポロジカルソート」手法は、最初の順序x、y、z、q、a、b、cと同じ最終順序を生成する。
【0204】
最初の順序を尊重する修正トポロジカルソートプロセス
パラメータごとに割り当てられた序数によって決定される最初の順序をどちらも尊重する、2つの例示的な「修正トポロジカルソート」プロセスについて擬似コードを以下に示す。第2のプロセスは、一部の事例で時間効率を改善するための最適化を含む。このプロセスは、パラメータに対する入力データから生成されるデータ構造を操作する。
【0205】
順序付けすべきN個のパラメータがあると仮定し、入力データは、一意のパラメータ名称、名称を付けられたパラメータが依存する1組のパラメータ(「依存関係セット」と呼ばれる)、及び名称を付けられたパラメータに関係する情報を記憶する任意選択的な属性データオブジェクトで構成されるN個の三つ組のリストを含む。
【0206】
この入力データに関連するのは、「依存関係グラフ」と呼ばれる、パラメータ間の依存関係を表す1つ又は複数の有向非循環グラフである。それぞれの一意のパラメータ名称は依存関係グラフ内のノードに対応し、関連する依存関係セットは、他のノードからそのノードへの1組のリンクに対応する。そのため、リンクは第1のパラメータに関する第1のノードから第1のパラメータに依存する第2のパラメータに関する第2のノードに向いている。或いは、リンクの方向とパラメータの依存関係との間の対応関係を逆にしても良い。
【0207】
パラメータを評価した後、最初の順序に近い順序を保つことを優先しながら別のパラメータを評価するためにそのパラメータが使用されるように、出力データ構造result_listは(必要な場合)再順序付けされる入力データからのN個のパラメータのリストを含む。出力データ構造result_listを生成するために、このプロセスは作業データ構造param_listから出力データ構造result_listにパラメータを一つずつ転送することによってパラメータを「除去」する。出力データ構造は、全てのパラメータが除去された後に完成する。
【0208】
第1の「修正トポロジカルソート」プロセスは2つの段階を含む。第1の段階では、このプロセスは、ソート済みの出力データ構造を生成する際に使用するための入力データに基づいて作業データ構造を構築する。第2の段階で、このプロセスは、それらの作業データ構造によって表される依存関係の制約に従ってパラメータを反復的にソートし、除去する。
【0209】
このプロセスが第1の段階で構築する作業データ構造の一部は、ハッシュ化に基づくデータ構造である辞書である。辞書内の項目には、O(logN)時間で効果的にアクセスすることができる。以下の例示的なデータ構造は第1の段階で構築される:
parm_list[index]:数字のindex(index = 0はリスト内の最初の項目に対応する)によってインデックス化された、除去されていないパラメータ名称を順序付けたリスト。このデータ構造は「動的」である(即ちプロセスの実行中に変化する)。或る項目がリストの中央から削除される場合、削除された項目の後にある項目のインデックスがしかるべくシフトされるように、このリストは位置によってインデックス化される。
【0210】
n_dependencies_dict[name]:パラメータ名称(name)によって指示(key)される辞書であり、そのエントリは指示されるパラメータが依存するパラメータの数を含む。この辞書は動的である。
【0211】
dependers_dict[name]:パラメータ名称(name)によって指示される辞書であり、そのエントリは指示されるパラメータに依存する1組のパラメータを表す辞書である(同じくパラメータ名称によって指示される)。この辞書は静的である(即ちプロセスの実行中に変化しない)。
【0212】
order_dict[name]:パラメータ名称(name)によって指示される辞書であり、最初の順序内のパラメータの序数位置、0からN-1までの整数を記憶する。この辞書は静的である。
【0213】
attribute_dict[name]:パラメータ名称(name)によって指示される辞書であり、指示されるパラメータに関する任意選択的な属性データオブジェクトを記憶する。この辞書は静的である。
【0214】
result_list[index]:プロセスの出力を表すパラメータ名称及び属性の順序付けされたリストであり、数字のindexによってインデックス化される(index = 0はリスト内の最初の項目に対応する)。このデータ構造は最初は空である。このデータ構造は動的である。
【0215】
プロセスの時間効率を分析するために、依存関係グラフの平均「次数」(又はノードからのリンク数)をzと仮定する。これらのデータ構造を構築するにはO(N)時間かかる。但し、O(N*z)時間かかるn_dependencies_dict及びdependers_dictは除く。
【0216】
第2の段階では、このプロセスはソート基準by_n_deps_and_orderに従ってparam_listデータ構造内のパラメータをソートし、ソート基準by_n_deps_and_orderは、まずパラメータが依存する除去されていないパラメータの数によって(即ちn_dependencies_dictの値によって)最低から最高までパラメータを順序付けし、次いでパラメータの序数によって(即ちorder_dictの値によって)最低から最高までパラメータを順序付けする。次いでこのプロセスは、ソート済みのparam_list内の第1のパラメータを除去する。このパラメータに関するn_dependencies_dictの値はゼロであるべきである。(ソート済みのparam_list内の第1のパラメータに関するn_dependencies_dictの値がゼロでない場合、誤りフラグが立てられる)。
【0217】
パラメータを除去するために、このプロセスはパラメータを(対応する任意の属性と共に)result_listに付加し、そのパラメータの依存物(即ちdependers_dict内のパラメータ)全ての依存関係のカウント(即ちn_dependencies_dictの値)を1減じる。最終的にそのパラメータはparm_listから消去される。全てのパラメータが除去されるまで、結果として生じる第1のパラメータのこのソート及び除去が繰り返される。
【0218】
以下は、eliminate(除去)手続きのための擬似コードの定義である:
【数3】
【0219】
このeliminate(除去)手続きの引数はlist(その値は例えばparam_listである)及びindexである。関数result_list.appendは、位置indexにある指示されるlist項目をその関連する属性と共にresult_listに付加する。次いでこの手続きは、除去されているパラメータに関して指示されるdependers_dictデータ構造の構成要素であるパラメータdependerごとにn_dependencies_dictの値を減じる。次いで、この手続きはlistからパラメータを消去する。このeliminate(除去)手続きのランタイムはO(zlogN)である。
【0220】
以下は、第1の「修正トポロジカルソート」プロセスに関するソート/除去ループのための擬似コードである:
【数4】
【0221】
このプロセスはまず、上記のソート基準by_n_deps_and_orderに従ってparam_listのパラメータを順序付ける関数parm_list.sort(by_n_deps_and_order)を使用してparam_listの最初のソートを行う。次いでこのプロセスは、param_listが空になるまで、eliminate(除去)手続きとその後に続くparam_listの別のソートを行う。このプロセスは、param_list内の第1のパラメータ(index =0を有する)に対する依存関係の数がゼロであることを確実にするために確認を行う。ゼロではない場合、このプロセスはパラメータを削除し、循環誤りを記録して続行する。ソートはO(NlogN)要しループ範囲はNなので、ループに関する全体のランタイムの推定はO(N2logN)である。
【0222】
第2の「修正トポロジカルソート」プロセスは、z<<Nのような依存関係グラフがまばらな場合を活用する。或る最初のソート後、このプロセスは、他の如何なるパラメータにも依存しないパラメータのリストcandidates(候補)のソート性を維持することができる。このことは、以下で説明するようにこの予期されるランタイムを短縮する。
【0223】
以下は、第2の「修正トポロジカルソート」プロセスのための擬似コードである:
【数5】
【0224】
このプロセスはまず、上記のソート基準by_n_deps_and_orderに従ってparam_listのパラメータを順序付ける関数parm_list.sort(by_n_deps_and_order)を使用してparam_listの最初のソートを行う。次いでこのプロセスは、(「# section 1」、「# section 2」、及び「# section 3」とラベル付けした)3つのセクションを有するループを実行する。
【0225】
section 1で、このプロセスは依存関係がゼロのパラメータだけを含むcandidates(候補)リストを構築する。このプロセスは、parm_list内のパラメータの全てを走査し、それらをcandidates(候補)に付加し、それらの相対的な順序を保存する。
【0226】
section 2で、このプロセスは、candidates(候補)からのパラメータが除去され、新たなパラメータがcandidates(候補)内にマージされるループを実行する。this_parmとして保存されるcandidates(候補)内の第1のパラメータは、candidates(候補)から除去され、param_listから消去される。関数get_new(this_parm)は、新たに除去されるthis_parmに関するdependers_dictの構成要素であり、依存関係が残っていないパラメータ名称のリストを返す。その最後の依存関係が削除されたパラメータを表すこれらのパラメータは、(そのそれぞれの序数に従って順序付けられることを確実にするために)by_n_deps_and_orderに従ってソートされ、candidates(候補)内にマージされる。従って、candidates(候補)リストは、序数によってソートされる、依存関係がないパラメータのリストのままである。
【0227】
section 3は、例えば2つのパラメータが互いに対して定義される場合に発生する「循環誤り」がある場合にのみ突入する。この場合、このプロセスはparm_listを再びソートし、parm_list内の第1のパラメータがゼロではない依存関係を有する場合はそれを消去し、このループをsection 1で繰り返す。
【0228】
循環誤りがないと仮定し、Nパラメータのリストparm_listは開始時にのみソートされ、O(NlogN)のソート時間をもたらす。その後、candidates(候補)リストの先頭においてパラメータを除去することによって得られる、新たに生成された依存関係がないパラメータのはるかに小さいリストに対してのみソートが行われる。このリストのサイズは(平均で)z未満であり、O(zlogz)のソート時間及びO(z)のマージ時間をもたらす。従って、ループの1回の反復はO(z log z)であり、全体時間はO(Nz log z+N log N)である。zがNの増加と共に増えない場合、この時間は事実上O(NlogN)である。
【0229】
ソートの例2
別の例では、パラメータソートプロセス(例えば第1の又は第2の「修正トポロジカルソート」プロセス)が、
図34Aに示すようにグラフ成分22502、22504、及び22506を有するグラフ22500に関するランタイムパラメータの最初のリストを決定する。グラフ22500は、入力データセット22510の出力ポート22508及び出力データセット22514の入力ポート22512に関連するランタイムパラメータも有する。この例では、パラメータが「成分内」の依存関係及び「成分間」の依存関係の両方を有する。つまり、成分のパラメータは同じ成分内のパラメータ及び他の成分内のパラメータに依存する。この例では、成分間の依存関係は、一部のパラメータが依存するメタデータの伝搬を可能にする成分間のフローによって生じる。
【0230】
図34Aでは、第1のパラメータ又はポートから第2のパラメータ又はポートへの点線矢印によって依存関係が示されている。ポートへの矢印は、リンクされるパラメータの値がそのポートから下流のポートに伝搬することを示す。ポートからの矢印は、値が上流のポートからリンクされるパラメータに伝搬することを示す。第1のパラメータから第2のパラメータへの矢印は、第2のパラメータの値が第1のパラメータの値に依存する(例えば参照する)ことを示す。
【0231】
図34Bは、グラフ22500に基づくパラメータp0、p1、p2、p4、p5、及びp6間の順序付けの制約を表す依存関係グラフ22550を示す。
【0232】
図34Cは、グラフ22500に基づくパラメータp3、p7、p8、及びp9間の順序付けの制約を表す依存関係グラフ22552を示す。
【0233】
パラメータソートプロセスは、グラフ22500内の要素の配置順序に応じて、様々なグラフ要素のための10個のパラメータp0,p2,...,p9のそれぞれに序数を割り当てる。
図34Aでは、(例えばGDE1002を使用する利用者によって)グラフ22500に追加される第1のグラフ要素は、パラメータp0、p1、及びp2を有する成分22502である。追加される第2の要素は、パラメータp3、p4、及びp5を有する成分22506である。追加される第3の要素は、パラメータp6を有するデータセット22510である。追加される第4の要素は、パラメータp7を有するデータセット22514である。追加される最後の要素は、ランタイムパラメータを有さないデータセット22516である。以下の表は割り当てられた序数によって定義される最初の順序内のパラメータを列挙する。
【0234】
【0235】
処理の様々な段階におけるparam_list及びresult_list内のパラメータの以下のリストは、上記の第1の「修正トポロジカルソート」プロセスに対応する。各段階において、param_listがソート基準by_n_deps_and_orderに従ってソートされて示されている。
【数6】
【0236】
処理の様々な段階におけるcandidates(候補)及びresult_list内のパラメータの以下のリストは、上記の第2の「修正トポロジカルソート」プロセスに対応する。各段階においてパラメータが同じ順序に留まるので、段階間でcandidates(候補)をソートしなくても良い。
【数7】
【0237】
従って、
図35を参照し、「修正トポロジカルソート」プロセス22600は、ランタイムパラメータの値を利用者に促す第1の所望の順序22602、及びパラメータ(例えば依存関係グラフ22550及び22552)に関する順序付けの制約22604を入力として取る。プロセス22600は、第1の所望の順序22602に従って順序付けの制約を満たす1組のパラメータの新たな順序22606を与える。
【0238】
典型的な使用法
典型的には、利用者はウェブインタフェース1008の前に座り、自分が実行したいアプリケーションのグラフをリポジトリ1004内で見つける。アプリケーショングラフに関連するオブジェクトの全てを走査することにより、ウェブインタフェース1008は、利用者がアプリケーションのランタイムパラメータの値を規定できるようにするウェブページフォームを生成する。全てのランタイムパラメータが規定されると、アプリケーションとパラメータ設定との組合せがジョブとしてまとめられ、ジョブは実行部1010による実行がスケジュールされる。ジョブを実行する時間になると、実行部1010は、並列オペレーティングシステム1006の下で実行するためにアプリケーションを知られているやり方で待ち行列に入れる。並列オペレーティングシステム1006は、利用者及び管理者がジョブの進捗状況及び性能を追跡できるように追跡情報及びジョブステータスを集め、その情報をリポジトリ1004内に記憶する。
【実施例】
【0239】
実施例
図23は、ランタイムパラメータなしのロールアップアプリケーションを表すグラフ1400の図である。このグラフは、それぞれの種類のアカウント数を計算し、その結果を出力ファイルに書き込む。このアプリケーションの全ての側面、つまり入力ファイル成分1402の名称、入力データのフォーマット、HashRollup(ハッシュロールアップ)成分1404内のデータをロールアップするために使用されるキー及び変換規則、出力フォーマット、並びに出力ファイル成分1406の名称はグラフを作成した開発者によって決定されている。利用者は、このグラフを厳密に定義された通りにしか実行することができない。
【0240】
図24は、
図23のロールアップアプリケーションのランタイムパラメータ化バージョンを表すグラフ1500の図である。このアプリケーションのデータフローグラフ構造は、非ランタイムパラメータ化バージョンと非常に似ているが、このアプリケーションの方がはるかに柔軟である。ランタイムパラメータにより、エンドユーザは抽象化された入力データセット1502(入力ファイルの名称及びフォーマットがそこから導出される保管オブジェクト)の名称、HashRollup(ハッシュロールアップ)成分1504に関するロールアップキー及びロールアップ規則、並びに出力ファイル成分1506の名称を規定することができる。
【0241】
図25は、
図24のアプリケーションの一例に関するランタイムパラメータグリッド1600を表すグラフィカルダイヤログの一実施形態の図である。これは
図11に示したパラメータグリッドの記入バージョンである。上記のように幾つかのデフォルトのパラメータがprompt_for擬似関数を使用して定義され、従ってウェブインタフェース1008によるユーザ入力を必要とすることに留意されたい。このグラフの見た目は非ランタイムパラメータ化アプリケーショングラフと殆ど同じだが、グラフの実行を制御する全てのパラメータを開発者が完全に追跡することを1つ又は複数のパラメータグリッド(又は他の適切な制御)が可能にする。
【0242】
図26Aは、
図25のパラメータグリッド1600内の情報からウェブインタフェースによって生成されたフォーム1700を表すグラフィカルダイヤログの一実施形態の図である。この例では、フォーム1700がユーザ入力のための4つのランタイムパラメータ、つまり入力データセットリポジトリパス1702、ロールアップキー1704、ロールアップ規則1706、及び出力パス1708を提示する。
【0243】
図26Bは、利用者によってパラメータ値で埋められた
図26Aのフォーム1700の図である。利用者は、直接記入及び/又はランタイムパラメータ1702~1708に関連する編集コントロールボタン若しくはブラウザコントロールボタンを使用し、関連するグラフを実行するための対応するパラメータ値1710~1716を与える。
【0244】
図27は、ランタイムパラメータ化ロールアップ及び結合アプリケーションを表すグラフ1800の図である。
【0245】
図28は、
図27のアプリケーションの一例に関するランタイムパラメータグリッド1900を表すグラフィカルダイヤログの一実施形態の図である。ここでは、アプリケーションの一部の側面がパラメータ化されているが、結合キー及び入力データセットを含む殆どは固定されたままである。
【0246】
図29は、
図28のパラメータグリッド1900内の情報からウェブインタフェース1008によって生成されたフォーム2220を表すグラフィカルダイヤログの一実施形態の図である。ロールアップへの入力タイプは最上位のフォームが表示された時点で知られているので、ロールアップ規則2222をインプレースでプロンプトできることに留意されたい。
【0247】
図30は、ランタイムパラメータ化ロールアップ-結合-ソートアプリケーションを表すグラフ22110の図である。
図27の例と同様だが、条件付きソート成分22112がグラフ22110に追加されている。
【0248】
図31は、
図30に示したアプリケーションの一例に関するランタイムパラメータグリッド32200を表すグラフィカルダイヤログの一実施形態の図である。sort_keyランタイムパラメータ32202は、ソートが望ましいことを利用者が示す場合にのみプロンプトされる。この効果を得るために、開発はsort_keyランタイムパラメータ32202のデフォルト値32204に対するif条件付き試験内にprompt_for擬似関数を置く。if条件付き試験は、第2のランタイムパラメータdo_sort32206を参照する。do_sortパラメータ32206のデフォルト値フィールド32208及び記述フィールド32210を定義して、テキストプロンプト「データをソートすべきでしょうか?」に対する真/偽又ははい/いいえの回答を利用者に尋ねるradioプロンプトを生成する。do_sortパラメータ32206に与えられる値が「真」の場合、ソート成分22112はランタイム時にグラフの一部として含まれる。さもなければ、ソート成分22112の規定された条件解釈に応じて、ソート成分22112はグラフから完全に削除され又はフローで置換される。
【0249】
スクリプト実装
GDE1002はパラメータ化グラフの構築を容易にするが、フォームベースのインタフェースの提供が望まれる非グラフプログラムが時として存在する。アプリケーションレベルPL及びリポジトリ1004を使用し、任意のシェルスクリプトをパラメータ化することができる。例えば、アプリケーションの記述を以下と同様の構造でファイルに書き込むことができる:
【数8】
【0250】
汎用コンピュータ実装
本発明は、ハードウェア若しくはソフトウェア、又はその両方の組合せ(例えばプログラマブルロジックアレイ)によって実装することができる。特別の定めがない限り、本発明の一部として含まれるアルゴリズムは或る特定のコンピュータ又は他の機器に固有に関係しない。とりわけ、様々な汎用マシンを本明細書の教示に従って書かれたプログラムと共に使用することができ、又は所要の方法ステップを実行するためのより特化した機器を構築した方が便利な場合もある。しかし、本発明は好ましくは1つ又は複数のプログラマブルコンピュータシステム上で実行される1つ又は複数のコンピュータプログラムによって実装され、かかるプログラマブルコンピュータシステムは、少なくとも1個のプロセッサ、少なくとも1つのデータ記憶システム(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)、少なくとも1つの入力装置又はポート、及び少なくとも1つの出力装置又はポートをそれぞれ含む。プログラムコードは、本明細書に記載の機能を実行するためにプロセッサ上で実行される。
【0251】
かかる各プログラムは、コンピュータシステムと通信するために所望の任意のコンピュータ言語(機械語、アセンブリ言語、又は高水準の手続き型プログラミング言語、論理プログラミング言語、若しくはオブジェクト指向プログラミング言語を含む)によって実装することができる。何れにせよ、言語はコンパイル型言語又はインタプリタ型言語とすることができる。
【0252】
本明細書に記載の手続きを実行するために記憶媒体又は装置がコンピュータシステムによって読み取られるときコンピュータを構成し動作させるために、かかる各コンピュータプログラムは、好ましくは汎用の又は専用のプログラマブルコンピュータによって読取可能な記憶媒体又は装置(例えば固体媒体、磁気媒体、又は光学媒体)上に記憶される。本発明のシステムは、コンピュータプログラムで構成されるコンピュータ可読記憶媒体として実装されるとも考えられ、そのように構成される記憶媒体は、本明細書に記載の機能を実行するようにコンピュータシステムを特定の且つ既定のやり方で動作させる。
【0253】
本発明の幾つかの実施形態を説明してきた。それでもなお、本発明の趣旨及び範囲から逸脱することなしに様々な修正を加えることができることが理解されよう。例えば、上記の幾つかの機能ステップは、全体の処理に実質的に影響を与えることなしに異なる順序で実行することができる。例えば、
図13のステップ4002及び4012は逆の順序で実行することができる。従って他の実施形態も添付の特許請求の範囲に含まれる。
【0254】
図36は、動的ローディング技法を使用することができる例示的なデータ処理システム1100を示す。システム1100は、記憶装置やオンラインデータストリームへの接続等、1つ又は複数のデータ源を含み得るデータ源1101を含み、そのそれぞれは様々な記憶フォーマット(例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット)の何れかによってデータを記憶することができる。実行環境1104は、実行時前モジュール1105及び実行モジュール1106を含む。実行環境1104は、UNIXオペレーティングシステム等の適切なオペレーティングシステムの制御下で1台又は複数台の汎用コンピュータ上にホストされ得る。例えば実行環境1104は、ローカルの(例えばSMPコンピュータ等のマルチプロセッサシステム)、ローカルに分散される(例えばクラスタとして結合される複数個のプロセッサ、又はMPP)、遠隔的に、遠隔的に分散される(例えばローカルエリアネットワーク(LAN)及び/又は広域ネットワーク(WAN)によって結合される複数個のプロセッサ)、又はそれらの任意の組合せの複数個の中央処理装置(CPU)を使用するコンピュータシステムの構成を含む、多重ノード並列計算環境を含み得る。
【0255】
実行時前モジュール1105は、データフローグラフをコンパイルすること、実行環境1104にとってアクセス可能なデータ記憶システム1107との間でコンパイル済みデータフローグラフを記憶/ロードすること、パラメータ値を解決し、解決済みの値をパラメータにバインドすること等、データフローグラフ及び他の実行可能プログラムの実行に備えて様々なタスクを実行するように構成される。一部の事例では、実行時前モジュール1105がデータ源1101からのデータに応答してタスク(例えばコンパイル済みデータフローグラフをロードすること)を実行する。データ源1101を提供する記憶装置は実行環境1104にとってローカルとすることができ、例えば実行環境1104を実行するコンピュータに接続される記憶媒体(例えばハードドライブ1102)上に記憶され、又は実行環境1104にとって遠隔的とすることができ、例えば実行環境1104を実行するコンピュータと遠隔接続上で通信する遠隔システム(例えばメインフレーム1103)上にホストされる。
【0256】
実行モジュール1106は、実行時前モジュール1105によって生成されるコンパイル済みデータフローグラフを使用して出力データを生成し、そのデータは、データ源1101に戻されても良く且つ/又はデータ記憶システム1107内に記憶され得る。データ記憶システム1107は、開発者1109がデータフローグラフを設計することができる開発環境1108にとってもアクセス可能である。データフローグラフを表すデータ構造は、シリアル化されデータ記憶システム1107内に記憶され得る。
【0257】
実行モジュール1106は、様々な形態のデータベースシステムを含むデータ源1101の多岐にわたる種類のシステムからデータを受信し得る。データは、ことによるとヌル値を含むそれぞれのフィールド(「属性」又は「列」とも呼ばれる)の値を有するレコードとして編成され得る。データ源からデータを読み取るとき、実行データフローグラフは、そのデータ源内のレコードに関する最初のフォーマット情報を扱う成分を含み得る。一部の状況では、データ源のレコード構造が最初に分からない場合があり、代わりにデータ源を分析した後で決定され得る。レコードに関する最初の情報は、別個の値を表すビット数、レコード内のフィールドの順序、及びビットによって表される値のタイプ(例えば文字列、符号付き/符号なし整数)を含み得る。
【0258】
図37を参照し、実行モジュール1106によって実行されるデータフローグラフ1155の一例は、入力データ源1110からのデータを読み取り、離散的な作業要素のフローとして処理することを可能にする。作業要素の処理に関与する計算の様々な部分が、グラフの頂点(又はノード)として表される成分1120、1130、及び成分1120と成分1130とを接続するリンク1125等、グラフのリンク(又は弧、辺)によって表される成分間のデータフロー内で実行される。かかるグラフベースの計算を実装するシステムが、参照により本明細書に援用する米国特許第5,566,072号、グラフとして表現される計算の実行(EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS)の中で説明されている。このシステムに従って作られるデータフローグラフは、グラフ成分によって表される個々のプロセスの内外に情報を出し入れするための、プロセス間で情報を動かすための、及びプロセスの実行順序を定めるための方法を提供する。このシステムは、プロセス間の通信方法を選ぶアルゴリズムを含む(例えばグラフのリンクによる通信経路は、プロセス間でデータを渡すためにTCP/IP若しくはUNIXドメインソケットを使用することができ、又は共用メモリを使用することができる)。
【0259】
実行するための未コンパイルデータフローグラフを準備するプロセスは様々な段階を含む。データフローグラフの未コンパイル表現が、コンパイルプロセス中に使用される値を与えるデータフローグラフに関連する任意のパラメータと共に取り出される。静的パラメータの解決段階の間、(その値がランタイム前の解決のために指定される)静的パラメータが解決され、解決済みの値が静的パラメータにバインドされる。一部の事例では、静的パラメータの値を解決するために、計算を行って特定の値(例えば参照により本明細書に援用する「グラフベースの計算のためのメタデータの管理(MANAGING METADATA FOR GRAPH-BASED COMPUTATIONS)」と題された米国特許出願公開第2006/0294150号の中で記載されているようにメタデータ値)を導出する。一部のパラメータは、ランタイム時に又はその直前に後で解決されるよう未解決のままにされる動的パラメータとして指定することができる。例えば静的パラメータ値に基づき所定の条件が満たされない(又は満たされる)場合、条件付き成分として指定される成分が(例えばデータフローリンクによって置換されることにより)グラフから削除される。コンパイル段階の間、実行中に使用される、その成分及びリンクを含むデータフローグラフを表すデータ構造が生成される。コンパイルすることは、スクリプト言語内の埋込みスクリプトをバイトコード又は機械コードへとコンパイルすることも含み得る。ランタイム時に、データフローグラフに関連する任意の動的パラメータが解決済みの値にバインドされ、コンパイル済みデータフローグラフのデータ構造が1つ又は複数のプロセスを開始することによって、必要な任意のファイル(例えば動的パラメータによって識別されるファイル)を開くことによって、及び/又は任意の動的ライブラリをリンクすることによって起動される。このプロセスは、リンクによって表されるデータフローをセットアップするためのタスク(例えば共用メモリの割当てやTCP/IPストリームの開始)も実行する。参照により本明細書に援用する「グラフベースの計算における計算資源の管理(MANAGING COMPUTING RESOURCES IN GRAPH-BASED COMPUTATIONS)」と題された米国特許出願公開第2007/0271381号の中で記載されているように、一部の事例では単一のプロセス内で複数の成分を実行するようにデータ構造が構成される。
【0260】
データフローグラフは様々な抽象化レベルで規定することができる。それ自体が成分及びリンクを含むデータフローグラフである「下位グラフ」は、単一の成分として別の親データフローグラフ内で表すことができ、下位グラフを親データフローグラフに接続するリンクだけを示す。一部の事例では、開発環境1108内で親データフローグラフの成分及びリンクを隠すために下位グラフが使用されるが、成分及びリンクを表すデータは既に親データフローグラフ内に統合されている。以下でより詳細に説明するように、一部の実施形態では、下位グラフが親データフローグラフの中に最初は含まれていないが、親データフローグラフ内にロードされる成分及びリンクを表すデータ構造を含むコンパイル済みデータフローグラフとして始まる「マイクログラフ」から後で導出される。
【0261】
図37を参照し、データフローグラフ1155は、この例ではデータセット成分1110によって表されるデータ源から連続した入力データフローを受け付けることができる。データフローは、データフローグラフ1155の動作中に盛衰し得るが、必ずしも区別可能な始まり又は終わりを有さないという意味では連続的である(例えばクレジットカードトランザクションや入力システム内で受け付けられる注文のフロー)。加えて、データフローグラフ1155は、この例ではデータセット成分1140によって表される出力データリポジトリに連続した出力データフローを与えることができる。一部のデータフローグラフは、連続したデータフローを無期限にわたり処理する連続したデータフローグラフとして実行されるように設計され、一部のデータフローグラフは、離散的なデータバッチを処理するために実行を開始し、バッチの処理後に実行を終了するバッチデータフローグラフとして実行されるように設計される。データフローグラフのデータ処理成分1120及び1130は、一連の命令、下位グラフ、又はそれらの何らかの組合せを含み得る。
【0262】
一部の構成では、専用成分1130が、動的に取り出されるように構成される一種の専用の下位グラフであり、親データフローグラフ内に埋め込まれるマイクログラフ1160をロードし得る。マイクログラフは、専用成分1130等、親データフローグラフの親成分と共に動的に埋め込むことができる。一部の構成では、マイクログラフ1160が、過去にコンパイルされデータ記憶システム1107内に記憶されたデータフローグラフから導出される。一部の構成では、マイクログラフ1160は、データ記憶システム1107からロードされるとき未コンパイル形式のままである。例えば、コンパイル済みデータフローグラフをロードする代わりに、専用成分1130はグラフコンパイル手続きを開始して、専用成分1130を含むデータフローグラフが使用直前にコンパイルされているマイクログラフを実行できるようにすることができる。このグラフコンパイル手続きは、専用成分1130の外部で又は専用成分1130の内部で行うことができる。一部の構成では、データ記憶システム1107内に記憶される前にマイクログラフ1160がシリアル化される。概してシリアル化は、データフローグラフが永続メモリ内に又はメモリバッファ内に容易に記憶され得る形式になるように、コンパイル表現又は未コンパイル表現のデータフローグラフを0と1のバイナリストリームに変換するプロセスである。マイクログラフの高速ローディングが望ましい実装形態では、典型的にはデータフローグラフがデータ構造と共にコンパイル済み表現にシリアル化され、データ記憶システム1107内に記憶され、それによりシリアル化されたコンパイル済みデータフローグラフを容易に取り出すことができ、データ構造がランタイム時に動的にデシリアル化されロードされる。コンパイルは、コンピュータによって実行されるように、データフローグラフとして表されるプログラムを含むコンピュータプログラムを準備するプロセスである。コンパイルは、機械コード又はコンピュータ上で実行される準備が整った命令の生成、又はコンピュータ上で実行される仮想マシンによって実行される中間コード、例えばJavaバイトコードをもたらし得る。データフローグラフの場合、コンパイルは、データフローグラフの成分及びリンクを表すデータ構造をコンピュータ上で実行する準備が整った形式で生成することを含む。
【0263】
専用成分1130の入力リンク1125に沿ってデータフローグラフ1155を流れるデータは、専用成分1130がマイクログラフ1160をロードし、マイクログラフ1160をデータフローグラフ1155内に統合する間一時的にバッファ内に記憶される。同様に、マイクログラフがデータフローグラフ1155から切り離されアンロードされる間、データフローはバッファ内に蓄積することを認められる。一部の構成では、切り離されたマイクログラフが、後でアクセスされるように(例えばキャッシュメカニズムを使用して)メモリ内にロードされたままでも良い。
【0264】
バッファリングは、成分への作業要素の入力フローを与えるリンクのための入力待ち行列を使用して実装されるフロー制御メカニズムを使用するように構成することができる。このフロー制御メカニズムは、ディスクドライブ等、概して大容量だが低速の不揮発性ローカル記憶域に必ずしも書き込むことなしに、データがデータフローグラフの成分間を流れることを可能にする。入力待ち行列は、概して不揮発性メモリよりも小容量且つ高速の揮発性メモリ内に作業要素を保持できるほど小容量に保つことができる。この記憶空間及び時間の潜在的な節約は、非常に大きいデータセットについてさえ存在する。成分は、入力待ち行列の代わりに又は入力待ち行列に加えて出力バッファを使用することができる。2つの成分がフローによって接続される場合、上流成分は下流成分が作業要素を消費し続ける限り下流成分に作業要素を送信する。下流成分が後れを取る場合、上流成分は下流成分の入力待ち行列を埋め、入力待ち行列が再び空になるまで機能を停止する。
【0265】
一部の構成では、マイクログラフ1160が、スケジューリングプロセスによるスケジュールベースで、バッチデータフローグラフの一部として、又はコマンドラインから実行され、親データフローグラフの専用成分内に必ずしもロードされない。或いは、スケジューラが専用成分を使用して、待ち行列からのメッセージに応答して適切なマイクログラフをロードする専用成分を含む実行データフローグラフに連続したメッセージフローを与える待ち行列にメッセージを送信することにより、バッチ処理のためのマイクログラフを起動することができる。
【0266】
1 専用成分
図38Aを参照し、一実施形態では、専用成分38200が複数の入力38205、38210、38215を受け付け、複数の出力38220、38225、38230、及び38235を送るように構成される。入力は、データ入力38205、38210、及び制御入力38215を含む。出力は、データ出力38220、38225、38230、及びステータス出力38235を含む。制御入力38215は、(例えば受信される制御要素内で)実行するためのマイクログラフ38240の識別情報、及び任意選択的にマイクログラフ38240を実行するために使用される1組のパラメータを受け付ける。概して、専用成分38200は、データ入力38205や38210等のそれぞれのデータ入力ポート上で、入力作業要素のゼロ以上のフローを受け付けることができる。ステータス出力38235は、マイクログラフ38240の実行から、終了ステータス及び追跡情報を含むステータスレコードを作り出す。加えてこの専用成分は、データ出力38220、38225、38230等のそれぞれのデータ出力ポート上で、出力作業要素のゼロ以上のフローを作り出す。一実施形態では、専用成分38200が通常の実行中に1つのステータスレコードを作り出し、1つの制御レコードを受け付ける。
【0267】
制御入力38215は、ロードすべき対応するマイクログラフをそれぞれ識別する一連の複数の制御要素を受信することができる。各制御入力要素は、識別されるマイクログラフによって処理される作業単位を表す、データ入力上で受信される作業要素のフロー内の作業要素の異なる部分集合に関連する。一部の事例では、作業単位内の1つ又は複数の作業要素を分析することに基づきマイクログラフを識別する制御要素を生成し、その作業単位を処理するのに適切なマイクログラフを選択する。一部の事例では、マイクログラフを識別する制御要素と識別されるマイクログラフによって処理される作業単位を表す作業要素とが独立に受信され、様々な技法の何れかを使用して互いにマッチされる。例えば、マイクログラフを識別する制御要素が最初に受信され、作業単位の少なくとも1つの作業要素内に登場するキー値を対応する制御要素にマッチすることにより、識別されるマイクログラフによって処理される作業単位を表す作業要素が決定される(例えば作業単位内の最初の作業要素だけ、又は作業単位内の全ての作業要素)。或いは、「デリミタ作業要素」と呼ばれる作業要素が、同じ作業単位に属する作業要素の様々なシーケンスを分けるデリミタとして機能し得る。或いは専用成分200は、それぞれの制御要素に関連する連続した作業単位に属するように所定数の作業要素を受信するように構成される。
【0268】
マイクログラフ38240は、専用成分38200に適合するように設計されているマイクログラフの一群から選択することができる。例えば、マイクログラフ38240の入力ポート及び出力ポートの数は、専用成分38200の入力ポート及び出力ポートの数に一致し得る。この例では、マイクログラフ38240が2つの入力ポート及び3つの出力ポートを有し、それらのポートは、入力フローを受信するように構成されるマイクログラフ38240の2つの異なる成分、及び出力フローを与えるように構成されるマイクログラフ38240の3つの異なる成分上に位置し得る。或いは、マイクログラフ38240の複数の入力ポート又は出力ポートは同じ成分上に位置しても良い。
【0269】
一部の実施形態では、専用成分38200が既定の状態に関してマイクログラフ38240をモニタし、それらの状態に応答し得る。例えば専用成分38200は、マイクログラフ38240の成分を実行するプロセスをモニタするための別個のプロセスを使用して、マイクログラフ38240の実行中の待ち時間が最大閾値又はタイムアウト状態に関して上回るかどうかを判定することができる。それに応答し、専用成分38200が、例えばマイクログラフ38240の第2のインスタンスをロードすることによってその状態に応答し得る。同様に誤り状態もモニタされる。誤り状態を検出することに応答し、専用成分38200は誤りのログを取り、誤り状態に基づいて作業単位をリダイレクトすることができ、必要な場合はマイクログラフ38240を再開し、ステータス出力38235によって誤りを報告することができる。マイクログラフ38240を再開することは、専用成分38200を含む親データフローグラフの他の如何なる成分にも割り込む必要がない。
【0270】
一部の実施形態では、専用成分38200が入力ポート上のデータフローを分析し、どのマイクログラフ38240を実行するのかを決定する。他の実施形態では、実行するためのマイクログラフ38240の名称又は他の識別情報がデータフローの一部として専用成分38200に供給される。更に他の実施形態では、マイクログラフ38240を識別する情報が専用成分38200の制御入力38215によって供給される。
【0271】
専用成分38200は、データ記憶システム1107からマイクログラフ38240をロードし、以下でより詳細に説明するように専用成分38200を含むデータフローグラフ内にマイクログラフ38240を埋め込み、マイクログラフ38240がデータフローを処理することを可能にする。
【0272】
操作が完了すると、専用成分38200がマイクログラフ38240を削除する。一部の実施形態では、専用成分38200が、記憶位置内に記憶されるマイクログラフキャッシュ内にマイクログラフ38240を記憶することができ、かかるマイクログラフキャッシュからは、後でアクセスするためにデータ記憶システム1107からよりもマイクログラフ38240に相対的に容易にアクセスすることができる。一部の実施形態では、マイクログラフ38240がロードされ、統合され、削除されている間、専用成分38200が入力データをバッファに入れることができる。
【0273】
2 マイクログラフの構造
図38Bを参照し、マイクログラフ38240の一例は、上流成分にリンクされる1つ又は複数の入力ポートに到着するデータフロー内の入力作業要素に対して操作を行い、下流成分にリンクされる1つ又は複数の出力ポートを離れるデータフロー内の出力作業要素を作り出す、データ処理成分38305、38310、38315、及び38320を含む。マイクログラフ38240は、マイクログラフ38240を専用成分38200内に埋め込むプロセスを助けるように構成される、「インタフェース成分」と呼ばれる成分38300A、38300B、及び38302A、38302B、38302Cも含む。インタフェース成分は、実行するために専用成分内に埋め込む必要がない独立したデータフローグラフとしてマイクログラフを実行することも可能にする。
【0274】
インタフェース成分は、マイクログラフを親専用成分のポートに接続するために使用される。マイクログラフを専用成分内に埋め込むことは、各インタフェース成分を専用成分の正しいポートとどのように対にするのかを決定することを含む。入力インタフェース成分(38300A、38300B)は出力ポートを有し、出力インタフェース成分(38302A、38302B、38302C)は入力ポートを有する。入力インタフェース成分が専用成分の入力ポートと対にされると、その入力ポートと入力インタフェース成分の出力ポートがリンクされるポートとの間にデータフローリンクが生成される。同様に、出力インタフェース成分が専用成分の出力ポートと対にされると、出力インタフェース成分の入力ポートがリンクされるポートとその出力ポートとの間にデータフローリンクが生成される。
【0275】
インタフェース成分をそのそれぞれの専用成分の入力ポート及び出力ポートと正しく対にすることは、以下のように決定することができる。インタフェース成分及び専用成分のポートは、任意選択的に識別情報でラベル付けすることができる。専用成分の入力/出力ポートに割り当てられる識別情報と入力/出力インタフェース成分に割り当てられる識別情報との間に一致が認められる場合、そのポートとそのインタフェース成分とが対にされる。識別情報間の一致は厳密でも厳密でなくても良い(例えば識別情報の一部の接頭辞又は接尾辞間の一致を見つけること)。或る対にする手続きでは、厳密な一致が明らかにされた後、数字サフィックスを有するインタフェース成分が一致する数字サフィックスを有するポートにマッチされる(例えば専用成分の「out1」ポートは「Micrograph Output-1」インタフェース成分と対にされる)。
【0276】
マイクログラフが(例えば試験のための開発環境1108からのコマンドに応答して)専用成分の外側で実行される場合、インタフェース成分がデータセット成分の機能を提供し、インタフェース成分の出力ポート又は入力ポートに接続されるリンク上のデータフロー内の作業要素のソース又はシンクを提供する。マイクログラフが専用成分内に埋め込まれているかどうかに基づいて適切な機能が決定される。インタフェース成分は、マイクログラフが専用成分内に埋め込まれている場合はマイクログラフと専用成分との間で作業要素を送信するための命令、及びマイクログラフが専用成分内に埋め込まれていない場合はマイクログラフと記憶位置との間で作業要素を送信するための命令をそれぞれ含む。記憶位置は、入力作業要素を与えるために読み取られる、又は出力作業要素を受け取るために書き込まれるファイルとすることができる。
【0277】
一部の実施形態では、マイクログラフ内に含まれ得るデータ処理成分(この例では成分38305、38310、38315、及び38320)の機能に一定の制約を加えることによってマイクログラフ38240が構成される。例えば一部の実施形態では、マイクログラフ38240のデータ処理成分38305、38310、38315、及び38320が(例えば参照により本明細書に援用する米国特許出願公開第2007/0271381号の中でより詳細に説明されているように単一のプロセス内に折り畳まれることによって)単一のプロセス内で実行できることが要求され得る。一部の実施形態では、マイクログラフが、サブスクライブ源(待ち行列等)からデータを受信するサブスクライブ成分をサポートしない。一部の実施形態では、マイクログラフがバッチデータフローグラフとして構成されることが要求され得る。一部の実施形態では、マイクログラフ38240によって実行される如何なるトランザクション操作も単一のトランザクションに収まらなければならない。他の実施形態では、マイクログラフ38240のトランザクションの側面、例えばチェックポイント、トランザクションコンテキスト、及び多相コミットが制御入力38215によって管理される。
【0278】
データフローグラフ処理では、連続したデータフローが従来のトランザクションセマンティクスに影響を及ぼし得る。チェックポイント操作は、データフロー内の或る箇所において十分な状態情報を記憶して、データフロー内のその箇所からデータフローグラフが再開することを可能にすることを含む。チェックポイントを余りに頻繁に取る場合は性能が落ちる。チェックポイントを余りにも稀にしか取らない場合、トランザクションが失敗した場合の回復手続きがより複雑且つ多くの資源を必要とするようになる。トランザクションコンテキストは、その操作がより大きいトランザクションの一部であることをマイクログラフに知らせるために使用され得る。このトランザクションは、単一のデータ源に対して作用する複数の成分を包含するより大きいトランザクションとすることができ、又は例えば2相コミット操作において複数のデータ源にわたってトランザクションを調整するのに必要な情報を含み得る。
【0279】
3 マイクログラフの管理
図39を参照し、一実施形態では、専用成分39405が、(例えばローカルメモリ内に記憶される)専用成分にとってアクセス可能なキャッシュ内に複数のマイクログラフを一度にロードされ得る。この例では、1つのマイクログラフ39430が専用成分39405を含むデータフローグラフ内に接続される。専用成分39405の入力39440はリンクによってマイクログラフ39430の入力39445に接続され、マイクログラフ39430の出力39450はリンクによって専用成分39405の出力39455に接続される。マイクログラフ39430の入力39440及び出力39450は、例えば入力インタフェース成分及び出力インタフェース成分、又はマイクログラフを専用成分内に埋め込むための他の任意のメカニズムを表す。
【0280】
他のマイクログラフ39410、39415、39420、及び39425を記憶するキャッシュは、接続されているマイクログラフ39430を記憶する同じメモリ内に位置し得る。一部の実施形態では、マイクログラフ39410、39415、39420、39425、及び39430が、専用成分39405を実行する同じプロセス内のスレッドとして、又はそのプロセスの子プロセスとして実行され得る。或いは、マイクログラフ39410、39415、39420、39425、及び39430は、そのプロセスの同じメインスレッド内で実行され得る。一部の実施形態では、専用成分39405がマイクログラフ39410、39415、39420、39425、及び39430の複数のコピーを実行する。一部の実施形態では、専用成分39405は、キャッシュ内に記憶されている被選択マイクログラフのコピーを使用してから、そのコピーが(元のマイクログラフの変更があったことを示す)「ダーティ」として印付けされていない限り、データ記憶システム1107内に記憶された元のマイクログラフにアクセスする。被選択マイクログラフのコピーがキャッシュ内にない場合、専用成分39405がマイクログラフをデータ記憶システム1107からロードする。一部の実施形態では、被選択マイクログラフが(例えばキャッシュ内のエントリによって)「オフライン」状態にあると示され、かかる状態は被選択マイクログラフが現在使用できないことを示す(例えばそのマイクログラフは開発者によって修正されているプロセスにあり得る)。それに応答し、専用成分は被選択マイクログラフをロードする際の誤りを示すことができ、又は代わりのマイクログラフ(例えば同様の機能を有する別のマイクログラフ)をロードすることができる。
【0281】
図40Aを参照し、或るシナリオでは、単一の専用成分40505がデータフロー内に同時に統合される複数のマイクログラフ40510、40515、及び40520を有する。作業要素を入力データフローから複数のデータフローへと分割する分割成分40557を使用し、専用成分40505の入力ポート40525が、マイクログラフ40520、40515、及び40510の入力40530、40545、40555にそれぞれ接続される。複数のデータフローから作業要素を収集し、それらを単一の出力データフローへとマージする(「収集成分」と呼ばれる)成分40562を使用し、マイクログラフの出力40535、40550、及び40560が専用成分40505の出力ポート40540に接続される。この構成では、専用成分40505が入力データをマイクログラフ40510、40515、及び40520にルーティングすることができる。例えば、成分が同一マイクログラフの別個のコピーである場合、専用成分40505は分割を行うとき負荷平衡アルゴリズム(例えばラウンドロビンや最低利用等)を利用することができる。
【0282】
図40Bを参照し、別のシナリオでは、データフローグラフ40565が複数の専用成分を含み、高度にカスタマイズ可能なコンテナデータフローグラフに構成されるようにマイクログラフの柔軟な組合せを可能にする。この例では、(入力データのバッチ又は入力データの連続ストリームを表し得る)データセット成分40570からの作業要素が(例えば作業要素を再フォーマットするために)データ処理成分40572によってまず処理され、次いでリンク40574上で第1の専用成分40576に送信される。特定の種類の作業要素を検出することに応答し、成分40576は検出した種類の作業要素を処理するように構成されるマイクログラフ40578をロードする。第1の専用成分40576からの処理済みの出力作業要素が、マイクログラフ40582をロードする第2の専用成分40580に送信される。この構成では、第2の専用成分40580内にロードするために選択されるマイクログラフ40582が、第1の被選択マイクログラフ40578の結果に依存し得る。その結果生じる出力作業要素がデータセット成分40584に送信される。データフローグラフ内の戦略的位置にある専用成分を使用し、様々なマイクログラフの多数の組合せを動的にロードすることができる。この単純な例では、第1の専用成分40576内にロードできる10個の異なる可能なマイクログラフと、第2の専用成分40580内にロードできる10個の異なる可能なマイクログラフとがある場合、或るデータフローを100個の異なる実行データフローグラフに分割するのに比べて潜在的にはるかに少ない資源が必要な状態で、且つ作業単位ごとに100個の異なるデータフローグラフの1つを始動することに比べて潜在的にはるかに高速の待ち時間を伴い、データフローが処理されている間に要求に応じて動的に構築することができる100個もの数の異なるデータフローグラフがある。
【0283】
4 前処理及び後処理
専用成分は、ロードされたマイクログラフ内の成分に加えて他の成分も含み得る。
図41を参照し、一実施形態では、専用成分41605がマイクログラフを実行する前の前処理と、マイクログラフを実行した後の後処理とを含む(図面ではマイクログラフ41615を取り囲む前処理成分41610及び後処理成分41620として表す)。前処理作業及び後処理作業は、例えばトランザクション管理に関係し得る。一部の実施形態では各マイクログラフ41615が別々のトランザクションを表し、その場合、前処理がトランザクションを開始することができ、後処理がそのトランザクションを終了し得る。他の実施形態では、マイクログラフ41615がより長いトランザクションの中のチェックポイントを表し得る。例えばマイクログラフ41615は、2相コミットプロトコルを使用するより長いトランザクションの一部であり得る。かかるトランザクションは、例えば複数の異なるマイクログラフや同じマイクログラフの複数回の実行を使用して処理され得る。
【0284】
前処理成分41610はデータ記憶域(不図示)からマイクログラフ41615をロードし、ことによるとロードしたマイクログラフを後でアクセスするためにデータキャッシュ内に記憶し、又はメモリ内のキャッシュ(不図示)のマイクログラフのロードされたバージョンにアクセスし、それを専用成分41605内に統合することができる。後処理成分41620は、ロードされたマイクログラフ41615を専用成分41605のデータフローに対するその統合から削除することができる。例えばマイクログラフ41615による処理のためにデータフロー内のレコードを準備することによる前処理(例えばレコードの再フォーマット)や、専用成分41605の出力に接続される成分による処理のためにマイクログラフ41615から受信されるレコードを準備することによる(例えばレコードの再フォーマットによる)後処理を含む、他の様々な前処理機能及び後処理機能を実行することができる。
【0285】
5 データベース接続管理
図42を参照し、一部のシナリオでは、様々な種類のデータベースにアクセスできるようにするために様々な成分が必要とされる。例えば、或る販売業者によって提供されるデータベース42706にアクセスするには成分42702が必要である一方、別の販売業者によって提供されるデータベース42708にアクセスするには別の成分42704が必要である。概して、成分42702は成分内に統合されるライブラリ42710、例えばデータベース42706の販売業者によって供給されるライブラリにアクセスすることによってデータベース42706にアクセスする。同様に、成分42704は成分内に統合される別のライブラリ42712、例えばデータベース42708の販売業者によって提供されるライブラリにアクセスすることによってデータベース42708にアクセスする。ライブラリは特定の成分内にコンパイルすることができ、又は特定の成分に動的にリンクすることができる。
【0286】
図43を参照し、専用成分43802は複数の異なるマイクログラフ43804、43806、及び43808を含み得る。この例では、マイクログラフ43808が専用成分43802内に埋め込まれ、マイクログラフ43804及び43806が必要に応じて動的に埋め込まれるようにアクセス可能なキャッシュ内にロードされる。マイクログラフの一部は或るデータベース43706にアクセスすることができ、他のマイクログラフは別のデータベース43708にアクセスすることができる。従来、2つのデータベースにアクセスすることは、第1のデータベース43706をサポートするためのライブラリ43710、及びもう一方のデータベース43708をサポートするための別のライブラリ43712が専用成分43802に統合されることを必要とし得る。複数の異なるデータベースライブラリを統合することは、専用成分43802に関連するバイナリサイズの増加、並びに販売業者によって供給される或るライブラリ43710が別の販売業者によって供給される別のライブラリ43712に適合しない場合は予測不能な挙動を引き起こし得る。例えば不適合は、競合する識別名や異なるコンパイルモデルを含み得る。
【0287】
不適合を回避し且つ/又はバイナリサイズを減らす1つの方法は、専用成分からライブラリを削除し、代わりに、専用成分を実行しているプロセスとは別のコンピュータプロセスにそれらのライブラリをアクセスさせることである。
図44Aを参照し、データベースライブラリ44710及び44712が専用成分44902から削除されている(例えば成分44902にコンパイルされておらず又は動的にリンクされていない)。マイクログラフ成分44904、44906、及び44908は、クライアント/サーバインタフェース上でライブラリ44710、44712にアクセスすることによってデータベース44706、44708にアクセスする。ライブラリ44710、44712にアクセスするために、専用成分44902は統合クライアントスタブ44910を使用し、統合クライアントスタブ44910は、プロセス間通信を使用して外部プロセス内で実行される対のサーバスタブ44912と通信する。例えば、外部プロセス及び専用成分44902は共用メモリセグメントにアクセスすることによってデータをやり取りすることができる。同様に、サーバスタブ44920を実行する外部プロセスにアクセスするために、専用成分44902は、プロセス間通信を使用して外部プロセス内で実行されるサーバスタブ44920と通信する別の統合クライアントスタブ44918を使用する。
【0288】
サーバスタブ44912は、データベース44706へのアクセスを提供するためにデータベースライブラリ44710と統合する。同様に、サーバスタブ44920は、データベース44708へのアクセスを提供するためにデータベースライブラリ44712と統合する。概して、クライアントスタブ44910、44918はデータベースライブラリ44710、44712よりも小さいメモリフットプリントを有し、従って専用成分がより少ないメモリ資源を使用することを可能にする。加えて、データベースライブラリが専用成分44902の外に移動されているので、データベースライブラリ44710、44712間の不適合のリスクがない。
【0289】
図44Bを参照し、一部の実施形態では、クライアントスタブ44910、44918、及びサーバスタブ44912、44920が、データベースライブラリ44710、44712のそれぞれのアプリケーションプログラミングインタフェース(API)を密に反映するように構成される。マイクログラフ44904、44906、及び44908をライブラリAPIの違いから隔てるために、専用成分44902内に抽象化層44930を統合する。抽象化層44930は、様々なデータベースにアクセスする必要があり得るマイクログラフ内の複数の異なる成分に単一のAPIを提供し、その単一のAPIは、それらのデータベースに関するデータベースライブラリの違いと無関係に標準のデータベース動作を実行するためのものである。一部の実施形態では、抽象化層44930がマイクログラフの成分からの要求をクライアントスタブ44910、44918のライブラリ固有APIに対する特定の呼出しへと変換する。一部の実施形態では、抽象化層44930がマイクログラフ成分からの要求を汎用呼出しとして渡し、各クライアントスタブは、汎用呼出しからその個々のサーバスタブAPIに対するライブラリ固有呼出しへの変換を行うように構成される。
【0290】
6 コンパイル及びパラメータ
図45を参照し、一実施形態では、データフローグラフのコンパイル及び実行システム451000が、データフローグラフコンパイラ451015、パラメータアナライザ451030、データフローグラフローダ451035、及びデータフローグラフ実行エンジン451040を含む。コンパイラ451015は、パラメータセットデータ記憶域451005からのパラメータセット内のパラメータに基づき、未コンパイルデータフローグラフデータ記憶域451010からの、マイクログラフを含む未コンパイルデータフローグラフを処理する。所与のパラメータに関連する値は、データフローグラフの様々な特性の何れかを決定し得る。コンパイラ451015は、パラメータセットの値を使用してデータフローグラフをコンパイルしてコンパイル済みデータフローグラフを生成する。コンパイル済みデータフローグラフは、コンパイル済みデータフローグラフデータ記憶域451020内に記憶される。データ記憶域451010及び451020は、例えばデータ記憶システム1107内にホストされ得る。コンパイラ451015、パラメータアナライザ451030、及びローダ451035は、例えば実行時前モジュール1105の一部として実装することができる。実行エンジン451040は実行モジュール1106の一部として実装することができる。
【0291】
パラメータセットデータ記憶域451005はパラメータセットを含み、各パラメータセットはデータフローグラフに関連し得る。パラメータセットは、パラメータ要素群を含む。それらの要素は、(例えば計算を行うことによって、及び一部の事例では他の参照パラメータの値を見つけることによって)評価されるときパラメータにバインドされる値に解決される、パラメータ名称及び式を含む。各未コンパイルデータフローグラフは、1つ又は複数のパラメータセットに関連し得る。一部のパラメータはコンパイルプロセスに影響し得る。例えば一部のパラメータは、特定の条件付き成分がデータフローグラフのコンパイルバージョンに含まれるかどうかに影響し得る。一部のパラメータは、コンパイル済みデータフローグラフのロード及び起動に影響し得る。例えばパラメータの値は、コンピュータ上に記憶されるファイルへのパス、又は入力データを含む若しくは出力データの対象であるデータセット成分に関連する記憶位置(例えばデータベース内のテーブルを表す記憶位置)の名称であり得る。パラメータの値は、どれ位のやり方並列、所与の成分を実行しなければならないのかを決定し得る。パラメータの値は、成分間のリンクのデータフローが、リンクされる成分を実行する異なるプロセッサ及び/又はコンピュータ間の境界を横断するかどうかを判定することができ、横断する場合、共用メモリフローではなくTCP/IPフローを割り当てさせる。一部のシナリオでは、パラメータの値が他のパラメータに依存し得る。例えば、通貨換算参照ファイルの名称は日付を規定するパラメータに依存し得る。
【0292】
概してパラメータは、コンテキストに基づくパラメータスコーピングのための規則に従って値にバインドされる。所与のパラメータは、第1のコンテキスト内に1つの値を有し、別のコンテキスト内に別の値を有し得る。パラメータは、(例えばパラメータがコンパイルプロセスに影響し得る場合はコンパイラ451015によって)コンパイル中に、(例えばローダ451035が実行エンジン451040のためにコンパイル済みデータフローグラフのデータ構造をメモリ内にロードする場合は)ランタイム時に、データフローグラフが実行されている間(例えばファイルが読み取られ又は書き込まれる直前までファイル名称を与えるパラメータが解決されるのを遅らせる)、又は一部の事例では様々な時点の組合せにおいて値にバインドされ得る。パラメータの値は、例えばユーザインタフェース上で(例えばプロンプトに応答して)利用者によって定められ、ファイルから定められ、データ源内に含まれ、又は同じコンテキスト若しくは異なるコンテキストにおいて別のパラメータに関して定められ得る。例えば、別のパラメータとの「~と同じ(same as)」関係を有するようにパラメータを指定することにより、パラメータは異なるコンテキストからインポートされ得る(例えば異なる成分のコンテキスト内で評価されるパラメータ)。
【0293】
データフローグラフに関するパラメータは、(例えばコンパイラ451015による)コンパイル中等、任意の入力データが受信される前にバインドされ得る。データフローグラフのコンパイル前又はコンパイル中にバインドされるかかるパラメータは「静的パラメータ」と呼ばれる。データフローグラフに関するパラメータは、(例えばデータフロー内の新たなデータバッチ又は最初の作業単位を受信することに応答してローダ451035によって)ランタイムの直前や、(例えばデータフロー内の新たな作業単位を扱うために新たなマイクログラフをロードすることに応答して実行エンジン451040によって)ランタイム中等、新たな入力データを受信することに応じてバインドされても良い。データフローグラフのコンパイル後にバインドされ、ランタイムにより近いかかるパラメータは「動的パラメータ」と呼ばれる。一部の事例では、動的パラメータは、データフロー内の新たなデータバッチ又は作業単位ごとに再評価する必要がない。静的パラメータは、典型的にはグラフがコンパイルされている間に評価され、コンパイル済みデータフローグラフに影響し得る。但し、例えばコンパイルがランタイムまで行われない場合、静的パラメータをランタイム時に評価することもできる。動的パラメータはランタイム時に評価され、データフローグラフを始動する全体の待ち時間に寄与し得るので、一部の実施形態では、動的パラメータの機能を制限することによって動的パラメータの評価を最適化することができる。例えば動的パラメータは、特定のデータタイプ(例えば文字列)に限定することができ、特定の式の中で参照されなくても良く、より制限されたバインディングを有する(例えば「~と同じ(same as)」バインディングによって直接又は間接的に参照されない)ことがある。しかし他の実施形態では、動的パラメータがその機能の点で制限されなくても良く、他のパラメータと同様に利用される。
【0294】
コンパイラ451015が、コンパイルプロセス中に静的パラメータと動的パラメータとを区別することを可能にする様々なやり方がある。1つの技法は、パラメータセット内の動的パラメータにフラグ又は専用構文を使用し、動的パラメータをバインドしないままにしておくべきことをコンパイラに知らせる。別の技法は、パラメータセットの静的パラメータ及び動的パラメータを様々な部分集合に分け、静的パラメータの部分集合だけをコンパイラ451015に与える。動的パラメータの部分集合はランタイム時にローダ451035に与える。コンパイラ451015は動的パラメータを解決された値にバインドしないが、コンパイラ451015は、コンパイル中に(例えば不当な構文や他の誤りに関して)動的パラメータを確認するように依然として構成することができる。所与の式は、静的パラメータ参照及び動的パラメータ参照の両方を含み得る。例えば、静的なディレクトリ名称パラメータはコンパイラ451015によって解決することができるが、動的なファイル名称パラメータは未解決のままにしておくことができ、コンパイラ451015は未解決の動的パラメータ参照を、動的パラメータとしてかかるパラメータ参照が認識されるので、コンパイルプロセスの間保つことができる。
【0295】
一部のシナリオでは、パラメータの存在又は値がデータフローグラフ内の成分のトポロジ及び/又は接続性に影響し得る。パラメータは、1つ又は複数の成分によって実行される操作をグラフの特定の実行中に実行すべきではないことを示し得る。このことは、2つの異なるデータ源に対して同じデータフローグラフが使用される場合に特に該当し得る。例えば、或るデータ源は第1のフォーマット(例えばUTF-8)とすることができ、別の情報源は少なくとも一部の文字に異なる符号化を使用する第2のフォーマットのテキストを含み得る。両方のデータ源を処理するデータフローグラフは、第2のフォーマットのテキストをUTF-8フォーマットに変換する必要があり得る。しかし、UTF-8データ源にアクセスするとき変換は必要ない。データが既にUTF-8フォーマットにあること、及び変換成分をバイパスできることをデータフローグラフに知らせるためにパラメータを使用することができる。一部の構成では、パラメータ値に基づいて条件付き成分を除外することは、コンパイル済みデータフローグラフ内で条件付き成分が削除され、データフローで置換されることをもたらし得る。条件付き成分についての更なる説明は、参照により本明細書に援用する米国特許第7,164,422号の中で見つけることができる。
【0296】
図45を再び参照し、コンパイラ451015は、未コンパイルデータフローグラフデータ記憶域451010から未コンパイルデータフローグラフを得る。コンパイラ451015は、データフローグラフをコンパイルするために使用するパラメータセットをパラメータセットデータ記憶域451005から得る。一部の事例では、複数の異なるパラメータセットを所与のデータフローグラフに使用することができ、パラメータセットごとに、グラフコンパイラ451015は未コンパイルデータフローグラフの対応するバージョンをコンパイルすることができる。データフローグラフの各コンパイルバージョンは、パラメータセット内のパラメータの値に基づき、一部の成分又は他の実行可能ステートメントを含み又は除外することができる。コンパイル済みデータフローグラフは、例えばコンパイル済みデータフローグラフがシリアル化されるとき、コンパイル済みデータフローグラフを生成するために使用されたパラメータセットからのバインドされたパラメータ値に関連付けられる。コンパイル済みデータフローグラフは、幾つかの異なるメカニズムの何れか(例えば参照用テーブル、データベース内の基本キーに対する外部キーの関係等)を使用し、関連するパラメータセットからのパラメータ値に関連付けられる。コンパイル済みデータフローグラフデータ記憶域451020は、例えば読書き操作が可能な任意のファイルシステム又はデータベースを使用して実装することができる。
【0297】
データフローグラフの実行中(「ランタイム」時)、入力データ源451025からデータがシステムに入る。入力データ源451025は多岐にわたる個々のデータ源を含むことができ、そのそれぞれは固有の記憶フォーマット及びインタフェース(例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット)を有し得る。個々のデータ源はシステム451000にとってローカルとすることができ、例えば同じコンピュータシステム(例えばファイル)上にホストされ、又はシステム451000にとって遠隔的とすることができ、例えばローカルエリアデータネットワークや広域データネットワーク上でアクセスされる遠隔コンピュータ上にホストされる。
【0298】
パラメータアナライザ451030及びローダ451035は、記憶されたコンパイル済みデータフローグラフからデータフローグラフを素早くロードすることを可能にし、受信される入力データに応答してデータフローグラフの様々なコンパイル済みバージョンの中から選択を行うことにより、ランタイム時の柔軟性を依然として与えながら潜在的に長いコンパイルプロセスを防ぐ。パラメータアナライザ451030は、入力データ源451025から入力データを受信することに応答し、入力データ及びことによるとランタイムまで分からない可能性がある他の値を分析して、対象データフローグラフと共に使用される1つ又は複数のパラメータ(静的パラメータ及び動的パラメータの両方を潜在的に含む)のための値を決定する。対象データフローグラフは、様々な個々のパラメータセットを使用してコンパイル済みデータフローグラフデータ記憶域451020内に記憶される様々なバージョンにコンパイルされている未コンパイルデータフローグラフである。ローダ451035は、パラメータアナライザ451030によって与えられる静的パラメータの任意の値を、対象データフローグラフのコンパイル済みバージョンの何れかを生成するために使用されている可能性があるそれらの同じパラメータの任意の値と比較して一致を見つける。ローダ451035が静的パラメータ内の一致を見つける場合、ローダ451035は動的パラメータを解決してバインドし、実行エンジン451040によって起動されるようにその結果生じるデータフローグラフをロードすることができる。ローダ451035が静的パラメータ内の一致を見つけない場合、ローダ451035は入力データを誤りプロセッサ(不図示)にルーティングすることができ、又は最適化されていないデフォルトとしてあり得る様々なパラメータ値を扱うことができる入手可能な対象データフローグラフのバージョンを有することができる。或いは、ローダはコンパイラ451015を始動して、適切な静的パラメータ値と共に対象データフローグラフの新たなバージョンをコンパイルすることができる。これらの事例では、コンパイルは必要に応じてその場で行うことができる。対象データフローグラフが最初に実行されるとき、コンパイルがランタイム時に行われ、その結果生じるバインドされた静的パラメータを有するコンパイル済みデータフローグラフが保存される。次に対象データフローグラフが実行されるとき、所望の静的パラメータ値を有するコンパイル済みバージョンが見つからない場合にのみ再コンパイルされる。
【0299】
例えば、パラメータA、B、C(AとBは静的でありCは動的である)を含むパラメータセットについて、A=真及びB=偽を使用してコンパイルされている対象データフローグラフの第1のコンパイル済みバージョンと、A=真及びB=真を使用してコンパイルされている同じ対象データフローグラフの第2のコンパイル済みバージョンとを検討されたい。A=真、B=真、及びC=真を有する対象データフローグラフを使用して受信される作業単位を処理すべきだとパラメータアナライザ451030が判定する場合、第2のコンパイル済みバージョンをロードすることができ、動的パラメータCがローダ451035によってバインドされる。A=偽、B=真、及びC=真を有する対象データフローグラフを使用して受信される作業単位を処理すべきだとパラメータアナライザ451030が判定する場合、A=偽、B=真の状態で対象データフローグラフの新たなバージョンがコンパイラ451015によってコンパイルされ、動的パラメータCがローダ451035によってバインドされる。新たにコンパイルされるバージョンも、後で使用するためにコンパイル済みデータフローグラフデータ記憶域451020内に記憶することができる。
【0300】
ローダ451035は、入力データ源451025からの入力データフローを処理するために実行されるグラフ実行エンジン451040にとってアクセス可能なメモリ内に、選択されたコンパイル済みデータフローグラフをロードする。一部の実施形態では、ローダ451035の機能が実行データフローグラフ内の専用成分によって行われ、ロードされるデータフローグラフは専用成分内に埋め込まれるマイクログラフである。ローダ451035は、コンパイル済みデータフローグラフデータ記憶域451020に必ずしもアクセスする必要なしに、(適切な静的パラメータ値が使用されたと判定した後)、メモリ内にキャッシュされたままである選択されたコンパイル済みデータフローグラフの過去にロードされたバージョンにアクセスすることができる。次いで、ロードされたデータフローグラフが実行エンジン451040によって実行される。対象データフローグラフによって入力データが処理されると、データフローグラフをシステムからアンロードすることができ、又は後でアクセスするためにキャッシュに入れることができる。
【0301】
概して、データフローグラフのコンパイルは、それによりグラフを実行可能なフォーマットに変換するプロセスである。実行可能なフォーマットは、プラットフォーム固有の形式(例えば機械コード)又は中間形式(例えばバイトコード)とすることができる。一部の実施形態では、コンパイラ451015が静的パラメータを解決し、データフローグラフを詳細に調べ、それを実行される準備が整った1組のデータ構造へと減らす。頂点及びリンクとして表されるデータフローグラフから機械コードへの変換は幾つかのステップを含み得る。それらのステップの1つは、データフローグラフが第3世代プログラミング言語(例えばC、C#、C++、Java等)に変換される動的コード生成を含み得る。標準のコンパイラを使用し、第3世代言語から機械可読コード又はバイトコードが生成され得る。
【0302】
一部の実施形態では、パラメータを静的パラメータとして扱うか動的パラメータとして扱うかがコンパイルまで決定されない。評価され、その値が静的パラメータとして扱われるコンパイル済みデータフローグラフエリア内にハードコードされるパラメータ。それに対し、動的パラメータは概してコンパイル時に評価されないが、グラフのロード中又は実行中に評価される。上記のように、ランタイム時の高速ローディング及び実行のためのデータフローグラフの様々なコンパイル済みバージョンを準備するために、パラメータセットによって決定される値が使用される。パラメータセットからのパラメータの値がコンパイル済みグラフに有効な唯一の値を明確に定義する場合、その値がコンパイル済みデータフローグラフ内にコード化され、パラメータは静的パラメータとして扱われる。パラメータセットからのパラメータの値があり得る値域を与える他の事例では、パラメータはコンパイル時に静的パラメータとして評価されない可能性があるが、代わりにロード時に又はランタイム時に動的パラメータとして評価され得る。
【0303】
更にコンパイルプロセス中、コンパイラは、例えば不要な実行可能ステートメントを除去することによってデータフローグラフを最適化することができる。例えば、データフローグラフは条件付き成分を含み得る。条件付き成分は、更に多くのパラメータの1つの値に基づいてコンパイル済みデータフローグラフ内に含まれる、又はコンパイル済みデータフローグラフから除外される一連の実行可能ステートメントを含み得る。グラフの最適化や専用化等、条件付き成分は様々な目的で使用することができる。グラフの最適化のために、アプリケーションは、データセットからの値を使用しない場合、そのデータセットの処理又は作成を省略し、それによりグラフをより効率的に実行することを可能にし得る。グラフの専用化では、アプリケーションは所望の詳細レベルに基づいて幾つかの異なる出力データセットを作る条件を付けることができ、又はグラフの幾つかの任意選択的な部分の1つを実行可能にし得る。
【0304】
上記の技法はコンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えばソフトウェアは、(分散、クライアント/サーバ、グリッド等の様々なアーキテクチャのものとすることができる)1つ又は複数のプログラムされた又はプログラマブルコンピュータシステム上で実行される1つ又は複数のコンピュータプログラムによって手続きを形成し、かかるコンピュータシステムは、少なくとも1個のプロセッサ、少なくとも1つのデータ記憶システム(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)、少なくとも1つの入力装置又はポート、及び少なくとも1つの出力装置又はポートをそれぞれ含む。ソフトウェアは、例えばデータフローグラフの設計及び構成に関係する他のサービスを提供するより大きいプログラムの1つ又は複数のモジュールを形成し得る。グラフのノード又は成分及び要素は、コンピュータ可読媒体内に記憶されるデータ構造又はデータリポジトリ内に記憶されるデータモデルに準拠する他の編成済みデータとして実装することができる。
【0305】
ソフトウェアは、汎用又は専用のプログラマブルコンピュータによって読取可能なCD-ROM等の記憶媒体及び/又はハードウェア記憶装置上に与えることができ、又はその実行場所であるコンピュータの記憶媒体にネットワークの通信媒体上で送られ(伝搬信号内に符号化され)得る。機能の全てが専用コンピュータ上で、又はコプロセッサ等の専用ハードウェアを使用して実行され得る。ソフトウェアは、ソフトウェアによって規定される計算の様々な部分が異なるコンピュータによって実行される分散式に実装することができる。本明細書に記載の手続きを実行するために記憶媒体又は装置がコンピュータシステムによって読み取られるときコンピュータを構成し動作させるために、かかる各コンピュータプログラムは、好ましくは汎用の又は専用のプログラマブルコンピュータによって読取可能な記憶媒体又は装置(例えば固体メモリや媒体、磁気媒体、又は光学媒体)上に記憶され、又はダウンロードされる。本発明のシステムは、コンピュータプログラムで構成されるコンピュータ可読記憶媒体として実装されるとも考えられ、そのように構成される記憶媒体は、本明細書に記載の機能を実行するようにコンピュータシステムを特定の且つ既定のやり方で動作させる。
【0306】
本発明の幾つかの実施形態を説明してきた。それでもなお、本発明の趣旨及び範囲から逸脱することなしに様々な修正を加えることができることが理解されよう。例えば、上記のステップの一部は異なる順序で実行することができ、従って記載したのと異なる順序で実行することができる。
【0307】
上記の説明は、添付の特許請求の範囲によって定められる本発明の範囲を限定するのではなく例示することを意図することを理解すべきである。例えば、上記の幾つかの機能ステップは、全体の処理に実質的に影響を与えることなしに異なる順序で実行することができる。他の実施形態も添付の特許請求の範囲に含まれる。