(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-07
(45)【発行日】2022-03-15
(54)【発明の名称】ネットワーク上のデータソースへの照会
(51)【国際特許分類】
G06F 16/182 20190101AFI20220308BHJP
G06F 16/28 20190101ALI20220308BHJP
【FI】
G06F16/182
G06F16/28
(21)【出願番号】P 2017543965
(86)(22)【出願日】2016-02-16
(86)【国際出願番号】 US2016018028
(87)【国際公開番号】W WO2016133880
(87)【国際公開日】2016-08-25
【審査請求日】2019-02-08
(32)【優先日】2015-02-18
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2015-06-26
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】シェヒター,イアン
(72)【発明者】
【氏名】アリン,グレン ジョン
【審査官】原 秀人
(56)【参考文献】
【文献】米国特許出願公開第2009/0055370(US,A1)
【文献】特開平07-065032(JP,A)
【文献】特表2013-517574(JP,A)
【文献】特表2014-519080(JP,A)
【文献】特開平02-067682(JP,A)
【文献】特開平10-091494(JP,A)
【文献】特開平10-049409(JP,A)
【文献】特開平09-319757(JP,A)
【文献】欧州特許出願公開第00822505(EP,A2)
【文献】国際公開第2007/061430(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する、データ処理システムによって実施されるコンピュータ実施方法であって、前記コンピュータプログラムは、前記データ処理システムの有形の非一時的なコンピュータ可読媒体内に記憶された構成データに少なくとも一部基づいて実行され、前記実行することは、
SQLクエリを受信し、前記SQLクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記SQLクエリに基づいてコンピュータプログラムを生成することであって、前記生成することは、
前記リソースに関連付けられた
少なくとも1つのエントリを有するカタログを識別し、
前記少なくとも1つのエントリは、データを受信する目的のために、前記リソースに対する命令を送信するように、コンピュータプログラムを構成するのに使用可能である構成データ
を表すこと、
前記SQLクエリに基づいてクエリプランナへの要求を生成すること、
前記要求を前記クエリプランナへ提供すること、
前記要求に基づいて前記クエリプランナによって生成されたクエリプランを受信し、前記クエリプランは、リレーショナルデータベースを管理するシステムによって実施されるべき1つまたは複数のステップの記述を含むこと、
前記クエリプランに基づいて、前記コンピュータプログラムを生成し、前記コンピュータプログラムの少なくとも一部は、前記
カタログの前記少なくとも1つの
エントリに基づいて前記リソースと通信するように構成されていること、
を含む、生成することと、
前記識別された前記カタログから前記構成データを受信することと、
前記データ処理システムの実行システム上で、前記構成データに基づいて前記コンピュータプログラムを実行することとを含み、
前記コンピュータプログラムの前記実行は、
1つまたは複数の命令を前記リソースへ伝送し、前記命令は前記SQLクエリによって指定された操作と等価の操作を実施するように前記リソースによって解釈可能であること、および
前記命令に応答して前記リソースからのデータを受信すること、
を引き起こす、方法。
【請求項2】
前記コンピュータプログラムの部分が、前記リソースがアクセスされる仕方を定義する実行可能命令を含み、前記実行可能命令は前記コンピュータプログラムの前記部分に提供された前記構成データに基づいて動作する、請求項1に記載の方法。
【請求項3】
前記構成データが、前記リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、請求項1に記載の方法。
【請求項4】
前記構成データに基づいてパラメータ値を生成することと、
前記パラメータ値を前記コンピュータプログラムの部分へ提供し、前記部分は前記実行システムに前記リソースと通信させる機能を有することと、
を含み、
前記コンピュータプログラムの前記実行が前記パラメータ値に基づく、請求項1に記載の方法。
【請求項5】
前記構成データに基づいてパラメータ値を生成することが、パラメータファイルを、前記コンピュータプログラムの前記部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、
前記パラメータ値を前記コンピュータプログラムの前記部分へ提供することが、前記パラメータファイルを前記コンピュータプログラムの前記部分が利用できるようにすることを含む、請求項4に記載の方法。
【請求項6】
前記SQLクエリが、引き数を含むSELECT文を含み、前記引き数の少なくとも一部分は、前記リソースに関連付けられた前記識別子に対応する、請求項1に記載の方法。
【請求項7】
前記コンピュータプログラムが、前記SQLクエリの操作を表すコンポーネントを含む、請求項1に記載の方法。
【請求項8】
前記コンピュータプログラムがデータフローグラフであり、前記コンピュータプログラムの前記部分が前記データフローグラフの部分グラフである、請求項1に記載の方法。
【請求項9】
前記リソースが、前記リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる、請求項1に記載の方法。
【請求項10】
前記SQLクエリを受信したことに応答して前記APIの関数を実行させることを含み、
前記APIの前記関数は前記リソースにおいて実行可能であり、前記リソースへ伝送された前記命令が前記APIの前記関数を実行させる、請求項9に記載の方法。
【請求項11】
前記外部リソースから受信された前記データをデータベーステーブルの形式でフォーマットすることを含む、請求項1に記載の方法。
【請求項12】
前記リソースがリレーショナルデータベース管理システムでない、請求項1に記載の方法。
【請求項13】
前記命令が、SQLクエリに応答して結果を返さない前記リソースのファシリティへ伝送される、請求項1に記載の方法。
【請求項14】
前記命令に応答して前記リソースから受信された前記データが、前記SQLクエリによって指定されたデータを含む、請求項1に記載の方法。
【請求項15】
前記命令に応答して前記リソースから受信された前記データ内のレコードおよびフィールドを識別することを含み、前記レコードおよびフィールドは、前記データ処理システムの外部にある前記リソースに関連付けられたレコードフォーマットに基づいて識別される、請求項1に記載の方法。
【請求項16】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する能力を有するデータ処理システムであって、前記コンピュータプログラムは、前記データ処理システムの有形の非一時的なコンピュータ可読媒体内に記憶された構成データに少なくとも一部基づいて実行され、前記データ処理システムは、
SQLクエリを受信し、前記SQLクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記SQLクエリに基づいてコンピュータプログラムを生成することであって、
前記リソースに関連付けられた
少なくとも1つのエントリを有するカタログを識別し、
前記少なくとも1つのエントリは、データを受信する目的のために、前記リソースに対する命令を送信するように、コンピュータプログラムを構成するのに使用可能である構成データ
を表すこと、
前記SQLクエリに基づいてクエリプランナへの要求を生成すること、
前記要求を前記クエリプランナへ提供すること、
前記要求に基づいて前記クエリプランナによって生成されたクエリプランを受信し、前記クエリプランは、リレーショナルデータベースを管理するシステムによって実施されるべき1つまたは複数のステップの記述を含むこと、
前記クエリプランに基づいて、前記コンピュータプログラムを生成し、前記コンピュータプログラムの少なくとも一部は、前記
カタログの前記少なくとも1つの
エントリに基づいて前記リソースと通信するように構成されていること、
を含む、生成することと、
前記識別された前記カタログから前記構成データを受信することと、
前記データ処理システムの実行システム上で、前記構成データに基づいて前記コンピュータプログラムを実行することと
を含む、演算を実施し、
前記コンピュータプログラムの前記実行は、
1つまたは複数の命令を前記リソースへ伝送し、前記命令は前記SQLクエリによって指定された操作と等価の操作を実施するように前記リソースによって解釈可能であること、および
前記命令に応答して前記リソースからのデータを受信すること、
を含む、データ処理システム。
【請求項17】
前記コンピュータプログラムの部分が、前記リソースがアクセスされる仕方を定義する実行可能命令を含み、前記実行可能命令は前記コンピュータプログラムの前記部分に提供された前記構成データに基づいて動作する、請求項
16に記載のシステム。
【請求項18】
前記構成データが、前記リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、請求項
16に記載のシステム。
【請求項19】
前記演算は、
前記構成データに基づいてパラメータ値を生成することと、
前記パラメータ値を前記コンピュータプログラムの部分へ提供し、前記部分は前記実行システムに前記リソースと通信させる機能を有することと、
を含み、
前記コンピュータプログラムの前記実行が前記パラメータ値に基づく、請求項
16に記載のシステム。
【請求項20】
前記構成データに基づいてパラメータ値を生成することが、パラメータファイルを、前記コンピュータプログラムの前記部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、
前記パラメータ値を前記コンピュータプログラムの前記部分へ提供することが、前記パラメータファイルを前記コンピュータプログラムの前記部分が利用できるようにすることを含む、請求項
19に記載のシステム。
【請求項21】
前記SQLクエリが、引き数を含むSELECT文を含み、前記引き数の少なくとも一部分は、前記リソースに関連付けられた前記識別子に対応する、請求項
16に記載のシステム。
【請求項22】
前記コンピュータプログラムが、前記SQLクエリの操作を表すコンポーネントを含む、請求項16に記載のシステム。
【請求項23】
前記コンピュータプログラムがデータフローグラフであり、前記コンピュータプログラムの前記部分が前記データフローグラフの部分グラフである、請求項
16に記載のシステム。
【請求項24】
前記リソースが、前記リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる、請求項
16に記載のシステム。
【請求項25】
前記演算は、
前記SQLクエリを受信したことに応答して前記APIの関数を実行させることを含み、
前記APIの前記関数は前記リソースにおいて実行可能であり、前記リソースへ伝送された前記命令が前記APIの前記関数を実行させる、請求項
24に記載のシステム。
【請求項26】
前記演算は、
前記外部リソースから受信された前記データをデータベーステーブルの形式でフォーマットすることを含む、請求項
16に記載のシステム。
【請求項27】
前記リソースがリレーショナルデータベース管理システムでない、請求項
16に記載のシステム。
【請求項28】
前記命令が、SQLクエリに応答して結果を返さない前記リソースのファシリティへ伝送される、請求項
16に記載のシステム。
【請求項29】
前記命令に応答して前記リソースから受信された前記データが、前記SQLクエリによって指定されたデータを含む、請求項
16に記載のシステム。
【請求項30】
前記演算は、
前記命令に応答して前記リソースから受信された前記データ内のレコードおよびフィールドを識別することを含み、前記レコードおよびフィールドは、前記データ処理システムの外部にある前記リソースに関連付けられたレコードフォーマットに基づいて識別される、請求項
16に記載のシステム。
【請求項31】
データ処理システムが、リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行することを可能にする命令を記憶する非一時的なコンピュータ可読記憶デバイスであって、前記コンピュータプログラムは、前記データ処理システムの有形の非一時的なコンピュータ可読媒体内に記憶された構成データに少なくとも一部基づいて実行され、前記命令は、前記データ処理システムに、
SQLクエリを受信し、前記SQLクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、
前記SQLクエリに基づいてコンピュータプログラムを生成することであって、
前記リソースに関連付けられた
少なくとも1つのエントリを有するカタログを識別し、
前記少なくとも1つのエントリは、データを受信する目的のために、前記リソースに対する命令を送信するように、コンピュータプログラムを構成するのに使用可能である構成データ
を表すこと、
前記SQLクエリに基づいてクエリプランナへの要求を生成すること、
前記要求を前記クエリプランナへ提供すること、
前記要求に基づいて前記クエリプランナによって生成されたクエリプランを受信し、前記クエリプランは、リレーショナルデータベースを管理するシステムによって実施されるべき1つまたは複数のステップの記述を含むこと、
前記クエリプランに基づいて、前記コンピュータプログラムを生成し、前記コンピュータプログラムの少なくとも一部は、前記
カタログの前記少なくとも1つの
エントリに基づいて前記リソースと通信するように構成されていること、
を含む、生成することと、
前記識別された前記カタログから前記構成データを受信することと、
前記データ処理システムの実行システム上で、前記構成データに基づいて前記コンピュータプログラムを実行することとを含み演算を実施させ、
前記コンピュータプログラムの前記実行は、
1つまたは複数の命令を前記リソースへ伝送し、前記命令は前記SQLクエリによって指定された操作と等価の操作を実施するように前記リソースによって解釈可能であること、および
前記命令に応答して前記リソースからのデータを受信すること、
を含む、非一時的なコンピュータ可読記憶デバイス。
【請求項32】
前記コンピュータプログラムの部分が、前記リソースがアクセスされる仕方を定義する実行可能命令を含み、前記実行可能命令は前記コンピュータプログラムの前記部分に提供された前記構成データに基づいて動作する、請求項
31に記載の方法。
【請求項33】
前記構成データが、前記リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項34】
前記演算は、
前記構成データに基づいてパラメータ値を生成することと、
前記パラメータ値を前記コンピュータプログラムの部分へ提供し、前記部分は前記実行システムに前記リソースと通信させる機能を有することと、
を含み、
前記コンピュータプログラムの前記実行が前記パラメータ値に基づく、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項35】
前記構成データに基づいてパラメータ値を生成することが、パラメータファイルを、前記コンピュータプログラムの前記部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、
前記パラメータ値を前記コンピュータプログラムの前記部分へ提供することが、前記パラメータファイルを前記コンピュータプログラムの前記部分が利用できるようにすることを含む、請求項
34に記載のコンピュータ可読記憶デバイス。
【請求項36】
前記SQLクエリが、引き数を含むSELECT文を含み、前記引き数の少なくとも一部分は、前記リソースに関連付けられた前記識別子に対応する、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項37】
前記コンピュータプログラムが、前記SQLクエリの操作を表すコンポーネントを含む、請求項31に記載のコンピュータ可読記憶デバイス。
【請求項38】
前記コンピュータプログラムがデータフローグラフであり、前記コンピュータプログラムの前記部分が前記データフローグラフの部分グラフである、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項39】
前記リソースが、前記リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項40】
前記演算は、
前記SQLクエリを受信したことに応答して前記APIの関数を実行させることを含み、
前記APIの前記関数は前記リソースにおいて実行可能であり、前記リソースへ伝送された前記命令が前記APIの前記関数を実行させる、請求項
39に記載のコンピュータ可読記憶デバイス。
【請求項41】
前記演算は、
前記外部リソースから受信された前記データをデータベーステーブルの形式でフォーマットすることを含む、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項42】
前記リソースがリレーショナルデータベース管理システムでない、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項43】
前記命令が、SQLクエリに応答して結果を返さない前記リソースのファシリティへ伝送される、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項44】
前記命令に応答して前記リソースから受信された前記データが、前記SQLクエリによって指定されたデータを含む、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項45】
前記演算は、
前記命令に応答して前記リソースから受信された前記データ内のレコードおよびフィールドを識別することを含み、前記レコードおよびフィールドは、前記データ処理システムの外部にある前記リソースに関連付けられたレコードフォーマットに基づいて識別される、請求項
31に記載のコンピュータ可読記憶デバイス。
【請求項46】
リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する能力を有するデータ処理システムであって、前記コンピュータプログラムは、前記データ処理システムの有形の非一時的なコンピュータ可読媒体内に記憶された構成データに少なくとも一部基づいて実行され、前記データ処理システムは、
SQLクエリを受信するための手段であって、前記SQLクエリは、前記データ処理システムの外部にあるリソースに関連付けられた識別子を含む、受信するための手段と、
前記SQLクエリに基づいてコンピュータプログラムを生成するための手段であって、前記リソースに関連付けられた
少なくとも1つのエントリを有するカタログを識別することを含み、
前記少なくとも1つのエントリは、データを受信する目的のために、前記リソースに対する命令を送信するように、コンピュータプログラムを構成するのに使用可能である構成データ
を表す、生成するための手段と、
前記データ処理システムの実行システム上で、前記構成データに基づいて前記コンピュータプログラムを実行するための手段と、
前記識別された前記カタログから前記構成データを受信する手段とを含み、
前記SQLクエリに基づいて前記コンピュータプログラムを生成する手段が、
前記SQLクエリに基づいてクエリプランナへの要求を生成する手段、
前記要求を前記クエリプランナへ提供する手段、
前記要求に基づいて前記クエリプランナによって生成されたクエリプランを受信し、前記クエリプランは、リレーショナルデータベースを管理するシステムによって実施されるべき1つまたは複数のステップの記述を含む手段、
前記クエリプランに基づいて、前記コンピュータプログラムを生成し、前記コンピュータプログラムの少なくとも一部は、前記
カタログの前記少なくとも1つの
エントリに基づいて前記リソースと通信するように構成されている手段、
を含む、
前記コンピュータプログラムの前記実行は、
1つまたは複数の命令を前記リソースへ伝送し、前記命令は前記SQLクエリによって指定された操作と等価の操作を実施するように前記リソースによって解釈可能であること、および
前記命令に応答して前記リソースからのデータを受信すること、
を引き起こす、データ処理システム。
【請求項47】
前記コンピュータプログラムの部分が、前記リソースがアクセスされる仕方を定義する実行可能命令を含み、前記実行可能命令は前記コンピュータプログラムの前記部分に提供された前記構成データに基づいて動作する、請求項
46に記載のシステム。
【請求項48】
前記構成データが、前記リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、請求項
46に記載のシステム。
【請求項49】
前記構成データに基づいてパラメータ値を生成する手段と、
前記パラメータ値を前記コンピュータプログラムの部分へ提供し、前記部分は前記実行システムに前記リソースと通信させる機能を有する手段と、
を含み、
前記コンピュータプログラムの前記実行が前記パラメータ値に基づく、請求項
46に記載のシステム。
【請求項50】
前記構成データに基づいてパラメータ値を生成する手段が、パラメータファイルを、前記コンピュータプログラムの前記部分によって可読のフォーマットで生成するパラメータジェネレータを実行する手段を含み、
前記パラメータ値を前記コンピュータプログラムの前記部分へ提供する手段が、前記パラメータファイルを前記コンピュータプログラムの前記部分が利用できるようにする手段を含む、請求項
49に記載のシステム。
【請求項51】
前記SQLクエリが、引き数を含むSELECT文を含み、前記引き数の少なくとも一部分は、前記リソースに関連付けられた前記識別子に対応する、請求項
46に記載のシステム。
【請求項52】
前記コンピュータプログラムが、前記SQLクエリの操作を表すコンポーネントを含む、請求項
46に記載のシステム。
【請求項53】
前記コンピュータプログラムがデータフローグラフであり、前記コンピュータプログラムの前記部分が前記データフローグラフの部分グラフである、請求項
46に記載のシステム。
【請求項54】
前記リソースが、前記リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる、請求項
46に記載のシステム。
【請求項55】
前記SQLクエリを受信したことに応答して前記APIの関数を実行させる手段を含み、
前記APIの前記関数は前記リソースにおいて実行可能であり、前記リソースへ伝送された前記命令が前記APIの前記関数を実行させる、請求項
54に記載のシステム。
【請求項56】
前記外部リソースから受信された前記データをデータベーステーブルの形式でフォーマットする手段を含む、請求項
46に記載のシステム。
【請求項57】
前記リソースがリレーショナルデータベース管理システムでない、請求項
46に記載のシステム。
【請求項58】
前記命令が、SQLクエリに応答して結果を返さない前記リソースのファシリティへ伝送される、請求項
46に記載のシステム。
【請求項59】
前記命令に応答して前記リソースから受信された前記データが、前記SQLクエリによって指定されたデータを含む、請求項
46に記載のシステム。
【請求項60】
前記命令に応答して前記リソースから受信された前記データ内のレコードおよびフィールドを識別する手段を含み、前記レコードおよびフィールドは、前記データ処理システムの外部にある前記リソースに関連付けられたレコードフォーマットに基づいて識別される、請求項
46に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
優先権の主張
本出願は、2015年2月18日に出願された米国特許出願第62/117,588号に対する優先権を主張する、2015年6月26日に出願された、米国特許出願第14/752,094号に対する優先権を主張する。これらの出願の内容全体は本明細書において参照により組み込まれる。
【0002】
本記載は、例えば、SQLまたは別の種類のクエリ言語を用いた、ネットワーク上のデータソースへの照会に関する。
【背景技術】
【0003】
データソースに対するクエリは、データソースから取得されるべきデータを指定する。クエリはデータソース(例えば、データベース)へ提供されることが可能であり、データソースに関連付けられたデータ処理システム(例えば、データベース管理システム)が、クエリによって指定されたデータを返すことができる。クエリによって指定されたデータソース内のデータを識別するべくクエリを構文解析するために、様々な技法を用いることができる。
【発明の概要】
【課題を解決するための手段】
【0004】
態様1は、リレーショナルデータベースに適用可能なクエリ言語に従って表現されたクエリに基づいてコンピュータプログラムを実行する、データ処理システムによって実施されるコンピュータ実施方法であって、コンピュータプログラムは、有形の非一時的なコンピュータ可読媒体内に記憶されたデータに少なくとも一部基づいて実行され、実行することは、SQLクエリを受信し、SQLクエリは、データ処理システムの外部にあるリソースに関連付けられた識別子を含むことと、SQLクエリに基づいてコンピュータプログラムを生成することであって、リソースに関連付けられた構成データを識別することを含み、構成データは、リソースと通信する際に用いられる少なくとも1つの値を指定する、生成することと、構成データに基づいてコンピュータプログラムを実行することと、を含み、コンピュータプログラムの実行は、1つまたは複数の命令をリソースへ伝送し、命令はSQLクエリの操作以外の操作を定義すること、および命令に応答してデータをリソースから受信すること、を引き起こす、方法である。
【0005】
態様2は、コンピュータプログラムの部分が、リソースがアクセスされる仕方を定義する実行可能命令を含み、実行可能命令は、コンピュータプログラムの部分に提供された構成データに基づいて動作する、態様1の方法である。
【0006】
態様3は、構成データが、リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される、態様1または2の方法である。
【0007】
態様1は、構成データに基づいてパラメータ値を生成することと、パラメータ値をコンピュータプログラムの部分へ提供し、部分はリソースと通信する能力を有することと、を含み、コンピュータプログラムの実行がパラメータ値に基づく、態様1、2、または3のいずれか1つの方法である。
【0008】
態様5は、構成データに基づいてパラメータ値を生成することが、パラメータファイルを、コンピュータプログラムの部分によって可読のフォーマットで生成するパラメータジェネレータを実行することを含み、パラメータ値をコンピュータプログラムの部分へ提供することが、パラメータファイルをコンピュータプログラムの部分が利用できるようにすることを含む、態様4の方法である。
【0009】
態様6は、SQLクエリが、引き数を含むSELECT文を含み、引き数の少なくとも一部分は、リソースに関連付けられた識別子に対応する、態様1~5のいずれか1つの方法である。
【0010】
態様7は、コンピュータプログラムが、SQLクエリの操作を表すコンポーネントを含む、態様1~6のいずれか1つの方法である。
【0011】
態様8は、コンピュータプログラムがデータフローグラフであり、コンピュータプログラムの部分がデータフローグラフの部分グラフである、態様1~6のいずれか1つの方法である。
【0012】
態様9は、リソースが、リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる、態様1~8のいずれか1つの方法である。
【0013】
態様10は、SQLクエリを受信したことに応答してAPIの関数を実行させることを含み、APIの関数はリソースにおいて実行可能であり、リソースへ伝送された命令がAPIの関数を実行させる、態様9の方法である。
【0014】
態様11は、外部リソースから受信されたデータをデータベーステーブルの形式でフォーマットすることを含む、態様1~10のいずれか1つの方法である。
【0015】
態様12は、リソースがリレーショナルデータベース管理システムでない、態様1~11のいずれか1つの方法である。
【0016】
態様13は、命令が、SQLクエリに応答して結果を返さないリソースのファシリティへ伝送される、態様1~12のいずれか1つの方法である。
【0017】
態様14は、命令に応答してリソースから受信されたデータが、SQLクエリによって指定されたデータを含む、態様1~13のいずれか1つの方法である。
【0018】
態様15は、命令に応答してリソースから受信されたデータ内のレコードおよびフィールドを識別することを含み、レコードおよびフィールドは、データ処理システムの外部にあるリソースに関連付けられたレコードフォーマットに基づいて識別される、態様1~14のいずれか1つの方法である。
【0019】
他の諸態様は、対応する装置、システム、およびコンピュータ可読記憶デバイスを含むことができる。
【0020】
諸態様は以下の利点のうちの1つまたは複数を含むことができる。データ処理システムは、データ処理システムの外部のリソース(例えば、インターネット上で利用可能なもの)を参照し、リレーショナルデータベース管理システムではないクエリを実行することができる。
【0021】
ネットワーク(例えば、インターネットなどの大規模ネットワーク)を通じて分散したデータは、たとえ、ネットワーク内のデータソースがデータベース言語に応答することができない場合、またはリレーショナルデータベースでない場合であっても、データベースプログラミング言語(例えば、SQL)を用いることによって効率的にアクセス可能にすることができる。これは、特定のデータソースに特に適応させることができ、それにより、時間とともに変化するデータソースを有するネットワーク内で用いることができる柔軟な探索スキームを提供し得る。その結果、これは、分散ネットワークを、(例えば、データソースの数を拡大もしくは縮小することによって、またはデータソースを交換もしくは変更することによって)より急速に発展させ、その一方で、発展させたネットワークの現在のデータソース内に記憶されたデータへのアクセスを維持することを可能にし得る。
【0022】
本発明の他の特徴および利点は、以下の説明および請求項から明らかになるであろう。
【図面の簡単な説明】
【0023】
【
図1】クエリを処理することができるデータ処理システムを示す図である。
【
図2A】データ処理システムの要素を示す図である。
【
図2B】データ処理システムの要素を示す図である。
【
図2C】データ処理システムの要素を示す図である。
【
図3】クエリを実行するためのユーザインターフェースを示す図である。
【
図4B】データフローグラフの部分グラフを示す図である。
【
図4C】コンポーネントの実行可能コードを示す図である。
【
図5A】外部リソースのカタログの内容を示す図である。
【
図5B】外部リソースのカタログの内容を示す図である。
【
図5C】外部リソースのカタログの内容を示す図である。
【
図6A】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【
図6B】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【
図6C】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【
図6D】クエリを実行することに関連付けられたプロセスのためのフローチャートである。
【発明を実施するための形態】
【0024】
データ処理システムはクエリ(SQLクエリなど)をデータフローグラフなどのコンピュータプログラムに変換することができる。コンピュータプログラムは、実行されると、クエリによって指定された操作と等価の操作(例えば、データ処理操作)を実施するコンポーネントを含む。
【0025】
図1は、クエリ102を処理し、クエリ102によって指定された結果104を生成することができるデータ処理システム100を示す。結果104は、元のクエリ102によって参照された外部リソース108から受信されたデータ106に基づく。データ処理システム100は、データ処理システム100がクエリ102に基づいて生成し、外部リソース108へ送信する命令110に応答してデータ106を受信する。
【0026】
クエリ102は、クエリによって指定されたデータを取得するために用いられる。1つの種類のクエリ102は構造化クエリ言語(SQL)クエリである。本説明はSQLクエリを一例として用いることになるが、ここで説明される諸技法は多次元式(MDX)クエリなどの他の種類のクエリとともに用いることもできるであろう。
【0027】
SQLクエリ(SQL文とも呼ばれる)は、構造化クエリ言語(SQL)によって定義されたコマンドおよび構文を用いる。概して、クエリは、クエリ内で示された1つまたは複数のデータセット内のデータのサブセットを指定する文である。指定されたサブセットは、クエリを処理するシステムによって、クエリを発行したシステムへ返されることが可能である。クエリによって指定され、クエリに応答して返されるデータは概して、クエリによって示されたデータセット内に記憶されている全データの一部分である。SQLクエリの一例は、「SELECT last_name FROM current_customers」であり得るであろう。このSQLクエリは操作、SELECTを含む。操作、SELECTは、クエリを実行するシステムに、SELECT操作の引き数に従ってデータを取得するように命令する。SQLの構文内において、引き数は、データベーステーブルなどのデータのセットのである、「current_customers」、およびデータベーステーブルの列である、「last_name」である。システムがクエリを解釈し、クエリの操作を実行すると、システムはクエリに応答してlast_name列のデータ(例えば、last_name列内に含まれているデータの各部分)を返すことになる。SQLは、2008年4月7日に発行された、Alex KriegelおよびBoris Trukhnovによる「SQL Bible, 2nd Edition」、ISBN978-0470229064に詳細に説明されている。この文献は、本明細書において参照により組み込まれる。
【0028】
クエリに応答してデータを返すリソースの典型的な例はリレーショナルデータベースである。リレーショナルデータベースは、1つまたは複数のデータベーステーブル、ならびにSQLクエリを解釈すること、データをテーブルから読み出すこと、データをテーブルに書き込むこと、およびその他の種類のデータ処理機能を実施することなどのデータ処理操作を管理するシステムの集合である。データベーステーブルは、a)レコードを各々表す行、およびb)行内に記憶されたデータのカテゴリを各々表す列の形で配列されたデータの集合である。例えば、「current_customers」と呼ばれるデータベーステーブルは、事業の現在の顧客を各々表す行を有してもよく、顧客の氏名、顧客の住所、顧客によって購入された一番最近の製品等などのデータのカテゴリを表す列を有してもよい。
【0029】
リレーショナルデータベーステーブルは、データを、属性に各々対応するデータの要素で構成された、タプルの形式で記憶する一種のデータベーステーブルである。タプルはリレーショナルデータベース内の行の形式を採ることができ、属性はリレーショナルデータベース内の列の形式を採ることができる。それゆえ、各タプルは、データベーステーブルの属性のうちの1つに各々対応するデータの要素(時として、属性値と呼ばれる)を含む。さらに、複数のタプルのグループ化は時として関係と呼ばれる。
【0030】
リレーショナルデータベース管理システム(RDBMS)は、リレーショナルデータベース内に記憶されたデータを作成および変更することを対象とする命令を処理するシステムである。RDBMSは、クエリを解釈し、クエリによって指定されたデータを返すための機能性を含む。クエリを解釈することと、クエリによって指定されたデータを返すこととの組み合わせは、時として、クエリを実行することと称される。例えば、いくつかのRDBMSの実装形態は、a)SQLクエリを構文解析し、b)構造化クエリ言語によって定義された操作を識別し、c)コマンドの引き数を識別し、d)引き数に従って操作を実施する(例えば、実行する)エンジンを含む。
【0031】
上述されたように、SQLクエリ「SELECT last_name FROM current_customersは操作、SELECTを含み、この操作はRDBMSに、SELECT操作の引き数に従ってデータを取得するように命令する。引き数は、RDBMSによって管理されているデータベーステーブルである、「current_customers」、およびデータベーステーブルの列である、「last_name」である。RDBMSがクエリを解釈し、クエリの操作を実行すると、RDBMSはクエリに応答してlast_name列のデータ(例えば、last_name列内に含まれているデータの各部分)を返すことになる。RDBMSのいくつかの実装形態では、クエリプランナと呼ばれるモジュールが、実施されるべき操作を識別することになる。このように、SQLは、リレーショナルデータベースに適用可能な、例えば、RDBMSによって維持されているデータに適用可能なクエリ言語である。
【0032】
外部リソース108はデータ処理システム100の外部にある。(データ処理システム100のいくつかの構成要素は
図2A~
図2Cに詳細に示される)。例えば、外部リソース108は、ネットワーク(例えば、インターネット)を用いて通信するファシリティとすることができる。データ処理システム100は、データをネットワークへ送信すること、およびデータをネットワークから受信することによって、外部リソース108と通信する。外部リソース108は、記憶媒体、例えば、有形の非一時的なコンピュータ可読媒体上に記憶されたデータベーステーブル、データファイル、またはその他のデータ構造などのデータのセットを含んでもよい。
【0033】
データ処理システム100は、たとえ、クエリ102によって指定された外部リソース108がRBDMSを含まない場合でも、クエリ102によって指定された結果104を生成する能力を有する。言い換えれば、外部リソース108はRDBMSであるか、またはその構成要素の間にRDBMSを含む必要がない。外部リソース108のいくつかの例はRDBMSを含むことになり、その一方で、外部リソース108の他の例はRDBMSを含まないことになる。
【0034】
使用時に、データ処理システム100はクエリ102に基づいてコンピュータプログラム108(時として、データ処理プログラムと呼ばれる)を生成する。例えば、コンピュータプログラム108は、クエリを入力として受け取り、データフローグラフを出力として作成するエンジン(例えば、データ処理システム100のサブシステムを形成するエンジン)を用いて生成されることが可能である。ここではデータフローグラフが一例として用いられているが、コンピュータプログラムは、プログラムコードによって表された命令を実施するために実行されることが可能であるプログラムコードを含む任意の種類のプログラムとすることができる。
【0035】
このように、
図1に示されるコンピュータプログラム108などのコンピュータプログラムは、実行されると、例えば、RDBMSなどのデータベース管理システムによる、対応するクエリ102の実行と同じ出力を作成することができる。それゆえ、クエリ102は、SQLなどのクエリ言語を用いて書くことができる。しかし、対応するデータ処理操作を実施するシステム、例えば、データ処理システム100のサブシステムは、クエリ102を実行したシステム(例えば、RDBMS)によって実施されるであろう操作と等価である操作を実施するために、コンピュータプログラム108を実行することができる。(概して、RDBMSは、コンピュータプログラム108を実行する能力を有する機能性を有しない)。2つの操作は等価であるという時、2つの操作は、同じ入力データを提供されると、実質的に同じ出力データを作成することを意味する。一例として、2つの操作は、同じ入力データを提供されると、全く同じ出力データを作成してもよい。一例として、同じ入力データを提供された2つの操作は、データのフォーマッティングが異なるのみである出力データを作成してもよく、例えば、1つの操作はコンマ区切りの出力データを作成してもよく、等価な操作は、そうでない場合にはコンマ区切りの出力データと同一であるタブ区切りの出力データを作成してもよい。
【0036】
データ処理システム100は、たとえ、クエリ102がRDBMS以外のデータソースへの参照112を含む場合でも、クエリ102によって指定された結果104を生成することができる。例えば、クエリ102は、RDBMSでない外部リソース108を参照してもよい。外部リソース108はRDBMSでないため、外部リソース108は、クエリ、例えば、SQLクエリを解釈するための機能性に関連付けられていない。いくつかの実装形態では、データ処理システム100が外部リソース108のデータのレコードフォーマットへのアクセスを有する場合には、データ処理システム100はクエリを、外部リソース108から受信されたデータに適用することができる。レコードフォーマット(時として、スキーマと呼ばれる)はデータの本体の編成の記述である。
【0037】
外部リソース108は、データ処理システム100の外部にあるデータの任意のソースとすることができる。データ処理システム100の外部にあるによって、リソースはデータ処理システム100の構成要素のうちの1つでないことを意味する。(データ処理システム100の構成要素のいくつかの例は
図2A~
図2Cに詳細に示される)。例えば、外部リソース108は、ネットワーク114(例えば、ここでは「雲」によって表されている、インターネット)を用いて通信するファシリティとすることができる。データ処理システム100は、データをネットワーク114へ送信すること、およびデータをネットワーク114から受信することによって、外部リソース108と通信する。いくつかの例では、外部リソース108は、TCP/IPまたはUDP/IPなどのインターネットベースのプロトコルを用いて通信するウェブサイトまたは別のファシリティとすることができる。
【0038】
いくつかの実装形態では、外部リソース108は、ネットワーク114には不可視であるRDBMSを含んでもよい。これによって、外部リソース108は、外部リソース108のデータを記憶するリレーショナルデータベース管理システムを含んでもよいが、リレーショナルデータベース管理システムは、限られた場合(例えば、システムアドミニストレータがクエリを提出することを可能にするシステムアドミニストレータインターフェースを経由するなどの場合)を除いて、ネットワーク114を経由して到達するSQLクエリなどのクエリを受け付けないことを意味する。例えば、外部リソース108が、インターネット上で利用可能なウェブサイトである場合には、このとき、外部リソース108は、データを記憶する「後置型」リレーショナルデータベースを有してもよい。本例では、リレーショナルデータベースは、ウェブブラウザインターフェース、モバイルアプリケーション、または外部リソース108の多くの、またはほとんどのユーザによって利用されているその他のアクセス技法からのSQLクエリを受け付けない。その代わりに、外部リソース108のデータは、ハイパーテキスト転送プロトコル(HTTP)要求などの、SQLクエリを含まない技法、またはアプリケーションプログラミングインターフェース(API、後述される)を経由して提出された命令、あるいは別の技法を経由して主にアクセスされる。
【0039】
外部リソース108はクエリ102を解釈しないため、データ処理システム100は、外部リソース108によって解釈されることが可能である、外部リソース108へ伝送するべき命令110を決定する。命令110は元のクエリ102の形式以外の形式のものである。例えば、元のクエリ102がSQLクエリである場合には、命令110はSQLクエリでない(例えば、命令110はSQLコマンドまたは引き数を含まない)。データ処理システム100は、クエリ102に基づいて、および外部リソース108を記述する他の情報に基づいて、いかなる命令110を外部リソース108へ送信するべきであるかを決定することができる。いくつかの実装形態では、データ処理システム100は、クエリ102を解釈し、クエリ102によって指定された結果104を生成するために用いられるモジュールを有する。いくつかの実装形態では、データ処理システム100は、クエリ102を実施する操作に対応する操作を含むコンピュータプログラムを生成し、実行されると、命令110を外部リソース108へ送信する。
【0040】
図2A~
図2Cは、外部リソース108を参照するクエリ102を実行するために用いることができるデータ処理システム100の要素を示す。
図2Aを参照すると、クエリ102がデータ処理システム100によって受信されると、クエリ102はコンピュータプログラム生成エンジン120へ提供される。コンピュータプログラム生成エンジン120は、実行されると、クエリ102に対応する操作を実施するコンピュータプログラム132を生成する。例えば、クエリ102は、SQLクエリ、例えば、構造化クエリ言語によって定義された1つまたは複数のコマンド、ならびに操作に関連付けられた引き数を含むクエリであってもよい。本例では、コンピュータプログラム132は、SQLクエリを実施する操作と等価である実行可能な機能性を含む。コンピュータプログラム132が(例えば、実行エンジン140によって)実行されると、コンピュータプログラム132は、SQLクエリ内で定義された同じ引き数に基づいて実行する。
【0041】
データ処理システム100は、操作を実施するためにRDBMSの機能性、例えば、RDBMSのクエリ解釈機能性に頼らない技法を用いて、クエリ102を実施する操作(時として、クエリ102を実行することと称されるプロセス)を実施することができる。その代わりに、クエリは、コンピュータプログラム132を実行することによって実施されることが可能である。コンピュータプログラム132が生成され、構成されると、リレーショナルデータベースのクエリ解釈機能性は、クエリ102に基づいて出力を生成するために用いられない。さらに、データ処理システム100は、たとえ、クエリ102内で識別されたデータソースが、クエリ102の形式のクエリを用いて動作するデータベースでない場合でも、クエリ102を実行することができる。例えば、外部リソース108は、SQLの形式で指定された命令を受け付けるように構成されていなくてもよい。クエリ102がSQLクエリであり、外部リソース108を参照する場合には、このとき、データ処理システム100はクエリ102を受信し、それに応答して、コンピュータプログラム132が構成され、実行されると、コンピュータプログラム132の出力がクエリ102の実行の出力と等価になるように、いかなる操作が実施されるべきであるかを決定することができる。
【0042】
このように、SQLクエリを用いて、データをリレーショナルデータベースシステム以外のシステムから取得することができる。SQLは、クエリを指定するために用いられる共通言語であるため、多くのユーザはSQLクエリの書き方を知っており、多くのレガシーシステムは、SQLクエリを自動的に生成するように構成されている。ここで説明されている諸技法は、ユーザおよびレガシーシステムがSQLクエリを書くか、または生成することを可能にし、SQLクエリは、データを、SQLクエリを解釈するための機能性を有しない外部リソースから取得するために実施されることが可能である。さらに、データは、外部リソースから、SQLクエリを実行するリレーショナルデータベースへデータをコピーするのではなく、データ処理システム100によって外部リソースから取得されることが可能である。
【0043】
いくつかの実装形態では、コンピュータプログラム132はデータフローグラフを含む。データフローグラフは、入力データに対して実施されるべき操作を表すコンポーネント、およびデータの流れを表すコンポーネント(時として、ノードと呼ばれる)の間のリンクを含むコンピュータプログラムである。コンポーネントによって表された操作は、入力データを処理することによって、入力データに基づいて出力データを生成する。コンポーネントが他のコンポーネントにリンクされている場合には、コンポーネントは入力データを他のコンポーネントへ提供し、出力データを他のコンポーネントから受信することができる。この場合、2つのコンポーネントの間の各リンクはコンポーネントの一方から他方のコンポーネントへのデータの流れを表す。グラフのコンポーネントのサブセット(例えば、グラフの1つまたは複数のコンポーネント)は時として、グラフの部分グラフと呼ばれる。
【0044】
データフローグラフがグラフベースの処理システムによって実行されると、コンポーネントの各々が実行され、例えば、コンピュータプログラム、またはコンピュータプログラムの部分が実行され、コンポーネントによって表された操作を実施する。実行時に、データフローグラフは入力データを受信し、入力データは処理され(例えば、データフローグラフのコンポーネントの操作によって操作を受ける)、出力データを生成する。
【0045】
データフローグラフのコンポーネントのいくつかまたは全ては、コンポーネントに関連付けられた操作を実施するための実行可能プログラムコードを呼び出すための情報に各々関連付けられている。いくつかの実装形態では、データフローグラフを表すデータ構造は、実行可能コードを参照するデータを含むことができる。データ構造は、データフローグラフをインスタンス化するために用いることができる。これによって、データ構造は、データフローグラフに関連付けられた操作を実施するコードを実行するために用いることができることを意味する。例えば、コンポーネントは、コンポーネントに関連付けられた操作、例えば、データを処理し、出力することを実施するためのコンピュータ実行可能命令を含むコンピュータ可読記憶装置内に記憶されたコンピュータプログラムへの参照に関連付けられていてもよい。
【0046】
いくつかの例では、データフローグラフのいくつかまたは全てのコンポーネントは、データをプログラムコードが利用できるようにするための情報に各々関連付けられている。例えば、コンポーネントは、データを、コンポーネントに関連付けられた実行可能プログラムへ送出するために呼び出すことができる関数コールに関連付けられていてもよく、またはコンポーネントは、コンポーネントに関連付けられた実行可能プログラムへ送出されたデータを受信することができるネットワークポートに関連付けられていてもよく、またはコンポーネントは、データを、コンポーネントに関連付けられた実行可能プログラムへ送出するための別の技法に関連付けられていてもよい。このように、各コンポーネントはデータを受信し、処理し、出力することができる。
【0047】
いくつかの例では、データフローグラフはパラメータ化可能である。これによって、データフローグラフは、データフローグラフが実行のために準備される際に、パラメータの値を用いて構成されることが可能であることを意味する。パラメータ値を提供されたデータフローグラフのインスタンスは時として、データフローグラフのパラメータ化インスタンスと呼ばれる。パラメータは、パラメータが属するプログラムの挙動を変更するために変更されることが可能であるデータの一種である。例えば、パラメータの値は、プログラムが入力データを処理し、出力データを作成する仕方を変更するために、プログラムへ提供されることが可能である。データフローグラフの場合には、データフローグラフの各コンポーネントは1つまたは複数のパラメータに関連付けられていてもよい。同様に、パラメータのうちの1つまたは複数は単一のコンポーネントに関連付けられているか、または複数のコンポーネントに関連付けられていてもよい。
【0048】
グラフベースのシステムの一例が、「Managing Parameters for Graph-Based Applications」と題する米国特許出願公開第2007/0011668号に詳細に記載されている。この特許出願は本明細書において参照により組み込まれる。グラフベースの計算を実行するためのシステムが、「Executing Computations Expressed as Graphs」と題する米国特許第5,966,072号に記載されている。この特許は本明細書において参照により組み込まれる。さらに、データフローグラフのコンポーネントはクエリ102の操作に置き換えることができる。この置き換えに係る諸技法が、「Managing Data Queries」と題する米国特許出願公開第2011/0179014(A1)号、および同じく「Managing Data Queries」と題する米国特許出願公開第2012/0284255(A1)号にさらに記載されている。これらの特許出願は本明細書において参照により組み込まれる。いくつかの実装形態では、データフローグラフはクエリ102から作成することができる。
【0049】
図2Bを参照すると、いくつかの例では、コンピュータプログラム132は、実行されると、外部リソース108と通信する部分134を含む。例えば、部分134は、データを外部リソース108へ伝送し、および/またはデータを外部リソース108から受信するように構成された実行可能機能性(例えば、実行可能プログラムコード)を含んでもよい。134が実行されると(例えば、部分134のプログラムコードが実行エンジンによって解釈され、実施されると)、コンピュータプログラム134はデータを外部リソース108へ伝送し、および/またはデータを外部リソース108から受信する。いくつかの実装形態では、部分134(およびコンピュータプログラム132の他の部分)は、データ処理システム100に提供されており、外部リソース108の識別に基づいて取得されるプログラムコードを含んでもよい。例えば、アプリケーション開発者(図示されていない)は、部分134のプログラムコードを、外部リソースの技術的要求に適合するように書いていてもよい。いくつかの実装形態では、技術的要求は、後述される、アプリケーションプログラミングインターフェース(API)を含む。いくつかの実装形態では、部分134はデータフローグラフのコンポーネント、またはデータフローグラフの部分グラフである。
【0050】
いくつかの実装形態では、コンピュータプログラム生成エンジン120は、コンピュータプログラムの1つまたは複数の既存の部分にアクセスし、部分を組み立ててコンピュータプログラム132を形成することによって、コンピュータプログラム132を生成する。例えば、コンピュータプログラム生成エンジン120は、既存のコンポーネント、例えば、実行可能プログラムコードの既存の部分を記憶しているコンポーネントライブラリ126へのアクセスを有してもよい。例えば、既存のコンポーネントは、データフローグラフ内に含めるために適したコンポーネントであってもよく、またはデータフローグラフ内に含めるために適した別のグラフ(例えば、部分グラフ)であってもよい。
【0051】
いくつかの実装形態では、コンポーネントライブラリ126は、特定の種類の外部リソース108に各々対応する既存のコンポーネントを含んでもよい。例えば、コンポーネントライブラリ126は、クエリ102内の参照112によって示された外部リソース108に対応するコンポーネント124を含んでもよい。いくつかの例では、コンポーネント124は、開発者によって、データ処理システム100が、参照112に対応する外部リソース108にアクセスすることを可能にする目的のために開発されていてもよい。コンポーネント124は、外部リソース108の識別に基づいてコンポーネントライブラリ126から選定されることが可能である。
【0052】
コンピュータプログラム生成エンジン120が1つまたは複数のコンポーネント124を(例えば、コンポーネントライブラリ126から)受信すると、コンピュータプログラム生成エンジン120はまた、コンポーネント124またはコンポーネント群を構成する。その際に、コンピュータプログラム生成エンジン120は、構成された部分を有するコンピュータプログラム132を生成する。例えば、構成されたコンピュータプログラム132は、外部リソース108と通信するための実行可能機能性を含むコンポーネント124またはコンポーネント群に対応する、構成された部分134を含む。
【0053】
いくつかの実装形態では、構成された部分134は、コンピュータプログラム生成エンジン120によって受信された特性136に基づいて構成されることが可能である。特性136は、外部リソース108の特徴を記述するデータを含む。このデータは、コンピュータプログラム132によって、どのようにデータを外部リソース108へ送信し、そこから受信するのかを決定するために用いられる。いくつかの例では、外部リソース108はデータを特定のフォーマットで送信および受信してもよい。これらの例では、特性136は、外部リソース108へ送信され、そこから受信されるべきデータのフォーマットの仕様を含むことができる。いくつかの例では、外部リソース108はユーザ名および/またはパスワードなどの認証情報の使用を必要としてもよい。これらの例では、特性136は識別子の仕様を含むことができる。いくつかの例では、外部リソース108は特定のアドレスまたはその他のロケーションにおいてアクセス可能であってもよい。例えば、外部リソース108は、特定のIP(インターネットプロトコル)アドレス、または特定のサーバ名、または別の種類のアドレスにおいてアクセス可能であってもよい。これらの例では、特性136はアドレス情報を含むことができる。
【0054】
特性136は、例えば、外部リソース108の動作の変化に応答して、更新されることが可能であるソースから受信されることが可能である。例えば、特性136は、データ処理システム100が通信する能力を有する外部リソース108に対応する特性を表すデータを含むカタログ122内に記憶されていてもよい。カタログ122は、データベース、単層ファイル、または任意の他の種類のデータ記憶機構とすることができる。いくつかの実装形態では、カタログ122は複数のエンティティによって同時に読み出されること、および書き込まれることが可能である。例えば、カタログ122は、並行したデータ読み出し操作および書き込み操作を管理するための機能性を有するデータベースまたはその他のデータ記憶技法として実装することができるであろう。並行したデータ読み出し操作および書き込み操作を管理するための機能性の一例は、データの一部分がいつ書き込まれるのかを示すロックまたはセマフォの使用である。用いられ得るであろう1つの種類のロッキング機能性は、1つまたは複数のロックが獲得され、読み出し操作または書き込み操作が実施され、その後、ロックが解除される、2相ロッキングである。並行したデータ読み出し操作および書き込み操作を管理することによって、単一のカタログ122が生成エンジン120の多くのインスタンスによって用いられることが可能である。さらに、単一のカタログ122が多くの種類の外部リソース108のための特性136を記憶することができる。たとえ、特性136が頻繁にアクセスされるほど(例えば、カタログ136内に記憶された少なくともいくつかの特性が毎秒数回以上読み出されるか、または書き込まれるほど)、カタログ122によってサポートされている外部リソース108の数が十分に大きい場合でも、外部リソース108に関連付けられた特性136はいずれも随時更新されることが可能である。
【0055】
いくつかの例では、外部リソース108の動作が変化した場合には、外部リソース108と通信するための実行可能コード(例えば、実行可能コンポーネント124の一部を構成する実行可能コード)は変更される必要はなく、特性のみが更新される。例えば、外部リソース108は、それが出力データを他のシステムへ提供する仕方を変更してもよい。特性136は、コンピュータプログラム生成エンジン120が、構成されたコンピュータプログラム132の部分134を、構成された部分134が、データを、外部リソース108から受信されることになるフォーマットで受け付けるように構成されることになるように構成することを可能にする。さらに、構成されたコンピュータプログラム132は、外部リソースへ送信されるべき命令110を生成することができ、外部リソース108によって解釈されると、外部リソース108に、命令110に応答してデータ106を返信させることになる。命令110は、構成された部分134によって、特性136によって指定された命令のフォーマットに基づいてフォーマットされることが可能である。いくつかの実装形態では、命令のフォーマットは、カタログ122内に記憶されたデータから導出される。
【0056】
いくつかの実装形態では、カタログ122は、データ処理システム100が通信する能力を有する外部リソース108のデータ106のレコードフォーマットについての情報を含む。例えば、コンピュータプログラム132は、カタログ122内に記憶されたレコードフォーマット128を用いて、対応する外部リソース108から受信されたデータ106を解釈することができる。いくつかの例では、カタログ122内に記憶されたレコードフォーマット128は、外部リソース108から受信されたデータ106の構造を指定する。レコードフォーマットは、データがレコードに編成され、それにより、各レコードが複数のフィールドを有する、データの構造を指定してもよい。コンピュータプログラム132はレコードフォーマット128を用いて、外部リソース108から受信されたデータ106内のレコードおよびフィールドを識別することができる。いくつかの例では、コンピュータプログラム132はレコードフォーマット128を用いてデータ106を解釈し、例えば、データのレコードおよびフィールドを異なるフォーマット(例えば、コンピュータプログラム132の出力において用いられるべきフォーマット)に変形することができる。
【0057】
いくつかの実装形態では、コンピュータプログラム132はカタログ122のレコードフォーマット128を用いて、データを、SQLクエリの結果に期待される形式に対応する形式で出力することができる。いくつかの例では、リレーショナルデータベース管理システムは、例えば、SQLクエリに応答して、データをレコードおよびフィールドの形式で返す。それゆえ、コンピュータプログラム132が外部リソース108からのデータ106内のレコードおよびフィールドも識別することができる場合には、コンピュータプログラム132はSQLクエリに応答して出力をレコードおよびフィールドの形式で提供することができる。これは、たとえ、外部リソース108から受信されたデータ106が、リレーショナルデータベースから通例受信されるデータの形式、例えば、データベーステーブル、を採らない場合でも、実施されることが可能である。
【0058】
いくつかの実装形態では、コンピュータプログラム132はパラメータを用いて構成することができる。例えば、パラメータは、プログラムの挙動を変更するために変更されることが可能である値であってもよい。具体例として、パラメータは「filename」であってもよく、パラメータの値はファイルシステム内のファイルのロケーションとすることができる。パラメータの値は、プログラムを、異なるファイルにアクセスするように構成するために、異なるファイルのロケーションに変更されることが可能である。同じプログラムの2つのインスタンス(例えば、同じ実行可能プログラムコードのインスタンス)が、同じプログラムの2つのインスタンスの挙動を変更することになる、異なるパラメータ値を用いて構成されることが可能である。
【0059】
図2Cを参照すると、コンピュータプログラム生成エンジン120は特性を用いて、構成されたコンピュータプログラム132の部分134を構成するために用いられるパラメータ値138を生成することができる。いくつかの例では、コンピュータプログラム132は、特性136の各々に対応するパラメータを有してもよい。例えば、コンピュータプログラム132は、コンピュータプログラム132がデータ106をいかなるフォーマットで受信することになるのかを決定するために用いられる「record_format」と呼ばれるパラメータを有してもよい。コンピュータプログラム生成エンジン120は、外部リソース108のための特性136の一部として受信されたレコードフォーマットに基づいて「record_format」パラメータのためのパラメータ値138を生成することができる。別の例として、コンピュータプログラム132は、外部リソース108に接続する際にユーザ名を供給するために用いられる「username」と呼ばれるパラメータを有してもよい。コンピュータプログラム生成エンジン120は、外部リソース108のための特性136の一部として受信されたユーザ名データに基づいて「username」パラメータのためのパラメータ値138を生成することができる。
【0060】
いくつかの実装形態では、パラメータ値138は、コンピュータプログラム132によって可読のフォーマットによるパラメータファイルの形式でコンピュータプログラム132へ提供される。例えば、パラメータファイルはデータ操作言語(DML)でフォーマットされてもよい。
【0061】
いくつかの実装形態では、コンピュータプログラム132は、外部リソース108に関連付けられた実行可能コードに基づいて生成される。例えば、カタログ122は、実行可能コードが(例えば、特性136などの構成データを用いて)構成されると、その後、実行可能コードを用いて外部リソース108と通信することができる、実行可能コードのロケーションを指定してもよい。このように、実行可能コードが、例えば、実行可能コードを変更することを許可されたシステムアドミニストレータまたはその他のエンティティによって、更新された場合には、カタログ122は、更新された実行可能コードのロケーションを記憶する。コンピュータプログラム生成エンジン120がコンピュータプログラム132を生成すると、コンピュータプログラム生成エンジン120はカタログにアクセスし、実行可能コードの最新バージョンのロケーションを決定することができる。
【0062】
コンピュータプログラム132が生成されると、実行エンジン140がコンピュータプログラム132を受信する。次に、実行エンジン140はコンピュータプログラム132を実行し、例えば、コンピュータプログラム132に関連付けられたプログラムコードによって指定された命令を実施する。実行されると、コンピュータプログラム132(例えば、コンピュータプログラムの構成された部分134)は命令110を生成し、命令110を外部リソース108へ伝送する。いくつかの実装形態では、外部リソース108は、命令を外部リソース108へ送信し、データを外部リソース108から受信するために用いられるAPI142(アプリケーションプログラミングインターフェース)を公開する。概して、API142は、コンピュータプログラム132が外部リソース108と対話することを可能にする任意のファシリティとすることができる。例えば、API142は、外部リソース108が受信して実施するように構成されている命令の種類を指定してもよい。APIによって通例指定される命令の一例は関数コールである。関数は実行可能プログラムコードの一部分である。関数コールを用いる際に、コンピュータプログラム132は、命令110の一部として、関数の名前、および関数に渡されるべき(例えば、関数の実行可能プログラムコードによって用いられる)引き数を伝送する。命令110は、多くの関数コール、またはその他の種類の命令、あるいはその両方を含んでもよい。
【0063】
いくつかの実装形態では、コンピュータプログラム132がデータフローグラフである場合には、実行エンジン140は、時として、グラフオペレーティングシステムと呼ばれる、専用オペレーティングシステムを含む。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎をなす操作を実行する能力を有するコンピュータプログラムである。例えば、データフローグラフのコンポーネントが、データ処理システムによって実施されるべき操作を表す場合には、グラフオペレーティングシステムは、データ処理システムに、操作を実施するように命令するタスクを課される。
【0064】
命令110を外部リソース108へ送信した後に、コンピュータプログラム132は命令110に応答してデータ106を外部リソースから受信する。次に、実行エンジン140は、受信されたデータ106をクエリ102の結果104にフォーマットする。このように、データ処理システム100はクエリ102を実行し、クエリによって指定された結果104を生成することができる。
【0065】
いくつかの実装形態では、外部リソース108は、データ106を、データを属性-値の対の形式で指定するJSON(JavaScriptオブジェクト表記法)、またはデータを、データのためのカテゴリを示すタグによって区切って指定するXML(拡張可能マーク付け言語)などのフォーマットで提供する。いくつかの実装形態では、データ106のためのレコードフォーマット128は、外部リソース108に関連付けられた他のデータとともにカタログ122内に記憶されており、JSONまたはXMLデータを解釈するために用いることができる。
【0066】
コンピュータプログラム132が実行エンジン140によって実行されると、コンピュータプログラム132(例えば、結果104)は、クエリ102を実行するが、構成されたコンピュータプログラム132を実行しない(実行エンジン140以外の)システムの出力と等価である。このように、コンピュータプログラム132は、クエリ102に対応するコンピュータプログラムの一例である。いくつかの実装形態では、コンピュータプログラム132は結果104をデータベーステーブル144の形式でフォーマットする。このように、データ処理システム100は、クエリ102、例えば、SQLクエリなどのデータベースクエリ)を実行し、RDBMSなどのシステムがクエリ102を実行し、クエリによって指定された結果を提供すれば提供されるであろう同じ種類の出力を提供することができる。
【0067】
さらに、SQLクエリが、データベーステーブル内に記憶されたデータを取得するために通例用いられるが、ここで示されるクエリ102は、いくつかの可能な形式のうちの任意のもので記憶されたデータを取得するために用いることができる。外部リソース108から受信されたデータ106は、データベーステーブル(例えば、リレーショナルデータベーステーブル)以外の形式、例えば、単層ファイル、によるものであってもよい。単層ファイルは、データ要素間の構造的関係を含まないデータファイルである。単層ファイルのデータは、レコードおよびフィールドの形式で表される能力を有してもよい。いくつかの例では、外部リソース108から受信されたデータ106は、外部リソース108にネイティブのフォーマットによるものであってもよい。これによって、データ106は、外部リソース108によって、データを記憶および処理するために用いられるフォーマットによるものであってもよいことを意味する。
【0068】
図3は、クエリを実行するためのユーザインターフェース300を示す。このユーザインターフェース300は、
図1および
図2に示されるデータ処理システム100に関連付けられている。このユーザインターフェース300は、ユーザ(図示されていない)がSQLクエリ302をユーザインターフェース300のテキストボックス304内に入力することを可能にする。SQLクエリ302は、‘SELECT’コマンド306、およびデータソースのための識別子である引き数308を含む。ここでは、引き数308は「web.wikipedia」である。引き数「web.wikipedia」は外部リソース(例えば、
図1に示される外部リソース108)に関連付けられている。
【0069】
いくつかの例では、データ処理システム100は、識別子のリスト、および各識別子に関連付けられた外部リソースのリストを記憶してもよい。多数の技法を、識別子を外部リソースに関連付けるために用いることができるであろう。いくつかの例では、
図2B~
図2Cを参照すると、カタログ122が、外部リソースに各々対応する、識別子のリストを記憶していてもよい。例えば、各識別子は、データ処理システム100に提出されたクエリ102内に含まれる参照112に対応してもよい。例えば、参照112は、
図3においてクエリ300内に示される引き数308「web.wikipedia」であってもよい。このように、参照112をクエリ102から抽出し、カタログ122内の対応する外部リソースを検索するために用いることができる。さらに、カタログは各識別子を特性136のそれぞれのセットに関連付けていてもよい。カタログ122は各識別子をコンポーネントライブラリ126内の1つまたは複数のコンポーネントへの参照に関連付けていてもよい。このように、外部リソースへの参照を用いて、カタログ122内において、特性の対応するセット、および対応するコンポーネント(例えば、
図2B~
図2Cに示されるとおりのコンポーネント124)への参照を識別することができる。別の例として、コンポーネントライブラリ126が識別子を記憶していてもよく、例えば、各コンポーネント124のための識別子を記憶していてもよく、それにより、識別子(外部リソースの名前など)を用いて、1つまたは複数の対応するコンポーネント(例えば、
図2B~
図2Cに示されるとおりのコンポーネント124)を識別することができる。
【0070】
図3に示されるように、「web.wikipedia」は、ハイパーテキスト転送プロトコル(HTTP)を介してインターネット上で利用可能なウィキペディアと呼ばれるウェブサイトを参照する識別子である。ユーザがクエリ実行ボタン310をクリックすると、ユーザインターフェース300はデータ処理システム100(
図1)にSQLクエリ302を実行させる。
【0071】
SQLクエリ302が実行されると、実行の結果312がユーザインターフェース300内に示される。本例では、結果312はデータベーステーブルの形式で表示される。結果312は、データの要素を含む行314および列316を含む。引き数308に関連付けられた外部リソースはリレーショナルデータベースでないが、データ処理システム100は、クエリ302が、外部リソース(ここでは、ウィキペディア)をデータソースとして用いて実行されることを可能にし、結果312が、データベーステーブルとしてフォーマットされることを可能にする。例えば、結果312は、ウィキペディアによって返されたデータ内のレコードおよびフィールドを識別することによって、データベーステーブルとしてフォーマットすることができる。識別は、ウィキペディアに関連付けられたレコードフォーマット128(
図2B~
図2C)を用いることによって実施することができる。ここで、クエリ302は、結果312によって満足されなければならない基準を示す‘where’コマンド318含んでいた。コマンド318は、結果がテキスト内に用語「SQL」を含まなければならないことを示す「subject = ‘SQL’」の引き数320(この種の引き数は時として、述語と呼ばれる)を有する。それゆえ、結果312は全て用語「SQL」を含む。
【0072】
図4Aは、クエリ302の実行に応答して生成されたデータフローグラフ400を示す。データフローグラフ400は、
図2A~
図2Cに示される、構成されたコンピュータプログラム132の一例である。いくつかの実装形態では、データフローグラフ400は、他のコンポーネントを含む別のデータフローグラフの部分グラフであってもよい。クエリ302が実行されると、データ処理システム(
図1および
図2)はデータフローグラフ400を生成し、構成する。さらに、実行エンジン140(
図2A~
図2C)はデータフローグラフ400を実行し、
図3に示される結果312を生成する。データフローグラフ400は、外部リソース108(
図1)を表すコンポーネント402、および外部リソース108への入力を表すコンポーネント404を含む。ここでは、コンポーネント402はウィキペディアを表す。例えば、コンポーネント402、404はともに、
図2B~
図2Cに示される、構成された部分134の一例であってもよい。データフローグラフ400が(例えば、グラフオペレーティングシステムによって)実行されると、コンポーネント402は命令(例えば、
図1および
図2に示される命令110)を外部リソース108へ伝送する。命令は、入力コンポーネント404から受信された入力データに基づく。例えば、ウィキペディアは、ハイパーテキスト転送プロトコル(HTTP)を介して提出された平文クエリを実行する探索クエリ関数を公開してもよい。本例では、コンポーネント402は、平文探索クエリをウィキペディアへ伝送するように構成されている。例えば、SQLクエリ302は「subject = ‘SQL’」の引き数320を含んでいた。ここでは、入力コンポーネント404は、用語「SQL」を、ウィキペディアと通信するコンポーネント402へ提供するように構成されることが可能である。その結果、コンポーネント402は、(例えば、入力コンポーネント404から受信された)用語「SQL」を平文探索クエリの一部として伝送するように構成される。平文探索クエリに応答して、コンポーネント402はHTTPを介して、ハイパーテキストマーク付け言語(HTML)に従ってフォーマットされていてもよい、結果を受信する。コンポーネント402はまた、受信されたHTMLデータを構文解析し、構文解析されたデータをデータベーステーブル、例えば、
図3に示される結果312などの形式にフォーマットするように構成される。
【0073】
ウィキペディアと通信するために、コンポーネント402、404は、ウィキペディアに固有の特性(例えば、
図2B~
図2Cに示される特性136)を用いて構成される。例えば、特性136は、ウィキペディアが探索結果を提供するフォーマット、例えば、探索結果において用いられる特定のHTMLフォーマッティングを記述する情報を含んでもよい。このように、ウィキペディアがその出力のフォーマットを変更した場合には、(例えば、
図2B~
図2Cに示されるカタログ122内に記憶された)特性136は、更新されたフォーマットを反映するように更新されることが可能である(例えば、カタログ122のアドミニストレータユーザによって更新される)。ウィキペディアと通信するコンポーネント402が構成されると、特性136の最も直近のバージョンにアクセスし、利用することができる。
【0074】
コンポーネント402、404は、特性に基づくパラメータ値を用いて構成される。一例として、コンポーネント404は、「input_text」と呼ばれるパラメータを有してもよく、そのため、コンポーネント404は、テキスト文字列「SQL」を「input_text」パラメータのための値として用いるように構成されることが可能である。このように、SQLクエリ内で定義された引き数320によって定義された基準が、ウィキペディアに照会する際に用いられる。
【0075】
いくつかの実装形態では、ウィキペディアなどの外部リソースと通信するコンポーネント402は複数の実行可能コンポーネントで構成される。いくつかの例では、コンポーネント402は、1つまたは複数のネットワークリソースとのネットワーク接続を確立するための実行可能命令を含む1つまたは複数のコンポーネントを含んでもよい。例えば、ネットワークリソースは、ウィキペディアから発出したデータを提供することができるサーバであってもよい。
【0076】
いくつかの例では、コンポーネント402は、外部リソースから受信されたデータを構文解析するための実行可能命令を含む1つまたは複数のコンポーネントを含んでもよい。例えば、ウィキペディアから受信されたデータは、SQLクエリ302に応答するデータ、ならびにマーク付けデータ(例えば、XMLタグなどのタグ)、受信されたデータのサイズもしくは文字セットを記述するデータなどのメタデータ、またはクエリに応答しないその他のデータなどの、他の種類のデータの両方を含んでもよい。外部リソースから受信されたデータを構文解析するための実行可能命令を含むコンポーネントは、外部リソースから受信されたデータを処理し、クエリに応答するデータを、クエリに応答しないデータから分離することができる。クエリに応答しないデータは破棄されるか、または別の目的のために用いられてもよい。例えば、受信されたデータのサイズを記述するデータは、予想された量のデータが外部リソースから受信されたことを決定するために用いることができる。
【0077】
いくつかの例では、コンポーネント402は、外部リソースから受信されたデータをフォーマットするための実行可能命令を含む1つまたは複数のコンポーネントを含んでもよい。例えば、コンポーネント402は、特定の仕方でフォーマットされた出力データを(例えば、データフローグラフ400の他の部分へ)提供してもよい。出力データは、例えば、複数のテキスト行、またはアレイの複数の要素、あるいは別の種類のフォーマットとしてフォーマットされることが可能であろう。いくつかの実装形態では、外部リソースから受信されたデータをフォーマットするための実行可能命令を含むコンポーネントは、構文解析されたデータ(例えば、外部リソースから受信されたデータを構文解析するための実行可能命令を含むコンポーネントによって構文解析されたデータ)を受信し、構文解析されたデータを、データフローグラフ400の出力データのために指定されたフォーマットでフォーマットすることができる。例えば、データフローグラフ400の出力データのために指定されたフォーマットはデータベーステーブルのフォーマットであってもよい。
【0078】
複数のコンポーネントで構成された1つの種類のコンポーネントは部分グラフと呼ばれる。
図4Bは、ウィキペディアと通信するコンポーネント402を構成するコンポーネント412a~gを含む部分グラフ410の一例を示す。コンポーネント412a~gは、ウィキペディアと通信するために必要な計算操作の一部分を実施する実行可能機能性を各々含む。例えば、1つのコンポーネント412aは、ネットワーク上のサーバ、例えば、ハイパーテキスト転送プロトコル(HTTP)を用いるサーバと通信するための実行可能コードを含む「ウェブサービス呼び出し」コンポーネントである。「ウェブサービス呼び出し」コンポーネント412aは要求をサーバへ伝送し、要求に応答してデータを受信する。いくつかの実装形態では、「ウェブサービス呼び出し」コンポーネント412aはシンプルオブジェクトアクセスプロトコル(SOAP)要求を外部リソースへ伝送する。いくつかの実装形態では、「ウェブサービス呼び出し」コンポーネント412aは外部リソースのアプリケーションプログラミングインターフェース(API)にアクセスする。
【0079】
「ウェブサービス呼び出し」コンポーネント412aは、要求内に含めて伝送されるべきデータを指定する入力を受信する。
【0080】
複製コンポーネント412bおよび再フォーマットコンポーネント412cは、「ウェブサービス呼び出し」コンポーネント412aによって伝送されるべきデータを準備する。例えば、複製コンポーネント412bはデータを、
図4Aに示される入力コンポーネント404から受信してもよい。いくつかの実装形態では、再フォーマットコンポーネント412cは、次に、外部リソースへ伝送するのに不適当であるデータを削除することができる。例えば、データの一部は、外部リソースへ伝送するのに不適当である場合があり、例えば、データの一部は、外部リソースの探索機能性へ伝送されることが可能である探索語であり得るであろう。いくつかの例では、データの一部は、外部リソースへ伝送するのに適当でないデータであり得るであろう。例えば、外部リソースは、元のクエリ(例えば、
図1に示されるクエリ102)に応答するようにデータを処理するための機能性を欠く場合がある。一例として、データの一部は正規表現であってもよく、外部リソースは、外部リソースの探索機能性によって受信された正規表現を評価するための機能性を欠く場合がある。
【0081】
第2の再フォーマットコンポーネント412dが、外部リソースから受信されたデータのフォーマットを変更し、例えば、「ウェブサービス呼び出し」コンポーネント412aによって出力として提供されたデータを構文解析してフォーマットする。例えば、「ウェブサービス呼び出し」コンポーネント412aから受信されたデータはXMLデータなどのタグ付きデータであってもよい。再フォーマットコンポーネント412dは、タグによって区切られたデータを抽出し、抽出されたデータを、XMLタグを用いないフォーマットで出力することができる。再フォーマットコンポーネント412dはまた、出力データ内に必要ないデータを削除してもよい。例えば、破棄されるデータは、XMLタグ、またはXMLタグによって区切られているが、クエリに応答しないデータであってもよい。いくつかの実装形態では、再フォーマットコンポーネント412dは、データを再フォーマットする前に、レコードフォーマット128(
図2B~
図2C)を用いて、「ウェブサービス呼び出し」コンポーネント412aから受信されたデータの構造を解釈し、例えば、「ウェブサービス呼び出し」コンポーネント412aから受信されたデータ内のレコードおよびフィールドを識別する。
【0082】
複製コンポーネント412bはまた、データを第3の再フォーマットコンポーネント412eへ提供することができる。いくつかの実装形態では、この再フォーマットコンポーネント412eは、第1の再フォーマットコンポーネント412cによる削除であった外部リソースへ伝送するのに不適当であるデータを識別する。ここで、外部リソースへ伝送するのに不適当であるデータは、再フォーマットコンポーネント412eによって、2つのコンポーネントから受信されたデータを組み合わせる結合コンポーネント412fへ提供されることが可能である。
【0083】
第2の再フォーマットコンポーネント412dもまた、その出力を結合コンポーネント412fへ提供する。それゆえ、結合コンポーネント412fは、第2の再フォーマットコンポーネント412dおよび第3の再フォーマットコンポーネント412eからの入力を表す出力を提供する。
【0084】
フィルタコンポーネント412gが結合コンポーネント412fの出力を受信する。フィルタコンポーネント412gは、クエリ(例えば、
図1に示されるクエリ102)に応答しないデータを削除する。一例として、「ウェブサービス呼び出し」コンポーネント412aがクエリの1つまたは複数の要素(例えば、部分)を提供されなかったがゆえに、「ウェブサービス呼び出し」コンポーネント412aは、元のクエリに応答しないデータを出力する場合がある。クエリの1つまたは複数の要素は、「ウェブサービス呼び出し」コンポーネント412aによって表された外部リソースへ提供するのに適当でない場合がある、正規表現であってもよい。ここで、フィルタコンポーネント412gは、正規表現(例えば、第3の再フォーマットコンポーネント412eによって結合コンポーネント412fへ出力され、第1の再フォーマットコンポーネント412cによって、「ウェブサービス呼び出し」コンポーネント412aへ提供された出力から削除されたとおりのもの)を受信することができるであろう。フィルタコンポーネント412gは、正規表現に基づいて「ウェブサービス呼び出し」コンポーネント412aから最初に受信されたデータをフィルタリングすることができる。ここでは正規表現の例が用いられているが、フィルタコンポーネント412gは、クエリの他の種類の要素、または他の種類の基準、例えば、クエリ内で指定されていない基準に基づいてデータをフィルタリングすることができるであろう。
【0085】
図4Bに示される部分グラフ410のコンポーネントの各々は、部分グラフ410が実行されると実施されるそれ自身の実行可能コードを有する。例えば、
図4Cは、
図4Bに示されるウェブサービス呼び出しコンポーネント412を構成する実行可能コード440の一例を示す。実行可能コード440は、外部リソースへの要求をフォーマットするためのコード442、外部リソースからの出力を構文解析するためのコード444、要求を外部リソースへ伝送するためのコード446、および外部リソースからの出力を他のコンポーネントへ提供するためのコード448を含む。
【0086】
図2B~
図2Cに関して上述されたように、カタログ122は、データ処理システム100が通信する能力を有する外部リソース108に対応するデータを含む。カタログ108内に記憶されたデータ、例えば、特性136は、コンピュータプログラム132を構成するために用いられる。
【0087】
図5Aに示されるように、いくつかの実装形態では、ユーザインターフェース500を、カタログ122内に記憶されたデータを見て編集するために用いることができる。ユーザインターフェース500は、ユーザ(例えば、カタログ122のアドミニストレータ)がカタログ内のエントリ502のためのデータを見て編集することを可能にする。カタログのエントリ502は、特定の外部リソース、例えば、ウィキペディアに関連するデータを記憶する。ここではユーザインターフェース500およびエントリ502の一例が示されているが、他の様式のカタログは他の様式のエントリを有してもよく、他の様式のエントリは異なる種類のデータを含んでもよい。
【0088】
このエントリ502はエントリについての一般情報504aなどのデータを含む。エントリ502はまた、後述されるように、外部リソースから受信されたデータのフォーマットを指定する、エントリ502に関連付けられた外部リソースのレコードフォーマット504bを含むことができる。エントリ502はまた、後述されるように、このエントリ502に関連付けられた外部リソースに照会するために用いることができるデータのための名前を指定するエントリのためのインデックス504cを含むことができる。例えば、エントリ502はまた、エントリのためのキー504dを含むことができる。キーは、データをレコードの形式で記憶する、リレーショナルデータベースなどの、データソースのために用いられる。その属性のためのレコードの記憶された値が一意的であるキー属性。エントリ502はまた、エントリのためのパラメータ504eを含むことができる。いくつかの実装形態では、
図2Cを参照すると、パラメータ、例えば、パラメータ138が、コンピュータプログラム132を構成するために用いられる。いくつかの実装形態では、パラメータ504eは、このエントリ502に関連付けられた外部リソースの特徴を記述するデータを含む、
図2B~
図2Cに示される特性136のためのデータ値を含む。例えば、パラメータ504eは、外部リソース108への許可されたアクセスを得るために用いられる認証情報(例えば、ユーザ名およびパスワード)などの構成データを含んでもよい。エントリはまた、いかなるエンティティ(例えば、カタログ122のアドミニストレータなどのユーザインターフェース500のいかなるユーザ)がエントリ502にアクセスし、および/またはそれを変更することができるのかを示す、エントリ502のための権限504fを含むことができる。エントリはまた、このエントリ502に関連付けられた外部リソース108についての統計データ、例えば、外部リソース108において利用可能なデータ量などの統計データを指定する、エントリ502のための統計504gを含むことができる。
【0089】
図5Aに示されるように、エントリの一般情報504aは、記憶された実行可能コードのパスへの参照506を含む。いくつかの実装形態では、
図1を参照すると、記憶された実行可能コードは、外部リソース108と通信するコンピュータプログラム132の部分134である。参照506は、生成エンジン120によって、記憶された実行可能コードにアクセスし、記憶された実行可能コードを用いてコンピュータプログラム132を生成するために用いられることが可能である。
【0090】
図5Bに示されるように、エントリ502はまた、エントリ502に関連付けられた外部リソースのレコードフォーマット504bを含むことができる。レコードフォーマット504bは、
図2B~
図2Cに示されるレコードフォーマット128の一例であってもよい。レコードフォーマット504bは、外部リソースから受信されるデータのフォーマットを指定する。検討のために、レコードフォーマット504bは埋め込みレコードフォーマット508およびフィールド510を含むことができる。フィールド510は、外部リソースへ伝送され、そこから受信されるデータのための名前を指定する。例えば、ここでは、フィールド510は、ウィキペディアへ伝送されるデータのための名前である「サブジェクト」(例えば、百科事典へのクエリ内で用いられるサブジェクト)、およびウィキペディアから受信されるデータのための名前である「行」(例えば、サブジェクトに対応する百科事典エントリの行)である。埋め込みレコードフォーマット508は、外部リソースへ提供され、そこから受信されるデータについてのフォーマット情報を指定する。例えば、この埋め込みレコードフォーマット508は、「サブジェクト」および「行」フィールドは、特定の種類のユニコード文字符号化である、UTF-8を用いてフォーマットされることを示す。
【0091】
図5Cに示されるように、エントリ502はまた、このエントリ502に関連付けられた外部リソースに照会するために用いることができるデータのための名前を指定するエントリのためのインデックス504cを含むことができる。例えば、このエントリ502は、「サブジェクト」と呼ばれるインデックス514を有する。それゆえ、外部リソースは、「サブジェクト」のためのデータ値を受信し、データ値に応答してデータを返すように構成されている。例えば、ウィキペディアは、各エントリに関連付けられた「サブジェクト」フィールド内にデータ値が現れた百科事典エントリを返すように構成されていてもよい。
【0092】
図6Aは、クエリを実行するための手続き600を表すフローチャートを示す。手続き600は、例えば、
図1に示されるデータ処理システム100のコンポーネントによって実施されることが可能である。
【0093】
手続きはSQLクエリを受信する602。例えば、SQLクエリは、
図1に示されるクエリ102の一例とすることができる。SQLクエリは、データ処理システムの外部にあるリソースに関連付けられた識別子を含む。さらに、このリソースはリレーショナルデータベース管理システムでない。リソースは、
図1に示される外部リソース108とすることができる。識別子の一例は、
図3に示される引き数308である。
【0094】
手続きはSQLクエリに基づいてコンピュータプログラムを生成する604。コンピュータプログラムは、
図2A~
図2Cに示されるコンピュータプログラム132とすることができる。いくつかの例では、コンピュータプログラムは、SQLクエリの操作を表すコンポーネントを含む。いくつかの例では、コンピュータプログラムはデータフローグラフであり、外部リソースと通信するコンピュータプログラムの部分はデータフローグラフのコンポーネントまたは部分グラフである。データフローグラフ400の一例が
図4Aに示されている。いくつかの実装形態では、
図6Bに示される手続き610を、例えば、コンピュータプログラムの生成の間にコンピュータプログラムの1つまたは複数の部分を構成するために、コンピュータプログラムの生成の間に実施することができる。いくつかの実装形態では、
図6Dに示される手続き630を、コンピュータプログラムをインスタンス化するために用いることができるデータ構造、例えば、データフローグラフを生成するために実施することができる。
【0095】
手続きは、例えば、コンピュータプログラムを構成するために用いられるパラメータ値に基づいて、コンピュータプログラムを実行する606。例えば、コンピュータプログラムは、
図2A~
図2Cに示される実行エンジン140によって実行されてもよい。いくつかの実装形態では、コンピュータプログラムの実行は、
図5Cに示される手続き620に対応する。
【0096】
図6Bは、コンピュータプログラムを生成する際にコンピュータプログラムの一部分を構成するために用いられる手続き610を表すフローチャートを示す。いくつかの実装形態では、手続き610は、
図6Aに示されるとおりのコンピュータプログラムを生成する604ためのステップを表す。手続き610は、例えば、コンピュータプログラム生成エンジン120などの、
図1に示されるデータ処理システム100のコンポーネントによって実施されることが可能である。いくつかの実装形態では、コンピュータプログラムは、複数の部分を組み立てることによって生成される。各部分は、コンピュータプログラムが組み立てられている間に構成されてもよい。この手続き610は、組み立てられているコンピュータプログラムの一部分を構成するために用いることができる。
【0097】
手続きは、外部リソースに関連付けられた構成データを識別する614。例えば、外部リソースは、
図1および
図2に示される外部リソース108とすることができる。構成データは、コンピュータプログラムによって、外部リソースにアクセスし、データを外部リソースから受信するために用いられる情報を指定する。いくつかの実装形態では、構成データは、リソースから受信されるべきデータのフォーマット、例えば、
図2B~
図2Cに示されるレコードフォーマット128を指定する。いくつかの実装形態では、構成データは、ネットワーク上のリソースにアクセスするために用いられるデータを指定する。例えば、構成データは、外部リソースのデータへの許可されたアクセスを入手するために用いられる、ユーザ名およびパスワードなどの、認証情報を含むことができ、ならびに/あるいは構成データは、ホスト名またはユニフォームリソースロケータ(URL)などのネットワークアドレスを含むことができ、ならびに/あるいは構成データは他の種類のデータを含むことができる。例えば、いくつかの例では、構成データは、
図2B~
図2Cに示される特性136の一例とすることができる。構成データは、リソースによって用いられるデータフォーマットに対する変更に基づいて更新されることができるカタログ内で指定される。
【0098】
手続きは構成データに基づいてパラメータ値を生成する616。例えば、パラメータ値は、
図2Cに示されるパラメータ値138であってもよい。いくつかの実装形態では、パラメータジェネレータがデータを受信し、パラメータファイルを、コンピュータプログラムによって可読なフォーマットで生成する。次に、パラメータファイルはコンピュータプログラムへ提供される。例えば、パラメータジェネレータは、
図1に示されるコンピュータプログラム生成エンジン120の一部分とすることができる。パラメータジェネレータによって受信されるデータは、
図2B~
図2Cに示される特性136のデータとすることができる。例えば、パラメータジェネレータは特性136を構文解析してパラメータ値138を決定してもよい。
【0099】
手続きはパラメータ値をコンピュータプログラムの一部分へ提供する516。部分は、リソースと通信する能力を有する。例えば、コンピュータプログラムの部分は、
図2B~
図2Cに示される構成された部分134であってもよい。コンピュータプログラムの部分は、リソースがアクセスされる仕方を定義する実行可能命令を含む。さらに、実行可能命令は、コンピュータプログラムの部分へ提供されたパラメータに基づいて動作する。
【0100】
手続き610は、生成されているコンピュータプログラムの任意の部分のために実施することができる。コンピュータプログラムの全ての部分が構成されると、コンピュータプログラムは実行準備が完了する。
【0101】
図6Cは、クエリに対応するコンピュータプログラムを実行するための手続き620を表すフローチャートを示す。いくつかの実装形態では、手続きは、
図6Aに示されるとおりのコンピュータプログラムを実行する606ためのステップを表す。手続き620は、例えば、コンピュータプログラム実行エンジン140などの、
図1に示されるデータ処理システム100のコンポーネントによって実施されることが可能である。コンピュータプログラムは、
図2A~
図2Cに示されるコンピュータプログラム132とすることができる。例えば、手続き620は、コンピュータプログラム実行エンジン140がコンピュータプログラム132を受信し、コンピュータプログラム132の実行可能コードに対応する操作を実施すると、開始されることが可能である。
【0102】
コンピュータプログラムの実行は1つまたは複数の命令を外部リソースへ伝送させる622。例えば、外部リソースは、
図1および
図2に示される外部リソース108とすることができる。命令は、コンピュータプログラムに対応するSQLクエリの操作以外の操作を定義する。例えば、命令は、
図1に示される命令110であってもよい。いくつかの例では、命令は、SQLクエリに応答して結果を返さない外部リソースのファシリティへ伝送される。例えば、命令は、SQLクエリを入力として受信し、SQLクエリを評価し、SQLクエリによって指定されたデータに応答する外部リソースのファシリティへ伝送されない。このように、いくつかの例では、命令はSQLコマンドまたは引き数などのSQL命令を含まない。いくつかの実装形態では、リソースは、リソースによって公開されたアプリケーションプログラミングインターフェース(API)を用いてアクセスされる。API142の一例が
図2Cに示されている。
【0103】
コンピュータプログラムの実行は命令に応答してデータをリソースから受信させる624。例えば、データは、
図1に示される結果104とすることができる。結果は、データベーステーブル、例えば、
図1に示されるデータベーステーブル144の形式でフォーマットされてもよい。命令に応答してリソースから受信されたデータは、SQLクエリによって指定されたデータを含む。このように、受信されたデータは、仮にリソースがSQLクエリを提供され、それに応答して、外部リソースが、SQLクエリによって指定されたデータを返すとした場合に、外部リソースから受信されたであろうデータと同じになる。
【0104】
図6Dは、クエリに対応するデータフローグラフをインスタンス化するコンピュータ内のデータ構造を生成するための手続き630を表すフローチャートを示す。例えば、データフローグラフは、
図2A~
図2Cに示されるコンピュータプログラム132とすることができる。クエリに対応するデータフローグラフ400の一例が
図4Aに示されている。
【0105】
クエリに基づくクエリプランナへの要求が生成される632。クエリプランナは、クエリを実行するために実施することができるステップを表すデータを生成するシステムである。クエリプランナはしばしば、データを、RDBMSによって実施されることが可能であるステップの形式で生成する。
【0106】
クエリプランナによって要求に基づいて生成されたクエリプランが受信される634。クエリプランは、リレーショナルデータベースを管理するシステム、例えば、RDBMSによって実施されるべき1つまたは複数のステップの記述を表すデータである。
【0107】
データソースが、例えば、クエリに基づいて、識別される636。データソースは、外部リソース、例えば、
図1および
図2に示される外部リソース108とすることができる。識別は、クエリ内で表されている参照、例えば、
図1に示される参照112に基づいて行うことができるであろう。いくつかの例では、データソースはクエリ内の引き数に基づいて識別される。
【0108】
リレーショナルデータベースを管理するシステム以外の実行システムが識別される638。実行システムは、データフローグラフを実行するシステムとすることができる。例えば、実行システムは、
図2A~
図2Cに示される実行エンジン140とすることができる。対照的に、リレーショナルデータベースを管理するシステムの一例はRDBMSである。
【0109】
データフローグラフをインスタンス化するデータ構造が生成される640。
図2A~
図2Cに関して上述されたように、データフローグラフは、入力データに対して実施されるべき操作を表すコンポーネント、およびデータの流れを表すコンポーネント(時として、ノードと呼ばれる)の間のリンクを含むコンピュータプログラムである。
【0110】
データ構造は、実行されるべき少なくとも1つの操作を表すノードを含む。ノードは、実行システムによって、操作を実施するための実行可能プログラムコードを呼び出すために使用可能な情報に関連付けられている。ノードはまた、実行システムによって、データをプログラムコードが利用できるようにするために使用可能な情報にも関連付けられている。データフローグラフの少なくとも1つのリンクは、ノードの操作の出力データがデータフローグラフの別のノードの操作への入力データとして提供されることを表す。
【0111】
操作は、クエリプランによって記述されたステップに基づいて選定される。いくつかの実装形態では、操作は、データソースにおいて利用可能なデータにアクセスすることを含む。例えば、
図4Aに示されるグラフ400のコンポーネント402は、データフローグラフを実行するシステムの外部のデータソースにおいて利用可能なデータにアクセスするノードの一例である。
【0112】
生成された640データフローグラフが実行されると、データフローグラフに基づくプログラムコードが、識別された実行システム上で実行されることが可能である。さらに、データがデータソースから受信されることが可能である。例えば、データは、
図6Cに示されるように受信されることが可能である624。
【0113】
手続き600、610、620、630のいくつかの実装形態では、APIが用いられる。APIが用いられるときには、手続き600は、SQLクエリを受信したことに応答してAPIの関数を実行させることを含む。APIの関数は外部リソースにおいて実行可能である。さらに、(例えば、
図5Cに示される手続き620において)リソースへ伝送された命令はAPIの関数を実行させる。このように、SQLクエリを、リレーショナルデータベース管理システムでなく、SQLクエリを解釈しないリソースに照会するために用いることができる。
【0114】
図1に示される生成エンジン120および/または実行エンジン140は、例えば、1つまたは複数の汎用コンピュータ上において、UNIXオペレーティングシステムのバージョンなどの、好適なオペレーティングシステムの制御の下でホストされてもよい。例えば、これは、複数の中央処理装置(CPU)またはプロセッサコア、局所的なもの(例えば、対称型マルチプロセッシング(SMP)コンピュータなどのマルチプロセッサシステム)、または局所的に分散したもの(例えば、クラスタとして結合された複数のプロセッサ、または超並列処理(MPP)システム、あるいは遠隔的なもの、または遠隔的に分散したもの(例えば、ローカルエリアネットワーク(LAN)および/またはワイドエリアネットワーク(WAN)を介して結合された複数のプロセッサ)のいずれか、あるいはそれらの任意の組み合わせを用いたコンピュータシステムの構成を含む、複数ノード並列コンピューティング環境を含むことができる。
【0115】
図3に示されるユーザインターフェース300は開発環境の一部であってもよい。開発環境は、いくつかの実装形態では、アプリケーションをデータフローグラフとして開発するためのシステムである。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントによって表された個々のプロセス内へ情報を入れ、そこから出すための方法、プロセス間で情報を移動させるための方法、およびプロセスのための実行順序を定義するための方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選定するアルゴリズムを含む(例えば、グラフのリンクに係る通信経路は、TCP/IPまたはUNIXドメインソケットを用いるか、あるいはプロセス間でデータを渡すための共有メモリを用いることができる)。
【0116】
上述された諸技法は、好適なソフトウェアを実行するコンピューティングシステムを用いて実装することができる。例えば、ソフトウェアは、少なくとも1つのプロセッサ、(揮発性および/または不揮発性メモリおよび/または記憶要素を含む)少なくとも1つのデータ記憶システム、(少なくとも1つの入力デバイスもしくはポートを用いて入力を受信するため、および少なくとも1つの出力デバイスもしくはポートを用いて出力を提供するための)少なくとも1つのユーザインターフェースを各々含む、(分散型、クライアント/サーバ型、またはグリッド型などの様々なアーキテクチャのものであってもよい)1つまたは複数のプログラムされた、またはプログラム可能なコンピューティングシステム上で実行する1つまたは複数のコンピュータプログラム内の手続きを含んでもよい。ソフトウェアは、例えば、データフローグラフの設計、構成、および実行に関連するサービスを提供する、より大きなプログラムの1つまたは複数のモジュールを含んでもよい。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリ内に記憶されたデータモデルに適合するデータ構造またはその他の編成データとして実装されることが可能である。
【0117】
ソフトウェアは、CD-ROM、または(例えば、汎用もしくは専用コンピューティングシステムもしくはデバイスによって可読の)その他のコンピュータ可読媒体などの、有形の非一時的な媒体上に提供されるか、あるいはネットワークの通信媒体を通じて、ソフトウェアが実行されるコンピューティングシステムの有形の非一時的な媒体へ(例えば、伝搬信号内に符号化されて)配信されてもよい。処理の一部または全ては、専用コンピュータ上で、あるいはコプロセッサまたはフィールドプログラマブルゲートアレイ(FPGA)または専用の特定用途向け集積回路(ASIC)などの、専用ハードウェアを用いて実施されてもよい。処理は、ソフトウェアによって指定された計算の異なる部分が異なるコンピューティング要素によって実施される分散式で実施されてもよい。このようなコンピュータプログラムは各々、好ましくは、記憶デバイス媒体がコンピュータによって、本明細書において説明されている処理を実施するために読み出されると、コンピュータを構成し、動作させるために、汎用または専用プログラム可能コンピュータによってアクセス可能な記憶デバイスのコンピュータ可読記憶媒体(例えば、ソリッドステートメモリもしくは媒体、または磁気的もしくは光学的媒体)上に記憶されるか、またはそれにダウンロードされる。本発明のシステムはまた、コンピュータプログラムを用いて構成された、有形の非一時的な媒体として実装されると考えられてもよく、このように構成された媒体は、コンピュータを、本明細書において説明されている処理ステップのうちの1つまたは複数を実施するための特定の既定の仕方で動作させる。
【0118】
本発明の多数の実施形態が説明された。しかし、上述の説明は、本発明の範囲を限定することではなく、本発明を例示することが意図されていることを理解されたい。本発明の範囲は添付の請求項の範囲によって定義される。
【0119】
したがって、他の実施形態もまた、添付の請求項の範囲内に含まれる。例えば、様々な変更が、本発明の範囲から逸脱することなくなされ得る。追加的に、上述されたステップのいくつかは順序に依存しなくてもよく、それゆえ、説明されているものと異なる順序で実施されることが可能である。