(57)【要約】  リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する、データ処理システムによって実施されるコンピュータ実施方法であって、コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、実行することは、ＳＱＬクエリを受信し、ＳＱＬクエリは、データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、ＳＱＬクエリに基づいてコンピュータプログラムを生成することと、コンピュータプログラムを実行することとを含み、実行することは、１つまたは複数の命令をリソースへ伝送し、命令はＳＱＬクエリの操作以外の操作を定義すること、および命令に応答してデータをリソースから受信すること、を引き起こす、方法を記載する。
2018514012.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する、データ処理システムによって実施されるコンピュータ実施方法であって、前記コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、前記実行することは、
ＳＱＬクエリを受信し、前記ＳＱＬクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記ＳＱＬクエリに基づいてコンピュータプログラムを生成することであって、前記生成することは、
前記リソースに関連付けられた構成データを識別し、前記構成データは、前記リソースと通信する際に用いられる少なくとも１つの値を指定すること、
を含む、生成することと、
前記構成データに基づいて前記コンピュータプログラムを実行することとを含み、前記コンピュータプログラムの前記実行は、
１つまたは複数の命令を前記リソースへ伝送し、前記命令は前記ＳＱＬクエリの操作以外の操作を定義すること、および
前記命令に応答してデータを前記リソースから受信すること、
を引き起こす、方法。
【請求項２】
前記コンピュータプログラムの部分が、前記リソースがアクセスされる仕方を定義する実行可能命令を含み、前記実行可能命令は前記コンピュータプログラムの前記部分に提供された前記構成データに基づいて動作する、請求項１に記載の方法。
【請求項３】
前記構成データが、前記リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、請求項１に記載の方法。
【請求項４】
前記構成データに基づいてパラメータ値を生成することと、
前記パラメータ値を前記コンピュータプログラムの部分へ提供し、前記部分は前記リソースと通信する能力を有することと、
を含み、
前記コンピュータプログラムの前記実行が前記パラメータ値に基づく、請求項１に記載の方法。
【請求項５】
前記構成データに基づいてパラメータ値を生成することが、パラメータファイルを、前記コンピュータプログラムの前記部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、
前記パラメータ値を前記コンピュータプログラムの前記部分へ提供することが、前記パラメータファイルを前記コンピュータプログラムの前記部分が利用できるようにすることを含む、請求項４に記載の方法。
【請求項６】
前記ＳＱＬクエリが、引き数を含むＳＥＬＥＣＴ文を含み、前記引き数の少なくとも一部分は、前記リソースに関連付けられた前記識別子に対応する、請求項１に記載の方法。
【請求項７】
前記コンピュータプログラムが、前記ＳＱＬクエリの操作を表すコンポーネントを含む、請求項１に記載の方法。
【請求項８】
前記コンピュータプログラムがデータフローグラフであり、前記コンピュータプログラムの前記部分が前記データフローグラフの部分グラフである、請求項１に記載の方法。
【請求項９】
前記リソースが、前記リソースによって公開されたアプリケーションプログラミングインターフェース（API）を用いてアクセスされる、請求項１に記載の方法。
【請求項１０】
前記ＳＱＬクエリを受信したことに応答して前記ＡＰＩの関数を実行させることを含み、
前記ＡＰＩの前記関数は前記リソースにおいて実行可能であり、前記リソースへ伝送された前記命令が前記ＡＰＩの前記関数を実行させる、請求項９に記載の方法。
【請求項１１】
前記外部リソースから受信された前記データをデータベーステーブルの形式でフォーマットすることを含む、請求項１に記載の方法。
【請求項１２】
前記リソースがリレーショナルデータベース管理システムでない、請求項１に記載の方法。
【請求項１３】
前記命令が、ＳＱＬクエリに応答して結果を返さない前記リソースのファシリティへ伝送される、請求項１に記載の方法。
【請求項１４】
前記命令に応答して前記リソースから受信された前記データが、前記ＳＱＬクエリによって指定されたデータを含む、請求項１に記載の方法。
【請求項１５】
前記命令に応答して前記リソースから受信された前記データ内のレコードおよびフィールドを識別することを含み、前記レコードおよびフィールドは、前記データ処理システムの外部にある前記リソースに関連付けられたレコードフォーマットに基づいて識別される、請求項１に記載の方法。
【請求項１６】
前記ＳＱＬクエリに基づいて前記コンピュータプログラムを生成することが、
前記ＳＱＬクエリに基づいてデータソースを識別すること、
リレーショナルデータベースを管理するシステム以外の実行システムを識別すること、
前記クエリに基づいてクエリプランナへの要求を生成すること、
前記要求を前記クエリプランナへ提供すること、
前記要求に基づいて前記クエリプランナによって生成されたクエリプランを受信し、前記クエリプランは、リレーショナルデータベースを管理するシステムによって実施されるべき１つまたは複数のステップの記述を含むこと、
データフローグラフをインスタンス化するデータ構造を生成することであって、前記データフローグラフは、
実行されるべき少なくとも１つの操作を表す第１のノードであって、
前記第１のノードは、実行システムによって、前記操作を実施するための実行可能プログラムコードを呼び出すために使用可能な情報に関連付けられており、
前記第１のノードは、実行システムによって、データを前記プログラムコードが利用できるようにするために使用可能な情報に関連付けられており、
前記操作は、前記クエリプランによって記述されたステップに基づいて選定される、
第１のノード、および
前記第１のノードの操作の出力データが、前記データフローグラフの第２のノードの操作への入力データとして提供されることを表す少なくとも１つのリンク、
を含む、生成すること、
を含む、請求項１に記載の方法。
【請求項１７】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する能力を有するデータ処理システムであって、前記コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、前記データ処理システムは、
ＳＱＬクエリを受信し、前記ＳＱＬクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記ＳＱＬクエリに基づいてコンピュータプログラムを生成することであって、
前記リソースに関連付けられた構成データを識別し、前記構成データは、前記リソースと通信する際に用いられる少なくとも１つの値を指定すること、
を含む、生成することと、
前記構成データに基づいて前記コンピュータプログラムを実行することとを含む操作を実施するように構成され、前記コンピュータプログラムの前記実行は、
１つまたは複数の命令を前記リソースへ伝送し、前記命令は前記ＳＱＬクエリの操作以外の操作を定義すること、および
前記命令に応答してデータを前記リソースから受信すること、
を引き起こす、データ処理システム。
【請求項１８】
データ処理システムが、リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行することを可能にする命令を記憶する非一時的なコンピュータ可読記憶デバイスであって、前記コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、前記命令は、前記データ処理システムに、
ＳＱＬクエリを受信し、前記ＳＱＬクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記ＳＱＬクエリに基づいてコンピュータプログラムを生成することであって、
前記リソースに関連付けられた構成データを識別し、前記構成データは、前記リソースと通信する際に用いられる少なくとも１つの値を指定すること、
を含む、生成することと、
前記構成データに基づいて前記コンピュータプログラムを実行することとを含む操作を実施させ、前記コンピュータプログラムの前記実行は、
１つまたは複数の命令を前記リソースへ伝送し、前記命令は前記ＳＱＬクエリの操作以外の操作を定義すること、および
前記命令に応答してデータを前記リソースから受信すること、
を引き起こす、非一時的なコンピュータ可読記憶デバイス。
【請求項１９】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する能力を有するデータ処理システムであって、前記コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、前記データ処理システムは、
ＳＱＬクエリを受信するための手段であって、前記ＳＱＬクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含む、受信するための手段と、
前記ＳＱＬクエリに基づいてコンピュータプログラムを生成するための手段であって、前記リソースに関連付けられた構成データを識別することを含み、前記構成データは、前記リソースと通信する際に用いられる少なくとも１つの値を指定する、生成するための手段と、
前記構成データに基づいて前記コンピュータプログラムを実行するための手段とを含み、前記コンピュータプログラムの前記実行は、
１つまたは複数の命令を前記リソースへ伝送し、前記命令は前記ＳＱＬクエリの操作以外の操作を定義すること、および
前記命令に応答してデータを前記リソースから受信すること、
を引き起こす、データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本出願は、２０１５年２月１８日に出願された米国特許出願第６２／１１７，５８８号に対する優先権を主張する、２０１５年６月２６日に出願された、米国特許出願第１４／７５２，０９４号に対する優先権を主張する。これらの出願の内容全体は本明細書において参照により組み込まれる。
【０００２】
本記載は、例えば、ＳＱＬまたは別の種類のクエリ言語を用いた、ネットワーク上のデータソースへの照会に関する。
【背景技術】
【０００３】
データソースに対するクエリは、データソースから取得されるべきデータを指定する。クエリはデータソース（例えば、データベース）へ提供されることが可能であり、データソースに関連付けられたデータ処理システム（例えば、データベース管理システム）が、クエリによって指定されたデータを返すことができる。クエリによって指定されたデータソース内のデータを識別するべくクエリを構文解析するために、様々な技法を用いることができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
態様１は、リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する、データ処理システムによって実施されるコンピュータ実施方法であって、コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、実行することは、ＳＱＬクエリを受信し、ＳＱＬクエリは、データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、ＳＱＬクエリに基づいてコンピュータプログラムを生成することであって、リソースに関連付けられた構成データを識別することを含み、構成データは、リソースと通信する際に用いられる少なくとも１つの値を指定する、生成することと、構成データに基づいてコンピュータプログラムを実行することと、を含み、コンピュータプログラムの実行は、１つまたは複数の命令をリソースへ伝送し、命令はＳＱＬクエリの操作以外の操作を定義すること、および命令に応答してデータをリソースから受信すること、を引き起こす、方法である。
【０００５】
態様２は、コンピュータプログラムの部分が、リソースがアクセスされる仕方を定義する実行可能命令を含み、実行可能命令は、コンピュータプログラムの部分に提供された構成データに基づいて動作する、態様１の方法である。
【０００６】
態様３は、構成データが、リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、態様１または２の方法である。
【０００７】
態様１は、構成データに基づいてパラメータ値を生成することと、パラメータ値をコンピュータプログラムの部分へ提供し、部分はリソースと通信する能力を有することと、を含み、コンピュータプログラムの実行がパラメータ値に基づく、態様１、２、または３のいずれか１つの方法である。
【０００８】
態様５は、構成データに基づいてパラメータ値を生成することが、パラメータファイルを、コンピュータプログラムの部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、パラメータ値をコンピュータプログラムの部分へ提供することが、パラメータファイルをコンピュータプログラムの部分が利用できるようにすることを含む、態様４の方法である。
【０００９】
態様６は、ＳＱＬクエリが、引き数を含むＳＥＬＥＣＴ文を含み、引き数の少なくとも一部分は、リソースに関連付けられた識別子に対応する、態様１〜５のいずれか１つの方法である。
【００１０】
態様７は、コンピュータプログラムが、ＳＱＬクエリの操作を表すコンポーネントを含む、態様１〜６のいずれか１つの方法である。
【００１１】
態様８は、コンピュータプログラムがデータフローグラフであり、コンピュータプログラムの部分がデータフローグラフの部分グラフである、態様１〜６のいずれか１つの方法である。
【００１２】
態様９は、リソースが、リソースによって公開されたアプリケーションプログラミングインターフェース（API）を用いてアクセスされる、態様１〜８のいずれか１つの方法である。
【００１３】
態様１０は、ＳＱＬクエリを受信したことに応答してＡＰＩの関数を実行させることを含み、ＡＰＩの関数はリソースにおいて実行可能であり、リソースへ伝送された命令がＡＰＩの関数を実行させる、態様９の方法である。
【００１４】
態様１１は、外部リソースから受信されたデータをデータベーステーブルの形式でフォーマットすることを含む、態様１〜１０のいずれか１つの方法である。
【００１５】
態様１２は、リソースがリレーショナルデータベース管理システムでない、態様１〜１１のいずれか１つの方法である。
【００１６】
態様１３は、命令が、ＳＱＬクエリに応答して結果を返さないリソースのファシリティへ伝送される、態様１〜１２のいずれか１つの方法である。
【００１７】
態様１４は、命令に応答してリソースから受信されたデータが、ＳＱＬクエリによって指定されたデータを含む、態様１〜１３のいずれか１つの方法である。
【００１８】
態様１５は、命令に応答してリソースから受信されたデータ内のレコードおよびフィールドを識別することを含み、レコードおよびフィールドは、データ処理システムの外部にあるリソースに関連付けられたレコードフォーマットに基づいて識別される、態様１〜１４のいずれか１つの方法である。
【００１９】
他の諸態様は、対応する装置、システム、およびコンピュータ可読記憶デバイスを含むことができる。
【００２０】
諸態様は以下の利点のうちの１つまたは複数を含むことができる。データ処理システムは、データ処理システムの外部のリソース（例えば、インターネット上で利用可能なもの）を参照し、リレーショナルデータベース管理システムではないクエリを実行することができる。
【００２１】
ネットワーク（例えば、インターネットなどの大規模ネットワーク）を通じて分散したデータは、たとえ、ネットワーク内のデータソースがデータベース言語に応答することができない場合、またはリレーショナルデータベースでない場合であっても、データベースプログラミング言語（例えば、SQL）を用いることによって効率的にアクセス可能にすることができる。これは、特定のデータソースに特に適応させることができ、それにより、時間とともに変化するデータソースを有するネットワーク内で用いることができる柔軟な探索スキームを提供し得る。その結果、これは、分散ネットワークを、（例えば、データソースの数を拡大もしくは縮小することによって、またはデータソースを交換もしくは変更することによって）より急速に発展させ、その一方で、発展させたネットワークの現在のデータソース内に記憶されたデータへのアクセスを維持することを可能にし得る。
【００２２】
本発明の他の特徴および利点は、以下の説明および請求項から明らかになるであろう。
【図面の簡単な説明】
【００２３】
【図１】クエリを処理することができるデータ処理システムを示す図である。
【図２Ａ】データ処理システムの要素を示す図である。
【図２Ｂ】データ処理システムの要素を示す図である。
【図２Ｃ】データ処理システムの要素を示す図である。
【図３】クエリを実行するためのユーザインターフェースを示す図である。
【図４Ａ】データフローグラフを示す図である。
【図４Ｂ】データフローグラフの部分グラフを示す図である。
【図４Ｃ】コンポーネントの実行可能コードを示す図である。
【図５Ａ】外部リソースのカタログの内容を示す図である。
【図５Ｂ】外部リソースのカタログの内容を示す図である。
【図５Ｃ】外部リソースのカタログの内容を示す図である。
【図６Ａ】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【図６Ｂ】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【図６Ｃ】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【図６Ｄ】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【発明を実施するための形態】
【００２４】
データ処理システムはクエリ（SQLクエリなど）をデータフローグラフなどのコンピュータプログラムに変換することができる。コンピュータプログラムは、実行されると、クエリによって指定された操作と等価の操作（例えば、データ処理操作）を実施するコンポーネントを含む。
【００２５】
図１は、クエリ１０２を処理し、クエリ１０２によって指定された結果１０４を生成することができるデータ処理システム１００を示す。結果１０４は、元のクエリ１０２によって参照された外部リソース１０８から受信されたデータ１０６に基づく。データ処理システム１００は、データ処理システム１００がクエリ１０２に基づいて生成し、外部リソース１０８へ送信する命令１１０に応答してデータ１０６を受信する。
【００２６】
クエリ１０２は、クエリによって指定されたデータを取得するために用いられる。１つの種類のクエリ１０２は構造化クエリ言語（SQL）クエリである。本説明はＳＱＬクエリを一例として用いることになるが、ここで説明される諸技法は多次元式（MDX）クエリなどの他の種類のクエリとともに用いることもできるであろう。
【００２７】
ＳＱＬクエリ（SQL文とも呼ばれる）は、構造化クエリ言語（SQL）によって定義されたコマンドおよび構文を用いる。概して、クエリは、クエリ内で示された１つまたは複数のデータセット内のデータのサブセットを指定する文である。指定されたサブセットは、クエリを処理するシステムによって、クエリを発行したシステムへ返されることが可能である。クエリによって指定され、クエリに応答して返されるデータは概して、クエリによって示されたデータセット内に記憶されている全データの一部分である。ＳＱＬクエリの一例は、「SELECT last_name FROM current_customers」であり得るであろう。このＳＱＬクエリは操作、ＳＥＬＥＣＴを含む。操作、ＳＥＬＥＣＴは、クエリを実行するシステムに、ＳＥＬＥＣＴ操作の引き数に従ってデータを取得するように命令する。ＳＱＬの構文内において、引き数は、データベーステーブルなどのデータのセットのである、「current_customers」、およびデータベーステーブルの列である、「last_name」である。システムがクエリを解釈し、クエリの操作を実行すると、システムはクエリに応答してｌａｓｔ＿ｎａｍｅ列のデータ（例えば、last_name列内に含まれているデータの各部分）を返すことになる。ＳＱＬは、２００８年４月７日に発行された、Ａｌｅｘ  ＫｒｉｅｇｅｌおよびＢｏｒｉｓ  Ｔｒｕｋｈｎｏｖによる「SQL Bible, 2nd Edition」、ＩＳＢＮ９７８−０４７０２２９０６４に詳細に説明されている。この文献は、本明細書において参照により組み込まれる。
【００２８】
クエリに応答してデータを返すリソースの典型的な例はリレーショナルデータベースである。リレーショナルデータベースは、１つまたは複数のデータベーステーブル、ならびにＳＱＬクエリを解釈すること、データをテーブルから読み出すこと、データをテーブルに書き込むこと、およびその他の種類のデータ処理機能を実施することなどのデータ処理操作を管理するシステムの集合である。データベーステーブルは、ａ）レコードを各々表す行、およびｂ）行内に記憶されたデータのカテゴリを各々表す列の形で配列されたデータの集合である。例えば、「current_customers」と呼ばれるデータベーステーブルは、事業の現在の顧客を各々表す行を有してもよく、顧客の氏名、顧客の住所、顧客によって購入された一番最近の製品等などのデータのカテゴリを表す列を有してもよい。
【００２９】
リレーショナルデータベーステーブルは、データを、属性に各々対応するデータの要素で構成された、タプルの形式で記憶する一種のデータベーステーブルである。タプルはリレーショナルデータベース内の行の形式を採ることができ、属性はリレーショナルデータベース内の列の形式を採ることができる。それゆえ、各タプルは、データベーステーブルの属性のうちの１つに各々対応するデータの要素（時として、属性値と呼ばれる）を含む。さらに、複数のタプルのグループ化は時として関係と呼ばれる。
【００３０】
リレーショナルデータベース管理システム（RDBMS）は、リレーショナルデータベース内に記憶されたデータを作成および変更することを対象とする命令を処理するシステムである。ＲＤＢＭＳは、クエリを解釈し、クエリによって指定されたデータを返すための機能性を含む。クエリを解釈することと、クエリによって指定されたデータを返すこととの組み合わせは、時として、クエリを実行することと称される。例えば、いくつかのＲＤＢＭＳの実装形態は、ａ）ＳＱＬクエリを構文解析し、ｂ）構造化クエリ言語によって定義された操作を識別し、ｃ）コマンドの引き数を識別し、ｄ）引き数に従って操作を実施する（例えば、実行する）エンジンを含む。
【００３１】
上述されたように、ＳＱＬクエリ「SELECT last_name FROM current_customersは操作、ＳＥＬＥＣＴを含み、この操作はＲＤＢＭＳに、ＳＥＬＥＣＴ操作の引き数に従ってデータを取得するように命令する。引き数は、ＲＤＢＭＳによって管理されているデータベーステーブルである、「current_customers」、およびデータベーステーブルの列である、「last_name」である。ＲＤＢＭＳがクエリを解釈し、クエリの操作を実行すると、ＲＤＢＭＳはクエリに応答してｌａｓｔ＿ｎａｍｅ列のデータ（例えば、last_name列内に含まれているデータの各部分）を返すことになる。ＲＤＢＭＳのいくつかの実装形態では、クエリプランナと呼ばれるモジュールが、実施されるべき操作を識別することになる。このように、ＳＱＬは、リレーショナルデータベースに適用可能な、例えば、ＲＤＢＭＳによって維持されているデータに適用可能なクエリ言語である。
【００３２】
外部リソース１０８はデータ処理システム１００の外部にある。（データ処理システム１００のいくつかの構成要素は図２Ａ〜図２Ｃに詳細に示される）。例えば、外部リソース１０８は、ネットワーク（例えば、インターネット）を用いて通信するファシリティとすることができる。データ処理システム１００は、データをネットワークへ送信すること、およびデータをネットワークから受信することによって、外部リソース１０８と通信する。外部リソース１０８は、記憶媒体、例えば、有形の非一時的なコンピュータ可読媒体上に記憶されたデータベーステーブル、データファイル、またはその他のデータ構造などのデータのセットを含んでもよい。
【００３３】
データ処理システム１００は、たとえ、クエリ１０２によって指定された外部リソース１０８がＲＢＤＭＳを含まない場合でも、クエリ１０２によって指定された結果１０４を生成する能力を有する。言い換えれば、外部リソース１０８はＲＤＢＭＳであるか、またはその構成要素の間にＲＤＢＭＳを含む必要がない。外部リソース１０８のいくつかの例はＲＤＢＭＳを含むことになり、その一方で、外部リソース１０８の他の例はＲＤＢＭＳを含まないことになる。
【００３４】
使用時に、データ処理システム１００はクエリ１０２に基づいてコンピュータプログラム１０８（時として、データ処理プログラムと呼ばれる）を生成する。例えば、コンピュータプログラム１０８は、クエリを入力として受け取り、データフローグラフを出力として作成するエンジン（例えば、データ処理システム１００のサブシステムを形成するエンジン）を用いて生成されることが可能である。ここではデータフローグラフが一例として用いられているが、コンピュータプログラムは、プログラムコードによって表された命令を実施するために実行されることが可能であるプログラムコードを含む任意の種類のプログラムとすることができる。
【００３５】
このように、図１に示されるコンピュータプログラム１０８などのコンピュータプログラムは、実行されると、例えば、ＲＤＢＭＳなどのデータベース管理システムによる、対応するクエリ１０２の実行と同じ出力を作成することができる。それゆえ、クエリ１０２は、ＳＱＬなどのクエリ言語を用いて書くことができる。しかし、対応するデータ処理操作を実施するシステム、例えば、データ処理システム１００のサブシステムは、クエリ１０２を実行したシステム（例えば、RDBMS）によって実施されるであろう操作と等価である操作を実施するために、コンピュータプログラム１０８を実行することができる。（概して、RDBMSは、コンピュータプログラム１０８を実行する能力を有する機能性を有しない）。２つの操作は等価であるという時、２つの操作は、同じ入力データを提供されると、実質的に同じ出力データを作成することを意味する。一例として、２つの操作は、同じ入力データを提供されると、全く同じ出力データを作成してもよい。一例として、同じ入力データを提供された２つの操作は、データのフォーマッティングが異なるのみである出力データを作成してもよく、例えば、１つの操作はコンマ区切りの出力データを作成してもよく、等価な操作は、そうでない場合にはコンマ区切りの出力データと同一であるタブ区切りの出力データを作成してもよい。
【００３６】
データ処理システム１００は、たとえ、クエリ１０２がＲＤＢＭＳ以外のデータソースへの参照１１２を含む場合でも、クエリ１０２によって指定された結果１０４を生成することができる。例えば、クエリ１０２は、ＲＤＢＭＳでない外部リソース１０８を参照してもよい。外部リソース１０８はＲＤＢＭＳでないため、外部リソース１０８は、クエリ、例えば、ＳＱＬクエリを解釈するための機能性に関連付けられていない。いくつかの実装形態では、データ処理システム１００が外部リソース１０８のデータのレコードフォーマットへのアクセスを有する場合には、データ処理システム１００はクエリを、外部リソース１０８から受信されたデータに適用することができる。レコードフォーマット（時として、スキーマと呼ばれる）はデータの本体の編成の記述である。
【００３７】
外部リソース１０８は、データ処理システム１００の外部にあるデータの任意のソースとすることができる。データ処理システム１００の外部にあるによって、リソースはデータ処理システム１００の構成要素のうちの１つでないことを意味する。（データ処理システム１００の構成要素のいくつかの例は図２Ａ〜図２Ｃに詳細に示される）。例えば、外部リソース１０８は、ネットワーク１１４（例えば、ここでは「雲」によって表されている、インターネット）を用いて通信するファシリティとすることができる。データ処理システム１００は、データをネットワーク１１４へ送信すること、およびデータをネットワーク１１４から受信することによって、外部リソース１０８と通信する。いくつかの例では、外部リソース１０８は、ＴＣＰ／ＩＰまたはＵＤＰ／ＩＰなどのインターネットベースのプロトコルを用いて通信するウェブサイトまたは別のファシリティとすることができる。
【００３８】
いくつかの実装形態では、外部リソース１０８は、ネットワーク１１４には不可視であるＲＤＢＭＳを含んでもよい。これによって、外部リソース１０８は、外部リソース１０８のデータを記憶するリレーショナルデータベース管理システムを含んでもよいが、リレーショナルデータベース管理システムは、限られた場合（例えば、システムアドミニストレータがクエリを提出することを可能にするシステムアドミニストレータインターフェースを経由するなどの場合）を除いて、ネットワーク１１４を経由して到達するＳＱＬクエリなどのクエリを受け付けないことを意味する。例えば、外部リソース１０８が、インターネット上で利用可能なウェブサイトである場合には、このとき、外部リソース１０８は、データを記憶する「後置型」リレーショナルデータベースを有してもよい。本例では、リレーショナルデータベースは、ウェブブラウザインターフェース、モバイルアプリケーション、または外部リソース１０８の多くの、またはほとんどのユーザによって利用されているその他のアクセス技法からのＳＱＬクエリを受け付けない。その代わりに、外部リソース１０８のデータは、ハイパーテキスト転送プロトコル（HTTP）要求などの、ＳＱＬクエリを含まない技法、またはアプリケーションプログラミングインターフェース（API、後述される）を経由して提出された命令、あるいは別の技法を経由して主にアクセスされる。
【００３９】
外部リソース１０８はクエリ１０２を解釈しないため、データ処理システム１００は、外部リソース１０８によって解釈されることが可能である、外部リソース１０８へ伝送するべき命令１１０を決定する。命令１１０は元のクエリ１０２の形式以外の形式のものである。例えば、元のクエリ１０２がＳＱＬクエリである場合には、命令１１０はＳＱＬクエリでない（例えば、命令１１０はSQLコマンドまたは引き数を含まない）。データ処理システム１００は、クエリ１０２に基づいて、および外部リソース１０８を記述する他の情報に基づいて、いかなる命令１１０を外部リソース１０８へ送信するべきであるかを決定することができる。いくつかの実装形態では、データ処理システム１００は、クエリ１０２を解釈し、クエリ１０２によって指定された結果１０４を生成するために用いられるモジュールを有する。いくつかの実装形態では、データ処理システム１００は、クエリ１０２を実施する操作に対応する操作を含むコンピュータプログラムを生成し、実行されると、命令１１０を外部リソース１０８へ送信する。
【００４０】
図２Ａ〜図２Ｃは、外部リソース１０８を参照するクエリ１０２を実行するために用いることができるデータ処理システム１００の要素を示す。図２Ａを参照すると、クエリ１０２がデータ処理システム１００によって受信されると、クエリ１０２はコンピュータプログラム生成エンジン１２０へ提供される。コンピュータプログラム生成エンジン１２０は、実行されると、クエリ１０２に対応する操作を実施するコンピュータプログラム１３２を生成する。例えば、クエリ１０２は、ＳＱＬクエリ、例えば、構造化クエリ言語によって定義された１つまたは複数のコマンド、ならびに操作に関連付けられた引き数を含むクエリであってもよい。本例では、コンピュータプログラム１３２は、ＳＱＬクエリを実施する操作と等価である実行可能な機能性を含む。コンピュータプログラム１３２が（例えば、実行エンジン１４０によって）実行されると、コンピュータプログラム１３２は、ＳＱＬクエリ内で定義された同じ引き数に基づいて実行する。
【００４１】
データ処理システム１００は、操作を実施するためにＲＤＢＭＳの機能性、例えば、ＲＤＢＭＳのクエリ解釈機能性に頼らない技法を用いて、クエリ１０２を実施する操作（時として、クエリ１０２を実行することと称されるプロセス）を実施することができる。その代わりに、クエリは、コンピュータプログラム１３２を実行することによって実施されることが可能である。コンピュータプログラム１３２が生成され、構成されると、リレーショナルデータベースのクエリ解釈機能性は、クエリ１０２に基づいて出力を生成するために用いられない。さらに、データ処理システム１００は、たとえ、クエリ１０２内で識別されたデータソースが、クエリ１０２の形式のクエリを用いて動作するデータベースでない場合でも、クエリ１０２を実行することができる。例えば、外部リソース１０８は、ＳＱＬの形式で指定された命令を受け付けるように構成されていなくてもよい。クエリ１０２がＳＱＬクエリであり、外部リソース１０８を参照する場合には、このとき、データ処理システム１００はクエリ１０２を受信し、それに応答して、コンピュータプログラム１３２が構成され、実行されると、コンピュータプログラム１３２の出力がクエリ１０２の実行の出力と等価になるように、いかなる操作が実施されるべきであるかを決定することができる。
【００４２】
このように、ＳＱＬクエリを用いて、データをリレーショナルデータベースシステム以外のシステムから取得することができる。ＳＱＬは、クエリを指定するために用いられる共通言語であるため、多くのユーザはＳＱＬクエリの書き方を知っており、多くのレガシーシステムは、ＳＱＬクエリを自動的に生成するように構成されている。ここで説明されている諸技法は、ユーザおよびレガシーシステムがＳＱＬクエリを書くか、または生成することを可能にし、ＳＱＬクエリは、データを、ＳＱＬクエリを解釈するための機能性を有しない外部リソースから取得するために実施されることが可能である。さらに、データは、外部リソースから、ＳＱＬクエリを実行するリレーショナルデータベースへデータをコピーするのではなく、データ処理システム１００によって外部リソースから取得されることが可能である。
【００４３】
いくつかの実装形態では、コンピュータプログラム１３２はデータフローグラフを含む。データフローグラフは、入力データに対して実施されるべき操作を表すコンポーネント、およびデータの流れを表すコンポーネント（時として、ノードと呼ばれる）の間のリンクを含むコンピュータプログラムである。コンポーネントによって表された操作は、入力データを処理することによって、入力データに基づいて出力データを生成する。コンポーネントが他のコンポーネントにリンクされている場合には、コンポーネントは入力データを他のコンポーネントへ提供し、出力データを他のコンポーネントから受信することができる。この場合、２つのコンポーネントの間の各リンクはコンポーネントの一方から他方のコンポーネントへのデータの流れを表す。グラフのコンポーネントのサブセット（例えば、グラフの１つまたは複数のコンポーネント）は時として、グラフの部分グラフと呼ばれる。
【００４４】
データフローグラフがグラフベースの処理システムによって実行されると、コンポーネントの各々が実行され、例えば、コンピュータプログラム、またはコンピュータプログラムの部分が実行され、コンポーネントによって表された操作を実施する。実行時に、データフローグラフは入力データを受信し、入力データは処理され（例えば、データフローグラフのコンポーネントの操作によって操作を受ける）、出力データを生成する。
【００４５】
データフローグラフのコンポーネントのいくつかまたは全ては、コンポーネントに関連付けられた操作を実施するための実行可能プログラムコードを呼び出すための情報に各々関連付けられている。いくつかの実装形態では、データフローグラフを表すデータ構造は、実行可能コードを参照するデータを含むことができる。データ構造は、データフローグラフをインスタンス化するために用いることができる。これによって、データ構造は、データフローグラフに関連付けられた操作を実施するコードを実行するために用いることができることを意味する。例えば、コンポーネントは、コンポーネントに関連付けられた操作、例えば、データを処理し、出力することを実施するためのコンピュータ実行可能命令を含むコンピュータ可読記憶装置内に記憶されたコンピュータプログラムへの参照に関連付けられていてもよい。
【００４６】
いくつかの例では、データフローグラフのいくつかまたは全てのコンポーネントは、データをプログラムコードが利用できるようにするための情報に各々関連付けられている。例えば、コンポーネントは、データを、コンポーネントに関連付けられた実行可能プログラムへ送出するために呼び出すことができる関数コールに関連付けられていてもよく、またはコンポーネントは、コンポーネントに関連付けられた実行可能プログラムへ送出されたデータを受信することができるネットワークポートに関連付けられていてもよく、またはコンポーネントは、データを、コンポーネントに関連付けられた実行可能プログラムへ送出するための別の技法に関連付けられていてもよい。このように、各コンポーネントはデータを受信し、処理し、出力することができる。
【００４７】
いくつかの例では、データフローグラフはパラメータ化可能である。これによって、データフローグラフは、データフローグラフが実行のために準備される際に、パラメータの値を用いて構成されることが可能であることを意味する。パラメータ値を提供されたデータフローグラフのインスタンスは時として、データフローグラフのパラメータ化インスタンスと呼ばれる。パラメータは、パラメータが属するプログラムの挙動を変更するために変更されることが可能であるデータの一種である。例えば、パラメータの値は、プログラムが入力データを処理し、出力データを作成する仕方を変更するために、プログラムへ提供されることが可能である。データフローグラフの場合には、データフローグラフの各コンポーネントは１つまたは複数のパラメータに関連付けられていてもよい。同様に、パラメータのうちの１つまたは複数は単一のコンポーネントに関連付けられているか、または複数のコンポーネントに関連付けられていてもよい。
【００４８】
グラフベースのシステムの一例が、「Managing Parameters for Graph-Based Applications」と題する米国特許出願公開第２００７／００１１６６８号に詳細に記載されている。この特許出願は本明細書において参照により組み込まれる。グラフベースの計算を実行するためのシステムが、「Executing Computations Expressed as Graphs」と題する米国特許第５，９６６，０７２号に記載されている。この特許は本明細書において参照により組み込まれる。さらに、データフローグラフのコンポーネントはクエリ１０２の操作に置き換えることができる。この置き換えに係る諸技法が、「Managing Data Queries」と題する米国特許出願公開第２０１１／０１７９０１４（Ａ１）号、および同じく「Managing Data Queries」と題する米国特許出願公開第２０１２／０２８４２５５（Ａ１）号にさらに記載されている。これらの特許出願は本明細書において参照により組み込まれる。いくつかの実装形態では、データフローグラフはクエリ１０２から作成することができる。
【００４９】
図２Ｂを参照すると、いくつかの例では、コンピュータプログラム１３２は、実行されると、外部リソース１０８と通信する部分１３４を含む。例えば、部分１３４は、データを外部リソース１０８へ伝送し、および／またはデータを外部リソース１０８から受信するように構成された実行可能機能性（例えば、実行可能プログラムコード）を含んでもよい。１３４が実行されると（例えば、部分１３４のプログラムコードが実行エンジンによって解釈され、実施されると）、コンピュータプログラム１３４はデータを外部リソース１０８へ伝送し、および／またはデータを外部リソース１０８から受信する。いくつかの実装形態では、部分１３４（およびコンピュータプログラム１３２の他の部分）は、データ処理システム１００に提供されており、外部リソース１０８の識別に基づいて取得されるプログラムコードを含んでもよい。例えば、アプリケーション開発者（図示されていない）は、部分１３４のプログラムコードを、外部リソースの技術的要求に適合するように書いていてもよい。いくつかの実装形態では、技術的要求は、後述される、アプリケーションプログラミングインターフェース（API）を含む。いくつかの実装形態では、部分１３４はデータフローグラフのコンポーネント、またはデータフローグラフの部分グラフである。
【００５０】
いくつかの実装形態では、コンピュータプログラム生成エンジン１２０は、コンピュータプログラムの１つまたは複数の既存の部分にアクセスし、部分を組み立ててコンピュータプログラム１３２を形成することによって、コンピュータプログラム１３２を生成する。例えば、コンピュータプログラム生成エンジン１２０は、既存のコンポーネント、例えば、実行可能プログラムコードの既存の部分を記憶しているコンポーネントライブラリ１２６へのアクセスを有してもよい。例えば、既存のコンポーネントは、データフローグラフ内に含めるために適したコンポーネントであってもよく、またはデータフローグラフ内に含めるために適した別のグラフ（例えば、部分グラフ）であってもよい。
【００５１】
いくつかの実装形態では、コンポーネントライブラリ１２６は、特定の種類の外部リソース１０８に各々対応する既存のコンポーネントを含んでもよい。例えば、コンポーネントライブラリ１２６は、クエリ１０２内の参照１１２によって示された外部リソース１０８に対応するコンポーネント１２４を含んでもよい。いくつかの例では、コンポーネント１２４は、開発者によって、データ処理システム１００が、参照１１２に対応する外部リソース１０８にアクセスすることを可能にする目的のために開発されていてもよい。コンポーネント１２４は、外部リソース１０８の識別に基づいてコンポーネントライブラリ１２６から選定されることが可能である。
【００５２】
コンピュータプログラム生成エンジン１２０が１つまたは複数のコンポーネント１２４を（例えば、コンポーネントライブラリ１２６から）受信すると、コンピュータプログラム生成エンジン１２０はまた、コンポーネント１２４またはコンポーネント群を構成する。その際に、コンピュータプログラム生成エンジン１２０は、構成された部分を有するコンピュータプログラム１３２を生成する。例えば、構成されたコンピュータプログラム１３２は、外部リソース１０８と通信するための実行可能機能性を含むコンポーネント１２４またはコンポーネント群に対応する、構成された部分１３４を含む。
【００５３】
いくつかの実装形態では、構成された部分１３４は、コンピュータプログラム生成エンジン１２０によって受信された特性１３６に基づいて構成されることが可能である。特性１３６は、外部リソース１０８の特徴を記述するデータを含む。このデータは、コンピュータプログラム１３２によって、どのようにデータを外部リソース１０８へ送信し、そこから受信するのかを決定するために用いられる。いくつかの例では、外部リソース１０８はデータを特定のフォーマットで送信および受信してもよい。これらの例では、特性１３６は、外部リソース１０８へ送信され、そこから受信されるべきデータのフォーマットの仕様を含むことができる。いくつかの例では、外部リソース１０８はユーザ名および／またはパスワードなどの認証情報の使用を必要としてもよい。これらの例では、特性１３６は識別子の仕様を含むことができる。いくつかの例では、外部リソース１０８は特定のアドレスまたはその他のロケーションにおいてアクセス可能であってもよい。例えば、外部リソース１０８は、特定のＩＰ（インターネットプロトコル）アドレス、または特定のサーバ名、または別の種類のアドレスにおいてアクセス可能であってもよい。これらの例では、特性１３６はアドレス情報を含むことができる。
【００５４】
特性１３６は、例えば、外部リソース１０８の動作の変化に応答して、更新されることが可能であるソースから受信されることが可能である。例えば、特性１３６は、データ処理システム１００が通信する能力を有する外部リソース１０８に対応する特性を表すデータを含むカタログ１２２内に記憶されていてもよい。カタログ１２２は、データベース、単層ファイル、または任意の他の種類のデータ記憶機構とすることができる。いくつかの実装形態では、カタログ１２２は複数のエンティティによって同時に読み出されること、および書き込まれることが可能である。例えば、カタログ１２２は、並行したデータ読み出し操作および書き込み操作を管理するための機能性を有するデータベースまたはその他のデータ記憶技法として実装することができるであろう。並行したデータ読み出し操作および書き込み操作を管理するための機能性の一例は、データの一部分がいつ書き込まれるのかを示すロックまたはセマフォの使用である。用いられ得るであろう１つの種類のロッキング機能性は、１つまたは複数のロックが獲得され、読み出し操作または書き込み操作が実施され、その後、ロックが解除される、２相ロッキングである。並行したデータ読み出し操作および書き込み操作を管理することによって、単一のカタログ１２２が生成エンジン１２０の多くのインスタンスによって用いられることが可能である。さらに、単一のカタログ１２２が多くの種類の外部リソース１０８のための特性１３６を記憶することができる。たとえ、特性１３６が頻繁にアクセスされるほど（例えば、カタログ１３６内に記憶された少なくともいくつかの特性が毎秒数回以上読み出されるか、または書き込まれるほど）、カタログ１２２によってサポートされている外部リソース１０８の数が十分に大きい場合でも、外部リソース１０８に関連付けられた特性１３６はいずれも随時更新されることが可能である。
【００５５】
いくつかの例では、外部リソース１０８の動作が変化した場合には、外部リソース１０８と通信するための実行可能コード（例えば、実行可能コンポーネント１２４の一部を構成する実行可能コード）は変更される必要はなく、特性のみが更新される。例えば、外部リソース１０８は、それが出力データを他のシステムへ提供する仕方を変更してもよい。特性１３６は、コンピュータプログラム生成エンジン１２０が、構成されたコンピュータプログラム１３２の部分１３４を、構成された部分１３４が、データを、外部リソース１０８から受信されることになるフォーマットで受け付けるように構成されることになるように構成することを可能にする。さらに、構成されたコンピュータプログラム１３２は、外部リソースへ送信されるべき命令１１０を生成することができ、外部リソース１０８によって解釈されると、外部リソース１０８に、命令１１０に応答してデータ１０６を返信させることになる。命令１１０は、構成された部分１３４によって、特性１３６によって指定された命令のフォーマットに基づいてフォーマットされることが可能である。いくつかの実装形態では、命令のフォーマットは、カタログ１２２内に記憶されたデータから導出される。
【００５６】
いくつかの実装形態では、カタログ１２２は、データ処理システム１００が通信する能力を有する外部リソース１０８のデータ１０６のレコードフォーマットについての情報を含む。例えば、コンピュータプログラム１３２は、カタログ１２２内に記憶されたレコードフォーマット１２８を用いて、対応する外部リソース１０８から受信されたデータ１０６を解釈することができる。いくつかの例では、カタログ１２２内に記憶されたレコードフォーマット１２８は、外部リソース１０８から受信されたデータ１０６の構造を指定する。レコードフォーマットは、データがレコードに編成され、それにより、各レコードが複数のフィールドを有する、データの構造を指定してもよい。コンピュータプログラム１３２はレコードフォーマット１２８を用いて、外部リソース１０８から受信されたデータ１０６内のレコードおよびフィールドを識別することができる。いくつかの例では、コンピュータプログラム１３２はレコードフォーマット１２８を用いてデータ１０６を解釈し、例えば、データのレコードおよびフィールドを異なるフォーマット（例えば、コンピュータプログラム１３２の出力において用いられるべきフォーマット）に変形することができる。
【００５７】
いくつかの実装形態では、コンピュータプログラム１３２はカタログ１２２のレコードフォーマット１２８を用いて、データを、ＳＱＬクエリの結果に期待される形式に対応する形式で出力することができる。いくつかの例では、リレーショナルデータベース管理システムは、例えば、ＳＱＬクエリに応答して、データをレコードおよびフィールドの形式で返す。それゆえ、コンピュータプログラム１３２が外部リソース１０８からのデータ１０６内のレコードおよびフィールドも識別することができる場合には、コンピュータプログラム１３２はＳＱＬクエリに応答して出力をレコードおよびフィールドの形式で提供することができる。これは、たとえ、外部リソース１０８から受信されたデータ１０６が、リレーショナルデータベースから通例受信されるデータの形式、例えば、データベーステーブル、を採らない場合でも、実施されることが可能である。
【００５８】
いくつかの実装形態では、コンピュータプログラム１３２はパラメータを用いて構成することができる。例えば、パラメータは、プログラムの挙動を変更するために変更されることが可能である値であってもよい。具体例として、パラメータは「filename」であってもよく、パラメータの値はファイルシステム内のファイルのロケーションとすることができる。パラメータの値は、プログラムを、異なるファイルにアクセスするように構成するために、異なるファイルのロケーションに変更されることが可能である。同じプログラムの２つのインスタンス（例えば、同じ実行可能プログラムコードのインスタンス）が、同じプログラムの２つのインスタンスの挙動を変更することになる、異なるパラメータ値を用いて構成されることが可能である。
【００５９】
図２Ｃを参照すると、コンピュータプログラム生成エンジン１２０は特性を用いて、構成されたコンピュータプログラム１３２の部分１３４を構成するために用いられるパラメータ値１３８を生成することができる。いくつかの例では、コンピュータプログラム１３２は、特性１３６の各々に対応するパラメータを有してもよい。例えば、コンピュータプログラム１３２は、コンピュータプログラム１３２がデータ１０６をいかなるフォーマットで受信することになるのかを決定するために用いられる「record_format」と呼ばれるパラメータを有してもよい。コンピュータプログラム生成エンジン１２０は、外部リソース１０８のための特性１３６の一部として受信されたレコードフォーマットに基づいて「record_format」パラメータのためのパラメータ値１３８を生成することができる。別の例として、コンピュータプログラム１３２は、外部リソース１０８に接続する際にユーザ名を供給するために用いられる「username」と呼ばれるパラメータを有してもよい。コンピュータプログラム生成エンジン１２０は、外部リソース１０８のための特性１３６の一部として受信されたユーザ名データに基づいて「username」パラメータのためのパラメータ値１３８を生成することができる。
【００６０】
いくつかの実装形態では、パラメータ値１３８は、コンピュータプログラム１３２によって可読のフォーマットによるパラメータファイルの形式でコンピュータプログラム１３２へ提供される。例えば、パラメータファイルはデータ操作言語（DML）でフォーマットされてもよい。
【００６１】
いくつかの実装形態では、コンピュータプログラム１３２は、外部リソース１０８に関連付けられた実行可能コードに基づいて生成される。例えば、カタログ１２２は、実行可能コードが（例えば、特性１３６などの構成データを用いて）構成されると、その後、実行可能コードを用いて外部リソース１０８と通信することができる、実行可能コードのロケーションを指定してもよい。このように、実行可能コードが、例えば、実行可能コードを変更することを許可されたシステムアドミニストレータまたはその他のエンティティによって、更新された場合には、カタログ１２２は、更新された実行可能コードのロケーションを記憶する。コンピュータプログラム生成エンジン１２０がコンピュータプログラム１３２を生成すると、コンピュータプログラム生成エンジン１２０はカタログにアクセスし、実行可能コードの最新バージョンのロケーションを決定することができる。
【００６２】
コンピュータプログラム１３２が生成されると、実行エンジン１４０がコンピュータプログラム１３２を受信する。次に、実行エンジン１４０はコンピュータプログラム１３２を実行し、例えば、コンピュータプログラム１３２に関連付けられたプログラムコードによって指定された命令を実施する。実行されると、コンピュータプログラム１３２（例えば、コンピュータプログラムの構成された部分１３４）は命令１１０を生成し、命令１１０を外部リソース１０８へ伝送する。いくつかの実装形態では、外部リソース１０８は、命令を外部リソース１０８へ送信し、データを外部リソース１０８から受信するために用いられるＡＰＩ１４２（アプリケーションプログラミングインターフェース）を公開する。概して、ＡＰＩ１４２は、コンピュータプログラム１３２が外部リソース１０８と対話することを可能にする任意のファシリティとすることができる。例えば、ＡＰＩ１４２は、外部リソース１０８が受信して実施するように構成されている命令の種類を指定してもよい。ＡＰＩによって通例指定される命令の一例は関数コールである。関数は実行可能プログラムコードの一部分である。関数コールを用いる際に、コンピュータプログラム１３２は、命令１１０の一部として、関数の名前、および関数に渡されるべき（例えば、関数の実行可能プログラムコードによって用いられる）引き数を伝送する。命令１１０は、多くの関数コール、またはその他の種類の命令、あるいはその両方を含んでもよい。
【００６３】
いくつかの実装形態では、コンピュータプログラム１３２がデータフローグラフである場合には、実行エンジン１４０は、時として、グラフオペレーティングシステムと呼ばれる、専用オペレーティングシステムを含む。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎をなす操作を実行する能力を有するコンピュータプログラムである。例えば、データフローグラフのコンポーネントが、データ処理システムによって実施されるべき操作を表す場合には、グラフオペレーティングシステムは、データ処理システムに、操作を実施するように命令するタスクを課される。
【００６４】
命令１１０を外部リソース１０８へ送信した後に、コンピュータプログラム１３２は命令１１０に応答してデータ１０６を外部リソースから受信する。次に、実行エンジン１４０は、受信されたデータ１０６をクエリ１０２の結果１０４にフォーマットする。このように、データ処理システム１００はクエリ１０２を実行し、クエリによって指定された結果１０４を生成することができる。
【００６５】
いくつかの実装形態では、外部リソース１０８は、データ１０６を、データを属性−値の対の形式で指定するＪＳＯＮ（JavaScriptオブジェクト表記法）、またはデータを、データのためのカテゴリを示すタグによって区切って指定するＸＭＬ（拡張可能マーク付け言語）などのフォーマットで提供する。いくつかの実装形態では、データ１０６のためのレコードフォーマット１２８は、外部リソース１０８に関連付けられた他のデータとともにカタログ１２２内に記憶されており、ＪＳＯＮまたはＸＭＬデータを解釈するために用いることができる。
【００６６】
コンピュータプログラム１３２が実行エンジン１４０によって実行されると、コンピュータプログラム１３２（例えば、結果１０４）は、クエリ１０２を実行するが、構成されたコンピュータプログラム１３２を実行しない（実行エンジン１４０以外の）システムの出力と等価である。このように、コンピュータプログラム１３２は、クエリ１０２に対応するコンピュータプログラムの一例である。いくつかの実装形態では、コンピュータプログラム１３２は結果１０４をデータベーステーブル１４４の形式でフォーマットする。このように、データ処理システム１００は、クエリ１０２、例えば、ＳＱＬクエリなどのデータベースクエリ）を実行し、ＲＤＢＭＳなどのシステムがクエリ１０２を実行し、クエリによって指定された結果を提供すれば提供されるであろう同じ種類の出力を提供することができる。
【００６７】
さらに、ＳＱＬクエリが、データベーステーブル内に記憶されたデータを取得するために通例用いられるが、ここで示されるクエリ１０２は、いくつかの可能な形式のうちの任意のもので記憶されたデータを取得するために用いることができる。外部リソース１０８から受信されたデータ１０６は、データベーステーブル（例えば、リレーショナルデータベーステーブル）以外の形式、例えば、単層ファイル、によるものであってもよい。単層ファイルは、データ要素間の構造的関係を含まないデータファイルである。単層ファイルのデータは、レコードおよびフィールドの形式で表される能力を有してもよい。いくつかの例では、外部リソース１０８から受信されたデータ１０６は、外部リソース１０８にネイティブのフォーマットによるものであってもよい。これによって、データ１０６は、外部リソース１０８によって、データを記憶および処理するために用いられるフォーマットによるものであってもよいことを意味する。
【００６８】
図３は、クエリを実行するためのユーザインターフェース３００を示す。このユーザインターフェース３００は、図１および図２に示されるデータ処理システム１００に関連付けられている。このユーザインターフェース３００は、ユーザ（図示されていない）がＳＱＬクエリ３０２をユーザインターフェース３００のテキストボックス３０４内に入力することを可能にする。ＳＱＬクエリ３０２は、‘SELECT’コマンド３０６、およびデータソースのための識別子である引き数３０８を含む。ここでは、引き数３０８は「web.wikipedia」である。引き数「web.wikipedia」は外部リソース（例えば、図１に示される外部リソース１０８）に関連付けられている。
【００６９】
いくつかの例では、データ処理システム１００は、識別子のリスト、および各識別子に関連付けられた外部リソースのリストを記憶してもよい。多数の技法を、識別子を外部リソースに関連付けるために用いることができるであろう。いくつかの例では、図２Ｂ〜図２Ｃを参照すると、カタログ１２２が、外部リソースに各々対応する、識別子のリストを記憶していてもよい。例えば、各識別子は、データ処理システム１００に提出されたクエリ１０２内に含まれる参照１１２に対応してもよい。例えば、参照１１２は、図３においてクエリ３００内に示される引き数３０８「web.wikipedia」であってもよい。このように、参照１１２をクエリ１０２から抽出し、カタログ１２２内の対応する外部リソースを検索するために用いることができる。さらに、カタログは各識別子を特性１３６のそれぞれのセットに関連付けていてもよい。カタログ１２２は各識別子をコンポーネントライブラリ１２６内の１つまたは複数のコンポーネントへの参照に関連付けていてもよい。このように、外部リソースへの参照を用いて、カタログ１２２内において、特性の対応するセット、および対応するコンポーネント（例えば、図２Ｂ〜図２Ｃに示されるとおりのコンポーネント１２４）への参照を識別することができる。別の例として、コンポーネントライブラリ１２６が識別子を記憶していてもよく、例えば、各コンポーネント１２４のための識別子を記憶していてもよく、それにより、識別子（外部リソースの名前など）を用いて、１つまたは複数の対応するコンポーネント（例えば、図２Ｂ〜図２Ｃに示されるとおりのコンポーネント１２４）を識別することができる。
【００７０】
図３に示されるように、「web.wikipedia」は、ハイパーテキスト転送プロトコル（HTTP）を介してインターネット上で利用可能なウィキペディアと呼ばれるウェブサイトを参照する識別子である。ユーザがクエリ実行ボタン３１０をクリックすると、ユーザインターフェース３００はデータ処理システム１００（図１）にＳＱＬクエリ３０２を実行させる。
【００７１】
ＳＱＬクエリ３０２が実行されると、実行の結果３１２がユーザインターフェース３００内に示される。本例では、結果３１２はデータベーステーブルの形式で表示される。結果３１２は、データの要素を含む行３１４および列３１６を含む。引き数３０８に関連付けられた外部リソースはリレーショナルデータベースでないが、データ処理システム１００は、クエリ３０２が、外部リソース（ここでは、ウィキペディア）をデータソースとして用いて実行されることを可能にし、結果３１２が、データベーステーブルとしてフォーマットされることを可能にする。例えば、結果３１２は、ウィキペディアによって返されたデータ内のレコードおよびフィールドを識別することによって、データベーステーブルとしてフォーマットすることができる。識別は、ウィキペディアに関連付けられたレコードフォーマット１２８（図２Ｂ〜図２Ｃ）を用いることによって実施することができる。ここで、クエリ３０２は、結果３１２によって満足されなければならない基準を示す‘where’コマンド３１８含んでいた。コマンド３１８は、結果がテキスト内に用語「SQL」を含まなければならないことを示す「subject = ‘SQL’」の引き数３２０（この種の引き数は時として、述語と呼ばれる）を有する。それゆえ、結果３１２は全て用語「SQL」を含む。
【００７２】
図４Ａは、クエリ３０２の実行に応答して生成されたデータフローグラフ４００を示す。データフローグラフ４００は、図２Ａ〜図２Ｃに示される、構成されたコンピュータプログラム１３２の一例である。いくつかの実装形態では、データフローグラフ４００は、他のコンポーネントを含む別のデータフローグラフの部分グラフであってもよい。クエリ３０２が実行されると、データ処理システム（図１および図２）はデータフローグラフ４００を生成し、構成する。さらに、実行エンジン１４０（図２Ａ〜図２Ｃ）はデータフローグラフ４００を実行し、図３に示される結果３１２を生成する。データフローグラフ４００は、外部リソース１０８（図１）を表すコンポーネント４０２、および外部リソース１０８への入力を表すコンポーネント４０４を含む。ここでは、コンポーネント４０２はウィキペディアを表す。例えば、コンポーネント４０２、４０４はともに、図２Ｂ〜図２Ｃに示される、構成された部分１３４の一例であってもよい。データフローグラフ４００が（例えば、グラフオペレーティングシステムによって）実行されると、コンポーネント４０２は命令（例えば、図１および図２に示される命令１１０）を外部リソース１０８へ伝送する。命令は、入力コンポーネント４０４から受信された入力データに基づく。例えば、ウィキペディアは、ハイパーテキスト転送プロトコル（HTTP）を介して提出された平文クエリを実行する探索クエリ関数を公開してもよい。本例では、コンポーネント４０２は、平文探索クエリをウィキペディアへ伝送するように構成されている。例えば、ＳＱＬクエリ３０２は「subject = ‘SQL’」の引き数３２０を含んでいた。ここでは、入力コンポーネント４０４は、用語「SQL」を、ウィキペディアと通信するコンポーネント４０２へ提供するように構成されることが可能である。その結果、コンポーネント４０２は、（例えば、入力コンポーネント４０４から受信された）用語「SQL」を平文探索クエリの一部として伝送するように構成される。平文探索クエリに応答して、コンポーネント４０２はＨＴＴＰを介して、ハイパーテキストマーク付け言語（HTML）に従ってフォーマットされていてもよい、結果を受信する。コンポーネント４０２はまた、受信されたＨＴＭＬデータを構文解析し、構文解析されたデータをデータベーステーブル、例えば、図３に示される結果３１２などの形式にフォーマットするように構成される。
【００７３】
ウィキペディアと通信するために、コンポーネント４０２、４０４は、ウィキペディアに固有の特性（例えば、図２Ｂ〜図２Ｃに示される特性１３６）を用いて構成される。例えば、特性１３６は、ウィキペディアが探索結果を提供するフォーマット、例えば、探索結果において用いられる特定のＨＴＭＬフォーマッティングを記述する情報を含んでもよい。このように、ウィキペディアがその出力のフォーマットを変更した場合には、（例えば、図２Ｂ〜図２Ｃに示されるカタログ１２２内に記憶された）特性１３６は、更新されたフォーマットを反映するように更新されることが可能である（例えば、カタログ１２２のアドミニストレータユーザによって更新される）。ウィキペディアと通信するコンポーネント４０２が構成されると、特性１３６の最も直近のバージョンにアクセスし、利用することができる。
【００７４】
コンポーネント４０２、４０４は、特性に基づくパラメータ値を用いて構成される。一例として、コンポーネント４０４は、「input_text」と呼ばれるパラメータを有してもよく、そのため、コンポーネント４０４は、テキスト文字列「SQL」を「input_text」パラメータのための値として用いるように構成されることが可能である。このように、ＳＱＬクエリ内で定義された引き数３２０によって定義された基準が、ウィキペディアに照会する際に用いられる。
【００７５】
いくつかの実装形態では、ウィキペディアなどの外部リソースと通信するコンポーネント４０２は複数の実行可能コンポーネントで構成される。いくつかの例では、コンポーネント４０２は、１つまたは複数のネットワークリソースとのネットワーク接続を確立するための実行可能命令を含む１つまたは複数のコンポーネントを含んでもよい。例えば、ネットワークリソースは、ウィキペディアから発出したデータを提供することができるサーバであってもよい。
【００７６】
いくつかの例では、コンポーネント４０２は、外部リソースから受信されたデータを構文解析するための実行可能命令を含む１つまたは複数のコンポーネントを含んでもよい。例えば、ウィキペディアから受信されたデータは、ＳＱＬクエリ３０２に応答するデータ、ならびにマーク付けデータ（例えば、XMLタグなどのタグ）、受信されたデータのサイズもしくは文字セットを記述するデータなどのメタデータ、またはクエリに応答しないその他のデータなどの、他の種類のデータの両方を含んでもよい。外部リソースから受信されたデータを構文解析するための実行可能命令を含むコンポーネントは、外部リソースから受信されたデータを処理し、クエリに応答するデータを、クエリに応答しないデータから分離することができる。クエリに応答しないデータは破棄されるか、または別の目的のために用いられてもよい。例えば、受信されたデータのサイズを記述するデータは、予想された量のデータが外部リソースから受信されたことを決定するために用いることができる。
【００７７】
いくつかの例では、コンポーネント４０２は、外部リソースから受信されたデータをフォーマットするための実行可能命令を含む１つまたは複数のコンポーネントを含んでもよい。例えば、コンポーネント４０２は、特定の仕方でフォーマットされた出力データを（例えば、データフローグラフ４００の他の部分へ）提供してもよい。出力データは、例えば、複数のテキスト行、またはアレイの複数の要素、あるいは別の種類のフォーマットとしてフォーマットされることが可能であろう。いくつかの実装形態では、外部リソースから受信されたデータをフォーマットするための実行可能命令を含むコンポーネントは、構文解析されたデータ（例えば、外部リソースから受信されたデータを構文解析するための実行可能命令を含むコンポーネントによって構文解析されたデータ）を受信し、構文解析されたデータを、データフローグラフ４００の出力データのために指定されたフォーマットでフォーマットすることができる。例えば、データフローグラフ４００の出力データのために指定されたフォーマットはデータベーステーブルのフォーマットであってもよい。
【００７８】
複数のコンポーネントで構成された１つの種類のコンポーネントは部分グラフと呼ばれる。図４Ｂは、ウィキペディアと通信するコンポーネント４０２を構成するコンポーネント４１２ａ〜ｇを含む部分グラフ４１０の一例を示す。コンポーネント４１２ａ〜ｇは、ウィキペディアと通信するために必要な計算操作の一部分を実施する実行可能機能性を各々含む。例えば、１つのコンポーネント４１２ａは、ネットワーク上のサーバ、例えば、ハイパーテキスト転送プロトコル（HTTP）を用いるサーバと通信するための実行可能コードを含む「ウェブサービス呼び出し」コンポーネントである。「ウェブサービス呼び出し」コンポーネント４１２ａは要求をサーバへ伝送し、要求に応答してデータを受信する。いくつかの実装形態では、「ウェブサービス呼び出し」コンポーネント４１２ａはシンプルオブジェクトアクセスプロトコル（SOAP）要求を外部リソースへ伝送する。いくつかの実装形態では、「ウェブサービス呼び出し」コンポーネント４１２ａは外部リソースのアプリケーションプログラミングインターフェース（API）にアクセスする。
【００７９】
「ウェブサービス呼び出し」コンポーネント４１２ａは、要求内に含めて伝送されるべきデータを指定する入力を受信する。
【００８０】
複製コンポーネント４１２ｂおよび再フォーマットコンポーネント４１２ｃは、「ウェブサービス呼び出し」コンポーネント４１２ａによって伝送されるべきデータを準備する。例えば、複製コンポーネント４１２ｂはデータを、図４Ａに示される入力コンポーネント４０４から受信してもよい。いくつかの実装形態では、再フォーマットコンポーネント４１２ｃは、次に、外部リソースへ伝送するのに不適当であるデータを削除することができる。例えば、データの一部は、外部リソースへ伝送するのに不適当である場合があり、例えば、データの一部は、外部リソースの探索機能性へ伝送されることが可能である探索語であり得るであろう。いくつかの例では、データの一部は、外部リソースへ伝送するのに適当でないデータであり得るであろう。例えば、外部リソースは、元のクエリ（例えば、図１に示されるクエリ１０２）に応答するようにデータを処理するための機能性を欠く場合がある。一例として、データの一部は正規表現であってもよく、外部リソースは、外部リソースの探索機能性によって受信された正規表現を評価するための機能性を欠く場合がある。
【００８１】
第２の再フォーマットコンポーネント４１２ｄが、外部リソースから受信されたデータのフォーマットを変更し、例えば、「ウェブサービス呼び出し」コンポーネント４１２ａによって出力として提供されたデータを構文解析してフォーマットする。例えば、「ウェブサービス呼び出し」コンポーネント４１２ａから受信されたデータはＸＭＬデータなどのタグ付きデータであってもよい。再フォーマットコンポーネント４１２ｄは、タグによって区切られたデータを抽出し、抽出されたデータを、ＸＭＬタグを用いないフォーマットで出力することができる。再フォーマットコンポーネント４１２ｄはまた、出力データ内に必要ないデータを削除してもよい。例えば、破棄されるデータは、ＸＭＬタグ、またはＸＭＬタグによって区切られているが、クエリに応答しないデータであってもよい。いくつかの実装形態では、再フォーマットコンポーネント４１２ｄは、データを再フォーマットする前に、レコードフォーマット１２８（図２Ｂ〜図２Ｃ）を用いて、「ウェブサービス呼び出し」コンポーネント４１２ａから受信されたデータの構造を解釈し、例えば、「ウェブサービス呼び出し」コンポーネント４１２ａから受信されたデータ内のレコードおよびフィールドを識別する。
【００８２】
複製コンポーネント４１２ｂはまた、データを第３の再フォーマットコンポーネント４１２ｅへ提供することができる。いくつかの実装形態では、この再フォーマットコンポーネント４１２ｅは、第１の再フォーマットコンポーネント４１２ｃによる削除であった外部リソースへ伝送するのに不適当であるデータを識別する。ここで、外部リソースへ伝送するのに不適当であるデータは、再フォーマットコンポーネント４１２ｅによって、２つのコンポーネントから受信されたデータを組み合わせる結合コンポーネント４１２ｆへ提供されることが可能である。
【００８３】
第２の再フォーマットコンポーネント４１２ｄもまた、その出力を結合コンポーネント４１２ｆへ提供する。それゆえ、結合コンポーネント４１２ｆは、第２の再フォーマットコンポーネント４１２ｄおよび第３の再フォーマットコンポーネント４１２ｅからの入力を表す出力を提供する。
【００８４】
フィルタコンポーネント４１２ｇが結合コンポーネント４１２ｆの出力を受信する。フィルタコンポーネント４１２ｇは、クエリ（例えば、図１に示されるクエリ１０２）に応答しないデータを削除する。一例として、「ウェブサービス呼び出し」コンポーネント４１２ａがクエリの１つまたは複数の要素（例えば、部分）を提供されなかったがゆえに、「ウェブサービス呼び出し」コンポーネント４１２ａは、元のクエリに応答しないデータを出力する場合がある。クエリの１つまたは複数の要素は、「ウェブサービス呼び出し」コンポーネント４１２ａによって表された外部リソースへ提供するのに適当でない場合がある、正規表現であってもよい。ここで、フィルタコンポーネント４１２ｇは、正規表現（例えば、第３の再フォーマットコンポーネント４１２ｅによって結合コンポーネント４１２ｆへ出力され、第１の再フォーマットコンポーネント４１２ｃによって、「ウェブサービス呼び出し」コンポーネント４１２ａへ提供された出力から削除されたとおりのもの）を受信することができるであろう。フィルタコンポーネント４１２ｇは、正規表現に基づいて「ウェブサービス呼び出し」コンポーネント４１２ａから最初に受信されたデータをフィルタリングすることができる。ここでは正規表現の例が用いられているが、フィルタコンポーネント４１２ｇは、クエリの他の種類の要素、または他の種類の基準、例えば、クエリ内で指定されていない基準に基づいてデータをフィルタリングすることができるであろう。
【００８５】
図４Ｂに示される部分グラフ４１０のコンポーネントの各々は、部分グラフ４１０が実行されると実施されるそれ自身の実行可能コードを有する。例えば、図４Ｃは、図４Ｂに示されるウェブサービス呼び出しコンポーネント４１２を構成する実行可能コード４４０の一例を示す。実行可能コード４４０は、外部リソースへの要求をフォーマットするためのコード４４２、外部リソースからの出力を構文解析するためのコード４４４、要求を外部リソースへ伝送するためのコード４４６、および外部リソースからの出力を他のコンポーネントへ提供するためのコード４４８を含む。
【００８６】
図２Ｂ〜図２Ｃに関して上述されたように、カタログ１２２は、データ処理システム１００が通信する能力を有する外部リソース１０８に対応するデータを含む。カタログ１０８内に記憶されたデータ、例えば、特性１３６は、コンピュータプログラム１３２を構成するために用いられる。
【００８７】
図５Ａに示されるように、いくつかの実装形態では、ユーザインターフェース５００を、カタログ１２２内に記憶されたデータを見て編集するために用いることができる。ユーザインターフェース５００は、ユーザ（例えば、カタログ１２２のアドミニストレータ）がカタログ内のエントリ５０２のためのデータを見て編集することを可能にする。カタログのエントリ５０２は、特定の外部リソース、例えば、ウィキペディアに関連するデータを記憶する。ここではユーザインターフェース５００およびエントリ５０２の一例が示されているが、他の様式のカタログは他の様式のエントリを有してもよく、他の様式のエントリは異なる種類のデータを含んでもよい。
【００８８】
このエントリ５０２はエントリについての一般情報５０４ａなどのデータを含む。エントリ５０２はまた、後述されるように、外部リソースから受信されたデータのフォーマットを指定する、エントリ５０２に関連付けられた外部リソースのレコードフォーマット５０４ｂを含むことができる。エントリ５０２はまた、後述されるように、このエントリ５０２に関連付けられた外部リソースに照会するために用いることができるデータのための名前を指定するエントリのためのインデックス５０４ｃを含むことができる。例えば、エントリ５０２はまた、エントリのためのキー５０４ｄを含むことができる。キーは、データをレコードの形式で記憶する、リレーショナルデータベースなどの、データソースのために用いられる。その属性のためのレコードの記憶された値が一意的であるキー属性。エントリ５０２はまた、エントリのためのパラメータ５０４ｅを含むことができる。いくつかの実装形態では、図２Ｃを参照すると、パラメータ、例えば、パラメータ１３８が、コンピュータプログラム１３２を構成するために用いられる。いくつかの実装形態では、パラメータ５０４ｅは、このエントリ５０２に関連付けられた外部リソースの特徴を記述するデータを含む、図２Ｂ〜図２Ｃに示される特性１３６のためのデータ値を含む。例えば、パラメータ５０４ｅは、外部リソース１０８への許可されたアクセスを得るために用いられる認証情報（例えば、ユーザ名およびパスワード）などの構成データを含んでもよい。エントリはまた、いかなるエンティティ（例えば、カタログ１２２のアドミニストレータなどのユーザインターフェース５００のいかなるユーザ）がエントリ５０２にアクセスし、および／またはそれを変更することができるのかを示す、エントリ５０２のための権限５０４ｆを含むことができる。エントリはまた、このエントリ５０２に関連付けられた外部リソース１０８についての統計データ、例えば、外部リソース１０８において利用可能なデータ量などの統計データを指定する、エントリ５０２のための統計５０４ｇを含むことができる。
【００８９】
図５Ａに示されるように、エントリの一般情報５０４ａは、記憶された実行可能コードのパスへの参照５０６を含む。いくつかの実装形態では、図１を参照すると、記憶された実行可能コードは、外部リソース１０８と通信するコンピュータプログラム１３２の部分１３４である。参照５０６は、生成エンジン１２０によって、記憶された実行可能コードにアクセスし、記憶された実行可能コードを用いてコンピュータプログラム１３２を生成するために用いられることが可能である。
【００９０】
図５Ｂに示されるように、エントリ５０２はまた、エントリ５０２に関連付けられた外部リソースのレコードフォーマット５０４ｂを含むことができる。レコードフォーマット５０４ｂは、図２Ｂ〜図２Ｃに示されるレコードフォーマット１２８の一例であってもよい。レコードフォーマット５０４ｂは、外部リソースから受信されるデータのフォーマットを指定する。検討のために、レコードフォーマット５０４ｂは埋め込みレコードフォーマット５０８およびフィールド５１０を含むことができる。フィールド５１０は、外部リソースへ伝送され、そこから受信されるデータのための名前を指定する。例えば、ここでは、フィールド５１０は、ウィキペディアへ伝送されるデータのための名前である「サブジェクト」（例えば、百科事典へのクエリ内で用いられるサブジェクト）、およびウィキペディアから受信されるデータのための名前である「行」（例えば、サブジェクトに対応する百科事典エントリの行）である。埋め込みレコードフォーマット５０８は、外部リソースへ提供され、そこから受信されるデータについてのフォーマット情報を指定する。例えば、この埋め込みレコードフォーマット５０８は、「サブジェクト」および「行」フィールドは、特定の種類のユニコード文字符号化である、ＵＴＦ−８を用いてフォーマットされることを示す。
【００９１】
図５Ｃに示されるように、エントリ５０２はまた、このエントリ５０２に関連付けられた外部リソースに照会するために用いることができるデータのための名前を指定するエントリのためのインデックス５０４ｃを含むことができる。例えば、このエントリ５０２は、「サブジェクト」と呼ばれるインデックス５１４を有する。それゆえ、外部リソースは、「サブジェクト」のためのデータ値を受信し、データ値に応答してデータを返すように構成されている。例えば、ウィキペディアは、各エントリに関連付けられた「サブジェクト」フィールド内にデータ値が現れた百科事典エントリを返すように構成されていてもよい。
【００９２】
図６Ａは、クエリを実行するための手続き６００を表すフローチャートを示す。手続き６００は、例えば、図１に示されるデータ処理システム１００のコンポーネントによって実施されることが可能である。
【００９３】
手続きはＳＱＬクエリを受信する６０２。例えば、ＳＱＬクエリは、図１に示されるクエリ１０２の一例とすることができる。ＳＱＬクエリは、データ処理システムの外部にあるリソースに関連付けられた識別子を含む。さらに、このリソースはリレーショナルデータベース管理システムでない。リソースは、図１に示される外部リソース１０８とすることができる。識別子の一例は、図３に示される引き数３０８である。
【００９４】
手続きはＳＱＬクエリに基づいてコンピュータプログラムを生成する６０４。コンピュータプログラムは、図２Ａ〜図２Ｃに示されるコンピュータプログラム１３２とすることができる。いくつかの例では、コンピュータプログラムは、ＳＱＬクエリの操作を表すコンポーネントを含む。いくつかの例では、コンピュータプログラムはデータフローグラフであり、外部リソースと通信するコンピュータプログラムの部分はデータフローグラフのコンポーネントまたは部分グラフである。データフローグラフ４００の一例が図４Ａに示されている。いくつかの実装形態では、図６Ｂに示される手続き６１０を、例えば、コンピュータプログラムの生成の間にコンピュータプログラムの１つまたは複数の部分を構成するために、コンピュータプログラムの生成の間に実施することができる。いくつかの実装形態では、図６Ｄに示される手続き６３０を、コンピュータプログラムをインスタンス化するために用いることができるデータ構造、例えば、データフローグラフを生成するために実施することができる。
【００９５】
手続きは、例えば、コンピュータプログラムを構成するために用いられるパラメータ値に基づいて、コンピュータプログラムを実行する６０６。例えば、コンピュータプログラムは、図２Ａ〜図２Ｃに示される実行エンジン１４０によって実行されてもよい。いくつかの実装形態では、コンピュータプログラムの実行は、図５Ｃに示される手続き６２０に対応する。
【００９６】
図６Ｂは、コンピュータプログラムを生成する際にコンピュータプログラムの一部分を構成するために用いられる手続き６１０を表すフローチャートを示す。いくつかの実装形態では、手続き６１０は、図６Ａに示されるとおりのコンピュータプログラムを生成する６０４ためのステップを表す。手続き６１０は、例えば、コンピュータプログラム生成エンジン１２０などの、図１に示されるデータ処理システム１００のコンポーネントによって実施されることが可能である。いくつかの実装形態では、コンピュータプログラムは、複数の部分を組み立てることによって生成される。各部分は、コンピュータプログラムが組み立てられている間に構成されてもよい。この手続き６１０は、組み立てられているコンピュータプログラムの一部分を構成するために用いることができる。
【００９７】
手続きは、外部リソースに関連付けられた構成データを識別する６１４。例えば、外部リソースは、図１および図２に示される外部リソース１０８とすることができる。構成データは、コンピュータプログラムによって、外部リソースにアクセスし、データを外部リソースから受信するために用いられる情報を指定する。いくつかの実装形態では、構成データは、リソースから受信されるべきデータのフォーマット、例えば、図２Ｂ〜図２Ｃに示されるレコードフォーマット１２８を指定する。いくつかの実装形態では、構成データは、ネットワーク上のリソースにアクセスするために用いられるデータを指定する。例えば、構成データは、外部リソースのデータへの許可されたアクセスを入手するために用いられる、ユーザ名およびパスワードなどの、認証情報を含むことができ、ならびに／あるいは構成データは、ホスト名またはユニフォームリソースロケータ（URL）などのネットワークアドレスを含むことができ、ならびに／あるいは構成データは他の種類のデータを含むことができる。例えば、いくつかの例では、構成データは、図２Ｂ〜図２Ｃに示される特性１３６の一例とすることができる。構成データは、リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される。
【００９８】
手続きは構成データに基づいてパラメータ値を生成する６１６。例えば、パラメータ値は、図２Ｃに示されるパラメータ値１３８であってもよい。いくつかの実装形態では、パラメータジェネレータがデータを受信し、パラメータファイルを、コンピュータプログラムによって可読なフォーマットで生成する。次に、パラメータファイルはコンピュータプログラムへ提供される。例えば、パラメータジェネレータは、図１に示されるコンピュータプログラム生成エンジン１２０の一部分とすることができる。パラメータジェネレータによって受信されるデータは、図２Ｂ〜図２Ｃに示される特性１３６のデータとすることができる。例えば、パラメータジェネレータは特性１３６を構文解析してパラメータ値１３８を決定してもよい。
【００９９】
手続きはパラメータ値をコンピュータプログラムの一部分へ提供する５１６。部分は、リソースと通信する能力を有する。例えば、コンピュータプログラムの部分は、図２Ｂ〜図２Ｃに示される構成された部分１３４であってもよい。コンピュータプログラムの部分は、リソースがアクセスされる仕方を定義する実行可能命令を含む。さらに、実行可能命令は、コンピュータプログラムの部分へ提供されたパラメータに基づいて動作する。
【０１００】
手続き６１０は、生成されているコンピュータプログラムの任意の部分のために実施することができる。コンピュータプログラムの全ての部分が構成されると、コンピュータプログラムは実行準備が完了する。
【０１０１】
図６Ｃは、クエリに対応するコンピュータプログラムを実行するための手続き６２０を表すフローチャートを示す。いくつかの実装形態では、手続きは、図６Ａに示されるとおりのコンピュータプログラムを実行する６０６ためのステップを表す。手続き６２０は、例えば、コンピュータプログラム実行エンジン１４０などの、図１に示されるデータ処理システム１００のコンポーネントによって実施されることが可能である。コンピュータプログラムは、図２Ａ〜図２Ｃに示されるコンピュータプログラム１３２とすることができる。例えば、手続き６２０は、コンピュータプログラム実行エンジン１４０がコンピュータプログラム１３２を受信し、コンピュータプログラム１３２の実行可能コードに対応する操作を実施すると、開始されることが可能である。
【０１０２】
コンピュータプログラムの実行は１つまたは複数の命令を外部リソースへ伝送させる６２２。例えば、外部リソースは、図１および図２に示される外部リソース１０８とすることができる。命令は、コンピュータプログラムに対応するＳＱＬクエリの操作以外の操作を定義する。例えば、命令は、図１に示される命令１１０であってもよい。いくつかの例では、命令は、ＳＱＬクエリに応答して結果を返さない外部リソースのファシリティへ伝送される。例えば、命令は、ＳＱＬクエリを入力として受信し、ＳＱＬクエリを評価し、ＳＱＬクエリによって指定されたデータに応答する外部リソースのファシリティへ伝送されない。このように、いくつかの例では、命令はＳＱＬコマンドまたは引き数などのＳＱＬ命令を含まない。いくつかの実装形態では、リソースは、リソースによって公開されたアプリケーションプログラミングインターフェース（API）を用いてアクセスされる。ＡＰＩ１４２の一例が図２Ｃに示されている。
【０１０３】
コンピュータプログラムの実行は命令に応答してデータをリソースから受信させる６２４。例えば、データは、図１に示される結果１０４とすることができる。結果は、データベーステーブル、例えば、図１に示されるデータベーステーブル１４４の形式でフォーマットされてもよい。命令に応答してリソースから受信されたデータは、ＳＱＬクエリによって指定されたデータを含む。このように、受信されたデータは、仮にリソースがＳＱＬクエリを提供され、それに応答して、外部リソースが、ＳＱＬクエリによって指定されたデータを返すとした場合に、外部リソースから受信されたであろうデータと同じになる。
【０１０４】
図６Ｄは、クエリに対応するデータフローグラフをインスタンス化するコンピュータ内のデータ構造を生成するための手続き６３０を表すフローチャートを示す。例えば、データフローグラフは、図２Ａ〜図２Ｃに示されるコンピュータプログラム１３２とすることができる。クエリに対応するデータフローグラフ４００の一例が図４Ａに示されている。
【０１０５】
クエリに基づくクエリプランナへの要求が生成される６３２。クエリプランナは、クエリを実行するために実施することができるステップを表すデータを生成するシステムである。クエリプランナはしばしば、データを、ＲＤＢＭＳによって実施されることが可能であるステップの形式で生成する。
【０１０６】
クエリプランナによって要求に基づいて生成されたクエリプランが受信される６３４。クエリプランは、リレーショナルデータベースを管理するシステム、例えば、ＲＤＢＭＳによって実施されるべき１つまたは複数のステップの記述を表すデータである。
【０１０７】
データソースが、例えば、クエリに基づいて、識別される６３６。データソースは、外部リソース、例えば、図１および図２に示される外部リソース１０８とすることができる。識別は、クエリ内で表されている参照、例えば、図１に示される参照１１２に基づいて行うことができるであろう。いくつかの例では、データソースはクエリ内の引き数に基づいて識別される。
【０１０８】
リレーショナルデータベースを管理するシステム以外の実行システムが識別される６３８。実行システムは、データフローグラフを実行するシステムとすることができる。例えば、実行システムは、図２Ａ〜図２Ｃに示される実行エンジン１４０とすることができる。対照的に、リレーショナルデータベースを管理するシステムの一例はＲＤＢＭＳである。
【０１０９】
データフローグラフをインスタンス化するデータ構造が生成される６４０。図２Ａ〜図２Ｃに関して上述されたように、データフローグラフは、入力データに対して実施されるべき操作を表すコンポーネント、およびデータの流れを表すコンポーネント（時として、ノードと呼ばれる）の間のリンクを含むコンピュータプログラムである。
【０１１０】
データ構造は、実行されるべき少なくとも１つの操作を表すノードを含む。ノードは、実行システムによって、操作を実施するための実行可能プログラムコードを呼び出すために使用可能な情報に関連付けられている。ノードはまた、実行システムによって、データをプログラムコードが利用できるようにするために使用可能な情報にも関連付けられている。データフローグラフの少なくとも１つのリンクは、ノードの操作の出力データがデータフローグラフの別のノードの操作への入力データとして提供されることを表す。
【０１１１】
操作は、クエリプランによって記述されたステップに基づいて選定される。いくつかの実装形態では、操作は、データソースにおいて利用可能なデータにアクセスすることを含む。例えば、図４Ａに示されるグラフ４００のコンポーネント４０２は、データフローグラフを実行するシステムの外部のデータソースにおいて利用可能なデータにアクセスするノードの一例である。
【０１１２】
生成された６４０データフローグラフが実行されると、データフローグラフに基づくプログラムコードが、識別された実行システム上で実行されることが可能である。さらに、データがデータソースから受信されることが可能である。例えば、データは、図６Ｃに示されるように受信されることが可能である６２４。
【０１１３】
手続き６００、６１０、６２０、６３０のいくつかの実装形態では、ＡＰＩが用いられる。ＡＰＩが用いられるときには、手続き６００は、ＳＱＬクエリを受信したことに応答してＡＰＩの関数を実行させることを含む。ＡＰＩの関数は外部リソースにおいて実行可能である。さらに、（例えば、図５Ｃに示される手続き６２０において）リソースへ伝送された命令はＡＰＩの関数を実行させる。このように、ＳＱＬクエリを、リレーショナルデータベース管理システムでなく、ＳＱＬクエリを解釈しないリソースに照会するために用いることができる。
【０１１４】
図１に示される生成エンジン１２０および／または実行エンジン１４０は、例えば、１つまたは複数の汎用コンピュータ上において、ＵＮＩＸオペレーティングシステムのバージョンなどの、好適なオペレーティングシステムの制御の下でホストされてもよい。例えば、これは、複数の中央処理装置（CPU）またはプロセッサコア、局所的なもの（例えば、対称型マルチプロセッシング（SMP）コンピュータなどのマルチプロセッサシステム）、または局所的に分散したもの（例えば、クラスタとして結合された複数のプロセッサ、または超並列処理（MPP）システム、あるいは遠隔的なもの、または遠隔的に分散したもの（例えば、ローカルエリアネットワーク（LAN）および／またはワイドエリアネットワーク（WAN）を介して結合された複数のプロセッサ）のいずれか、あるいはそれらの任意の組み合わせを用いたコンピュータシステムの構成を含む、複数ノード並列コンピューティング環境を含むことができる。
【０１１５】
図３に示されるユーザインターフェース３００は開発環境の一部であってもよい。開発環境は、いくつかの実装形態では、アプリケーションをデータフローグラフとして開発するためのシステムである。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントによって表された個々のプロセス内へ情報を入れ、そこから出すための方法、プロセス間で情報を移動させるための方法、およびプロセスのための実行順序を定義するための方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選定するアルゴリズムを含む（例えば、グラフのリンクに係る通信経路は、TCP/IPまたはUNIXドメインソケットを用いるか、あるいはプロセス間でデータを渡すための共有メモリを用いることができる）。
【０１１６】
上述された諸技法は、好適なソフトウェアを実行するコンピューティングシステムを用いて実装することができる。例えば、ソフトウェアは、少なくとも１つのプロセッサ、（揮発性および／または不揮発性メモリおよび／または記憶要素を含む）少なくとも１つのデータ記憶システム、（少なくとも１つの入力デバイスもしくはポートを用いて入力を受信するため、および少なくとも１つの出力デバイスもしくはポートを用いて出力を提供するための）少なくとも１つのユーザインターフェースを各々含む、（分散型、クライアント／サーバ型、またはグリッド型などの様々なアーキテクチャのものであってもよい）１つまたは複数のプログラムされた、またはプログラム可能なコンピューティングシステム上で実行する１つまたは複数のコンピュータプログラム内の手続きを含んでもよい。ソフトウェアは、例えば、データフローグラフの設計、構成、および実行に関連するサービスを提供する、より大きなプログラムの１つまたは複数のモジュールを含んでもよい。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリ内に記憶されたデータモデルに適合するデータ構造またはその他の編成データとして実装されることが可能である。
【０１１７】
ソフトウェアは、ＣＤ−ＲＯＭ、または（例えば、汎用もしくは専用コンピューティングシステムもしくはデバイスによって可読の）その他のコンピュータ可読媒体などの、有形の非一時的な媒体上に提供されるか、あるいはネットワークの通信媒体を通じて、ソフトウェアが実行されるコンピューティングシステムの有形の非一時的な媒体へ（例えば、伝搬信号内に符号化されて）配信されてもよい。処理の一部または全ては、専用コンピュータ上で、あるいはコプロセッサまたはフィールドプログラマブルゲートアレイ（FPGA）または専用の特定用途向け集積回路（ASIC）などの、専用ハードウェアを用いて実施されてもよい。処理は、ソフトウェアによって指定された計算の異なる部分が異なるコンピューティング要素によって実施される分散式で実施されてもよい。このようなコンピュータプログラムは各々、好ましくは、記憶デバイス媒体がコンピュータによって、本明細書において説明されている処理を実施するために読み出されると、コンピュータを構成し、動作させるために、汎用または専用プログラム可能コンピュータによってアクセス可能な記憶デバイスのコンピュータ可読記憶媒体（例えば、ソリッドステートメモリもしくは媒体、または磁気的もしくは光学的媒体）上に記憶されるか、またはそれにダウンロードされる。本発明のシステムはまた、コンピュータプログラムを用いて構成された、有形の非一時的な媒体として実装されると考えられてもよく、このように構成された媒体は、コンピュータを、本明細書において説明されている処理ステップのうちの１つまたは複数を実施するための特定の既定の仕方で動作させる。
【０１１８】
本発明の多数の実施形態が説明された。しかし、上述の説明は、本発明の範囲を限定することではなく、本発明を例示することが意図されていることを理解されたい。本発明の範囲は添付の請求項の範囲によって定義される。
【０１１９】
したがって、他の実施形態もまた、添付の請求項の範囲内に含まれる。例えば、様々な変更が、本発明の範囲から逸脱することなくなされ得る。追加的に、上述されたステップのいくつかは順序に依存しなくてもよく、それゆえ、説明されているものと異なる順序で実施されることが可能である。
【図１】
2018514012.tif 000003
【図２Ａ】
2018514012.tif 000004
【図２Ｂ】
2018514012.tif 000005
【図２Ｃ】
2018514012.tif 000006
【図３−１】
2018514012.tif 000007
【図３−２】
2018514012.tif 000008
【図４Ａ】
2018514012.tif 000009
【図４Ｂ】
2018514012.tif 000010
【図４Ｃ】
2018514012.tif 000011
【図５Ａ】
2018514012.tif 000012
【図５Ｂ】
2018514012.tif 000013
【図５Ｃ】
2018514012.tif 000014
【図６Ａ】
2018514012.tif 000015
【図６Ｂ】
2018514012.tif 000016
【図６Ｃ】
2018514012.tif 000017
【図６Ｄ】
2018514012.tif 000018
【国際調査報告】
2018514012.tif 000019
2018514012.tif 000020