(57)【特許請求の範囲】
【請求項１】
少なくとも２つのデータソースのデータに対する動作のコンピュータで実施される方法であって、前記方法は、
関係型データベースに適用可能なクエリ言語に従って表現されたクエリに対応するクエリプランを受信することであって、前記クエリプランは、関係型データベース管理システムにより行われるための１つまたは複数のステップの記述を含むことと、
実行のための少なくとも１つのデータ処理オペレーションを含むオペレーションのセットを生成することであって、前記少なくとも１つのデータ処理オペレーションは少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションを含み、前記少なくとも１つのデータ処理オペレーションは前記クエリプランにより記述される特定のステップに基づき選択され、前記特定のステップは前記少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションに対応することと、
第１のデータソースおよび第２のデータソースからデータを受信することであって、前記第２のデータソースは前記第１のデータソースの少なくともいくつかのデータ処理機能とは異なる少なくともいくつかのデータ処理機能に関連付けられていることと、
関係型データベース管理システム以外の実行システム上で、前記オペレーションのセットに基づいてプログラムコードを実行することであって、前記プログラムコードを実行することは前記クエリの結果を作成することと、
を含む方法。
【請求項２】
前記クエリは、関係型データベースに適用可能なクエリ言語に従って表現される、請求項１に記載の方法。
【請求項３】
前記オペレーションのセットを生成することは、前記クエリプランに基づいて、データフローグラフをインスタンス化するデータ構造を生成することを含み、前記データフローグラフは、
少なくとも１つの実行すべきオペレーションを表す第１のノードであって、
前記第１のノードは、実行可能なプログラムコードを呼び出して前記オペレーションを行うために実行システムが使用することのできる情報と関連付けられ、
前記第１のノードは、データを前記プログラムコードに対して使用可能とするために実行システムが使用することのできる情報と関連付けられ、かつ
前記オペレーションは、前記クエリプランによって記述された第１のステップに基づいて選択される、第１のノードと、
前記データフローグラフの第２のノードのオペレーションに対する入力データとして提供される、前記第１のノードのオペレーションの出力データを表す少なくとも１つのリンクと
を含む、請求項１に記載の方法。
【請求項４】
前記データフローグラフは、前記第１のデータソースからの前記データを受信するために実行システムが使用することのできる情報と関連付けられた第３のノードと、前記第２のデータソースからの前記データを受信するために実行システムが使用することのできる情報と関連付けられた第４のノードと、を含む、請求項３に記載の方法。
【請求項５】
前記第３のノードは、実行可能なプログラムコードを呼び出すために実行システムが使用することのできる情報と関連付けられ、前記実行可能なプログラムコードは、前記クエリプランによって記述された第２のステップに基づいて選択される少なくとも１つのオペレーションを行うためのリクエストが前記第１のデータソースを管理するシステムに送信されるようにする、請求項４に記載の方法。
【請求項６】
前記第１のデータソースを管理する前記システムが、前記クエリプランによって記述された前記第２のステップに基づいて選択された前記少なくとも１つのオペレーションを行うことができると判断することを含む、請求項５に記載の方法。
【請求項７】
前記第２のデータソースを管理するシステムが、前記クエリプランによって記述された前記第２のステップに基づいて選択された前記少なくとも１つのオペレーションを行うことができないと判断することを含む、請求項５に記載の方法。
【請求項８】
前記データフローグラフのノードと、第２のデータフローグラフのノードとの間のリンクをインスタンス化することを含み、前記第２のデータフローグラフは、前記クエリプランによって記述されたいずれかのステップに基づいて選択されるオペレーション以外の実行すべきオペレーションを表す少なくとも１つのノードを含む、請求項３に記載の方法。
【請求項９】
前記第１のデータソースは、関係型データベース表を含む、請求項１に記載の方法。
【請求項１０】
前記第２のデータソースは、関係型データベース表以外のデータの一部を含む、請求項９に記載の方法。
【請求項１１】
前記第２のデータソースは、フラットファイルを含む、請求項９に記載の方法。
【請求項１２】
前記クエリは、ＳＱＬを含む、請求項１に記載の方法。
【請求項１３】
前記プログラムコードの出力として、前記クエリの結果を受信することを含む、請求項１に記載の方法。
【請求項１４】
前記第１のデータソースは、前記第１のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられ、前記第２のデータソースは、前記第２のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられない、請求項１に記載の方法。
【請求項１５】
データ処理能力は、少なくとも１つのデータ処理命令を行うように構成される実行可能な機能性を含む、請求項１に記載の方法。
【請求項１６】
前記組み合わさったオペレーションは、ジョイン演算を含む、請求項１に記載の方法。
【請求項１７】
前記データ集計オペレーションは、集約オペレーションを含む、請求項１に記載の方法。
【請求項１８】
少なくとも２つデータソースのデータに対して動作する１つ以上のコンピュータプロセッサを含むシステムであって、前記システムは、
関係型データベースに適用可能なクエリ言語に従って表現されたクエリに対応するクエリプランを受信することであって、前記クエリプランは、関係型データベース管理システムにより行われるための１つまたは複数のステップの記述を含むことと、
実行のための少なくとも１つのデータ処理オペレーションを含むオペレーションのセットを生成することであって、前記少なくとも１つのデータ処理オペレーションは少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションを含み、前記少なくとも１つのデータ処理オペレーションは前記クエリプランにより記述される特定のステップに基づき選択され、前記特定のステップは前記少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションに対応することと、
第１のデータソースおよび第２のデータソースからデータを受信することであって、前記第２のデータソースは前記第１のデータソースの少なくともいくつかのデータ処理機能とは異なる少なくともいくつかのデータ処理機能に関連付けられていることと、
関係型データベース管理システム以外の実行システム上で、前記オペレーションのセットに基づいてプログラムコードを実行することであって、前記プログラムコードを実行することは前記クエリの結果を作成することと、
のために構成されるシステム。
【請求項１９】
前記クエリは、関係型データベースに適用可能なクエリ言語に従って表現される、請求項１８に記載のシステム。
【請求項２０】
前記オペレーションのセットを生成することは、前記クエリプランに基づいて、データフローグラフをインスタンス化するデータ構造を生成することを含み、前記データフローグラフは、
少なくとも１つの実行すべきオペレーションを表す第１のノードであって、
前記第１のノードは、実行可能なプログラムコードを呼び出して前記オペレーションを行うために実行システムが使用することのできる情報と関連付けられ、
前記第１のノードは、データを前記プログラムコードに対して使用可能とするために実行システムが使用することのできる情報と関連付けられ、かつ
前記オペレーションは、前記クエリプランによって記述された第１のステップに基づいて選択される、第１のノードと、
前記データフローグラフの第２のノードのオペレーションに対する入力データとして提供される、前記第１のノードのオペレーションの出力データを表す少なくとも１つのリンクと
を含む、請求項１８に記載のシステム。
【請求項２１】
前記データフローグラフは、前記第１のデータソースからの前記データを受信するために実行システムが使用することのできる情報と関連付けられた第３のノードと、前記第２のデータソースからの前記データを受信するために実行システムが使用することのできる情報と関連付けられた第４のノードと、を含む、請求項２０に記載のシステム。
【請求項２２】
前記第３のノードは、実行可能なプログラムコードを呼び出すために実行システムが使用することのできる情報と関連付けられ、前記実行可能なプログラムコードは、前記クエリプランによって記述された第２のステップに基づいて選択される少なくとも１つのオペレーションを行うためのリクエストが前記第１のデータソースを管理するシステムに送信されるようにする、請求項２１に記載のシステム。
【請求項２３】
前記第１のデータソースを管理する前記システムが、前記クエリプランによって記述された前記第２のステップに基づいて選択された前記少なくとも１つのオペレーションを行うことができると判断するために構成されるシステムである、請求項２２に記載のシステム。
【請求項２４】
前記第２のデータソースを管理するシステムが、前記クエリプランによって記述された前記第２のステップに基づいて選択された前記少なくとも１つのオペレーションを行うことができないと判断するために構成されるシステムである、請求項２２に記載のシステム。
【請求項２５】
前記データフローグラフのノードと、第２のデータフローグラフのノードとの間のリンクをインスタンス化するために構成されるシステムであって、前記第２のデータフローグラフは、前記クエリプランによって記述されたいずれかのステップに基づいて選択されるオペレーション以外の実行すべきオペレーションを表す少なくとも１つのノードを含む、請求項２０に記載のシステム。
【請求項２６】
前記第１のデータソースは、関係型データベース表を含む、請求項１８に記載のシステム。
【請求項２７】
前記第２のデータソースは、関係型データベース表以外のデータの一部を含む、請求項２６に記載のシステム。
【請求項２８】
前記第２のデータソースは、フラットファイルを含む、請求項２６に記載のシステム。
【請求項２９】
前記クエリは、ＳＱＬを含む、請求項１８に記載のシステム。
【請求項３０】
前記プログラムコードの出力として、前記クエリの結果を受信するために構成されたシステムである、請求項１８に記載のシステム。
【請求項３１】
前記第１のデータソースは、前記第１のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられ、前記第２のデータソースは、前記第２のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられない、請求項１８に記載のシステム。
【請求項３２】
データ処理能力は、少なくとも１つのデータ処理命令を行うように構成される実行可能な機能性を含む、請求項１８に記載のシステム。
【請求項３３】
前記組み合わさったオペレーションは、ジョイン演算を含む、請求項１８に記載のシステム。
【請求項３４】
前記データ集計オペレーションは、集約オペレーションを含む、請求項１８に記載のシステム。
【請求項３５】
少なくとも２つデータソースからのデータに対する動作のためのコンピュータ実行可能な命令を含む非一過性のコンピュータ可読記憶装置であって、前記コンピュータ実行可能な命令は、
関係型データベースに適用可能なクエリ言語に従って表現されたクエリに対応するクエリプランを受信することであって、前記クエリプランは、関係型データベース管理システムにより行われるための１つまたは複数のステップの記述を含むことと、
実行のための少なくとも１つのデータ処理オペレーションを含むオペレーションのセットを生成することであって、前記少なくとも１つのデータ処理オペレーションは少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションを含み、前記少なくとも１つのデータ処理オペレーションは前記クエリプランにより記述される特定のステップに基づき選択され、前記特定のステップは前記少なくとも１つのデータ選択オペレーション、ソートオペレーション、データ要約オペレーションまたは組み合わさったオペレーションに対応することと、
第１のデータソースおよび第２のデータソースからデータを受信することであって、前記第２のデータソースは前記第１のデータソースの少なくともいくつかのデータ処理機能とは異なる少なくともいくつかのデータ処理機能に関連付けられていることと、
関係型データベース管理システム以外の実行システム上で、前記オペレーションのセットに基づいてプログラムコードを実行することであって、前記プログラムコードを実行することは前記クエリの結果を作成することと、のための命令である、
コンピュータ可読記憶装置。
【請求項３６】
前記第１のデータソースは、関係型データベース表を含む、請求項３５に記載のコンピュータ可読記憶装置。
【請求項３７】
前記第２のデータソースは、関係型データベース表以外のデータの一部を含む、請求項３６に記載のコンピュータ可読記憶装置。
【請求項３８】
前記第２のデータソースは、フラットファイルを含む、請求項３６に記載のコンピュータ可読記憶装置。
【請求項３９】
前記第１のデータソースは、前記第１のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられ、前記第２のデータソースは、前記第２のデータソースが格納するデータに対するオペレーションを行うための実行可能な機能性と関連付けられない、請求項３５に記載のコンピュータ可読記憶装置。
【請求項４０】
前記データ処理能力は、少なくとも１つのデータ処理命令を行うように構成される実行可能な機能性を含む、請求項３５に記載のコンピュータ可読記憶装置。
【請求項４１】
前記組み合わさったオペレーションは、ジョイン演算を含む、請求項３５に記載のコンピュータ可読記憶装置。
【請求項４２】
前記データ集計オペレーションは、集約オペレーションを含む、請求項３５に記載のコンピュータ可読記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
この説明は、データクエリの管理に関する。
【背景技術】
【０００２】
データは、データベースに格納して、データベース表などのさまざまな形式で構成することができる。データベース表は、共通のテーマまたは目的を有するデータセットを含み得る。データベース表の構成は、データベーススキームによって定義することができ、複数のデータベース表は、同様のまたは同一の構成を有し得る。さらに、データベースおよびその関連データベース表のコンテンツは、データの調整、追加または削除とともに経時的に変化し得る。さまざまな技法は、データベースへのおよびデータベースからのデータの転送ならびにデータベース内のデータの操作に使用することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
要約
一態様では、一般に、データベースクエリを表すデータフローグラフを生成する方法は、プランジェネレータからクエリプランを受信する工程であって、クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表す、工程と、クエリプランからデータフローグラフを生成する工程であって、データフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む、工程と、データソースを表す少なくとも１つの入力の少なくとも１つの特性に基づいて、データフローグラフの１つまたは複数のコンポーネントを変更する工程とを含む。
【０００４】
態様は、以下の特徴の１つまたは複数を含み得る。データフローグラフの１つまたは複数のコンポーネントを変更する工程は、データフローグラフの少なくとも１つのコンポーネントを除去する工程を含む。グラフのコンポーネントは、クエリプランによって表されるオペレーションに対応する。少なくとも１つのオペレーションは、少なくとも１つの入力によって表されるデータソースと関連付けられた実行可能な機能性によって実行することが可能である。少なくとも１つの入力の特性は、入力によって表されるデータソースと関連付けられた実行可能な機能性を含む。実行可能な機能性は、ソート機能性を含む。データフローグラフの１つまたは複数のコンポーネントを変更する工程は、第１の入力に適用可能な第１のオペレーションを表す第１のコンポーネントおよび第２の入力に適用可能な第２のオペレーションを表す第２のコンポーネントを単一のコンポーネントにマージする工程であって、単一のコンポーネントは、第１のオペレーションおよび第２のオペレーションと同等の単一のオペレーションを表し、単一のオペレーションは、第１の入力および第２の入力に適用可能である、工程を含む。データフローグラフの１つまたは複数のコンポーネントを変更する工程は、第１のデータソースを表す第１の入力コンポーネントおよび第２のデータソースを表す第２の入力コンポーネントを単一の入力コンポーネントにマージする工程であって、単一の入力コンポーネントは、第１のデータソースおよび第２のデータソースのデータにアクセスするオペレーションを含む、工程を含む。データフローグラフの１つまたは複数のコンポーネントを変更する工程は、第１の入力に適用可能な第１のオペレーションを表す第１のコンポーネントを除去し、第２のコンポーネントを第１の入力に適用する工程であって、第２のコンポーネントは、第１のオペレーションと同じ機能性に相当する第２のオペレーションを表し、第２のオペレーションは、第２の入力に適用可能である、工程を含む。また、本方法は、少なくとも１つのデータソースを表すコンポーネントと関連付けられたデータベースと関連付けられた機能性を特定する工程と、特定する工程に基づいて、データベースにデータベースクエリを提供するようコンポーネントを構成する工程も含む。データセットを表す少なくとも１つの入力は、データファイル、データベース表、第２のデータフローグラフの出力およびネットワークソケットの少なくとも１つを含む。データフローグラフの出力は、データファイル、データベース表、第２のデータフローグラフおよびネットワークソケットの少なくとも１つに割り当てられる。データベースクエリは、ＳＱＬクエリを含む。データフローグラフは、プランジェネレータからの出力を受信するよう構成されたコンポーネントを含む。
【０００５】
別の態様では、一般に、コンピュータ可読媒体は、データベースクエリを表すデータフローグラフを生成するためのコンピュータプログラムを格納し、コンピュータプログラムは、コンピュータに、プランジェネレータからクエリプランを受信させるための命令であって、クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表す、命令と、クエリプランからデータフローグラフを生成させるための命令であって、データフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む、命令と、データソースを表す少なくとも１つの入力の少なくとも１つの特性に基づいて、データフローグラフの１つまたは複数のコンポーネントを変更させるための命令とを含む。
【０００６】
別の態様では、一般に、データベースクエリを表すデータフローグラフを生成するためのシステムは、プランジェネレータからクエリプランを受信するための手段であって、クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表す、手段と、クエリプランからデータフローグラフを生成するための手段であって、データフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む、手段と、データソースを表す少なくとも１つの入力の少なくとも１つの特性に基づいて、データフローグラフの１つまたは複数のコンポーネントを変更するための手段とを含む。
【０００７】
別の態様では、一般に、データベースクエリを表すデータフローグラフを生成するためのシステムは、コンピュータシステムであって、プランジェネレータからクエリプランを受信するよう構成され、クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表し、クエリプランからデータフローグラフを生成するよう構成され、データフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含み、データソースを表す少なくとも１つの入力の少なくとも１つの特性に基づいて、データフローグラフの１つまたは複数のコンポーネントを変更するよう構成された、コンピュータシステムを含む。
【０００８】
別の態様では、一般に、データベースクエリを表すデータフローグラフを生成するためのシステムは、クエリプランを提供するプランジェネレータと連通するインターフェースであって、クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表す、インターフェースと、プランジェネレータによって提供されたクエリプランからデータフローグラフを生成するよう構成され、データフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含み、データソースを表す少なくとも１つの入力の少なくとも１つの特性に基づいて、データフローグラフの１つまたは複数のコンポーネントを変更するよう構成された、プロセッサとを含む。
【図面の簡単な説明】
【０００９】
図面の説明
【図１】データフローグラフのブロック図である。
【図２】データベースクエリおよびデータフローグラフを示す。
【図３】データベースシステムおよび関連コンポーネントの概観である。
【図４】データフローグラフの実行を表す。
【図５】データベース表およびデータベース表の構造表現である。
【図６】それぞれが実行可能な関数を含む、データベースクエリおよびデータフローグラフを示す。
【図７】データベースシステムおよび関連コンポーネントの概観である。
【図８】クエリプランおよびデータフローグラフを示す。
【図９】データベースクエリユーザインターフェースを示す。
【図１０】クエリプランおよびデータフローグラフを示す。
【図１１】クエリプランおよびデータフローグラフを示す。
【図１２】データベースシステムのオペレーション用のフローチャートである。
【発明を実施するための形態】
【００１０】
説明
１．データベース、クエリおよびグラフ
データベース管理システムは、１つまたは複数のデータベースに格納されたデータを取り扱う。そのようなデータを格納するため、データベースストレージは、データベース表などの１つまたは複数の形式を取ることができ、データベース表は、行および列などのデータ構造に組織化されたデータの集合体であり得る。一構成概念では、各行はデータの記録を表し、各列は各行内のフィールドを表す。
【００１１】
データベースに含まれる情報は、データベースクエリを使用して、アクセスして処理する（例えば、修正する）ことができる。データベースクエリは、データベースコンテンツのサブセットおよびそのサブセット内のデータを取得するための動作について記述する命令のセットである。例えば、いくつかのデータベースシステムは、構造化照会言語（ＳＱＬ）などの専用データベースクエリ言語で記述されるデータベースクエリを実行する。これらのデータベースシステムでは、ＳＱＬクエリは、データベースのコンテンツを操作するための主要な手段である。
【００１２】
ある実装形態では、データベースクエリおよび他のコンピューテーションは、グラフ表示でデータベース管理システムと関連付けられる。例えば、データは、オペレーションの集合体を通過するものとして表すことができ、これは、データフローと呼ばれる。一構成では、データフローは、有向グラフを通じて提供することができ、コンピューテーションのコンポーネントはグラフの頂点と関連付けられ、コンポーネント間のデータフローはグラフのリンク（弧、辺）に相当する。グラフは、モジュール方式の実体であり、他のモジュール方式のグラフと接続することも、組み合わせることもできる。各グラフは、１つまたは複数の他のグラフで構成することができ、特定のグラフは、より大きなグラフのコンポーネントであり得る。グラフィカル開発環境（ＧＤＥ）は、実行可能なグラフを指定して、グラフコンポーネントのためのパラメータを定義するためのユーザインターフェースを提供する。そのようなグラフベースのコンピューテーションを実装するシステムについては、その全体が参照により本明細書に組み込まれる、米国特許第５，９６６，０７２号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」で説明されている。
【００１３】
図１を参照すると、データフローグラフ１０１（例示的なユーザインターフェースで表されるような）の例は、データフローグラフ１０１の実行可能なコンポーネント１０４ａ〜１０４ｊによって処理されるデータの集合体を提供する入力コンポーネント１０２を含む。ある例において、入力コンポーネント１０２は、データベースシステムと関連付けられたデータ記録、またはトランザクション処理システムと関連付けられたトランザクションを含み得るデータソースである。データ記録は、例えば、データベース表などのさまざまな形式で格納することができる。各実行可能なコンポーネント１０４ａ〜１０４ｊは、データフローグラフ１０１全体によって定義されたコンピューテーションの一部と関連付けられる。作業要素（例えば、データの集合体またはデータベース表からの個別のデータ記録）は、コンポーネントの１つ以上の複数の入力ポートに入り、出力作業要素（ある事例では、入力作業要素であり、または入力作業要素の処理されたバージョンである）は、通常、コンポーネントの１つ以上の複数の出力ポートを出る。データフローグラフ１０１では、コンポーネント１０４ｅ、１０４ｇおよび１０４ｊからの出力作業要素は、出力データコンポーネント１０２ａ〜１０２ｃに格納される。
【００１４】
例えば、入力コンポーネント１０２および出力データコンポーネント１０２ａ〜１０２ｃはそれぞれ、データファイル、データベース表、第２のデータフローグラフの出力、ネットワークソケットまたは別のデータソースのいずれか１つへのアクセスを提供することができる。
【００１５】
あるグラフベースのデータベースシステムは、データベースクエリの処理に使用される。例えば、データベースクエリを１つまたは複数のデータベース表に適用して、例えば、データフローにおける処理のために、データベース表コンテンツの特定されたサブセットを抽出することができる。ある実装形態において、グラフベースのデータベースシステムは、データフローグラフの形式でデータベースクエリを受け入れて実行する。他のデータベースシステムは、他のタイプのデータベースクエリを使用することができる。
【００１６】
ある事例において、１つまたは複数のデータベース表は、ＳＱＬを使用する別の種類のデータベースシステムからグラフベースのデータベースシステムに移動される。他のデータベースシステムでは、グラフベースのデータベースシステムとは互換性がない多くのＳＱＬクエリが既に記述されている場合がある。ある実装形態において、ＳＱＬクエリは、グラフベースのデータベースシステムと互換性があるデータベースクエリに変換することができる。
【００１７】
図２は、ＳＱＬで記述されたデータベースクエリ２００の一例を示す。この例示的なデータベースクエリ２００は、グラフベースのデータベース管理システムによって管理されるデータベース表２０２、２０４に対して動作することを意図する。データベース表は、グラフベースのデータベース管理システムに固有の形式であるため、グラフベースのデータベース管理システムは、データベース表２０２、２０４内のデータを認識することができる。データベース表２０２、２０４は、例えば、ＳＱＬクエリを認識し、かつ、データフローグラフを使用しないデータベースシステムを発生源とするデータベース表など、他のデータベース表から得られたデータを含む場合がある。
【００１８】
しかし、グラフベースのデータベース管理システムは、ＳＱＬクエリを処理するための組み込み機能性（built-in functionality）を有さない場合があるため、グラフベースのデータベースクエリを生成して、ＳＱＬデータベースクエリ２００をエミュレートすることができる。グラフベースのデータベースクエリは、グラフベースのデータベースシステムによって認識可能である。例えば、データベースクエリ２００は、ＳＱＬクエリからデータフローグラフ２０８に変換することができる（２０６）（本明細書に記載される技法を使用して）。データフローグラフ２０８は、入力としてデータベース表２０２、２０４を受け入れることによってデータベース表２０２、２０４に対して動作し、出力としてデータベースクエリ２００の実行結果を提供する。
【００１９】
２．クエリプラン
あるデータベースシステムは、クエリプラン（時折、説明プランとも呼ばれる）に基づいて、ＳＱＬクエリなどのデータベースクエリを実行する。クエリプランは、データベースクエリが実行される場合に実行することができるデータベースオペレーションの記述である。クエリプランは、たとえオペレーションの他の構成またはオペレーションの異なるセットが同じ結果を達成したとしても、データベースオペレーションの可能な一構成について記述する可能性がある。
【００２０】
そのようなクエリプランを提供するため、データベースシステムは、クエリプランジェネレータ（時折、クエリプランナとも呼ばれる）を含み得る。例えば、クエリプランジェネレータは、データベースクエリが実行されている際にクエリプランを生成することができ、または、クエリプランジェネレータは、クエリの実行について何らかの決定が行われる前にクエリプランを生成することができる。
【００２１】
ある構成において、データベースオペレーションは、依然として同様の出力を提供しながら、さまざまな順番で実行することができる。そのため、クエリプランジェネレータは、最適なクエリプランを決定する機能性を有し得る。例えば、最適なクエリプランは、最小限の時間量で、もしくはデータ格納スペースなどの最小限のデータベースリソース量を使用してデータベースクエリを実行するため、または、そうでない場合は、データベースシステムによって特定されている制約内でデータベースクエリを達成するためのデータベースオペレーションの構成について記述するクエリプランであり得る。最適なクエリプランを決定するためのクエリプランジェネレータの機能性は、多くの可能なクエリプランのスコア付けまたはランク付けを行う機能性を含んでもよく、また、可能なクエリプランを最適なまたは効率的な構成に再構成する機能性も含んでもよい。
【００２２】
単一のデータベースクエリは、複数回実行することができ、各実行は、ユニークな最適なクエリプランを有し得る。例えば、データベース表内のデータは、データベースクエリの２つの実行間で変化し得る。この例において、データベースクエリの第１の実行に対して生成されたクエリプランにおいて記述されるオペレーションは、データベースクエリの第２の実行の間は、第１の実行の間より多くのまたは少ない実行回数を必要とし得る。この場合、オペレーションの異なる構成、例えば、同じオペレーションの異なる構成または異なるオペレーションの構成が、データベースクエリの第２の実行に対して、より適したものであり得る。データベースクエリの第２の実行に対して最適化されたクエリプランは、データベース表の瞬間の状態を考慮に入れた上で、その実行に対して生成することができる。
【００２３】
３．システムの概観
クエリプランジェネレータは、ＳＱＬクエリなどの別の種類のデータベースクエリをエミュレートするグラフベースのデータベースクエリを生成する際に使用することができる。図３は、データベース管理コンピュータシステム３０４上で実行するために、データベースクエリ３０２を準備するためのデータベースクエリ管理システム３００を示す。図示されるデータベース管理コンピュータシステム３０４は、データフローグラフとして実装されたデータベースオペレーションを取り扱うグラフ実行エンジン３０６を含む。また、データベースクエリ管理システム３００は、データフローグラフによって実行されるオペレーションの記述からデータフローグラフ３１２を構築することができるグラフ生成エンジン３１０を有するグラフ生成コンピュータシステム３０８も含む。例えば、オペレーションの記述は、クエリプラン３１４であり得る。グラフ生成コンピュータシステム３０８は、以下の「連合クエリ」について説明する第６項でさらに詳細に説明されるように、データソースを表す入力の１つまたは複数の特性に基づいて、データフローグラフのコンポーネントを変更する能力で構成される。
【００２４】
また、データベースクエリ管理システム３００は、クエリプランジェネレータ３１８を実行するクエリ計画コンピュータシステム３１６も含む。クエリプランジェネレータ３１８は、データベースクエリからクエリプランを生成する任意のクエリプランジェネレータとすることができ、データフローグラフまたはグラフ生成に関連する機能性を考慮して設計される必要はない。さらに、データベースクエリ管理システム３００は、データストレージ（例えば、ハードドライブ、光ディスクなど）にデータベース３２２を有し、１つまたは複数のデータベース表３２４ａ、３２４ｂ、３２４ｃを含むデータベースコンピュータシステム３２０も含む。
【００２５】
データベース管理コンピュータシステム３０４、グラフ生成コンピュータシステム３０８、クエリ計画コンピュータシステム３１６およびデータベースコンピュータシステム３２０に対して別々のコンピュータシステムが示されているが、これらのコンピュータシステムの２つ以上は、同じコンピュータシステムまたは同じコンピュータシステムのコンポーネントであってもよい。すべてのコンピュータシステムは、それらのそれぞれの実行可能なコンポーネントを実行するための少なくとも１つのプロセッサと、少なくとも１つのデータ格納システムとを有する。コンピュータシステムは、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネットなどのネットワーク、または、別の種類のコンピュータネットワークなどのコンピュータネットワークを使用して、互いに接続することができる。
【００２６】
１つまたは複数のデータベースクエリ３０２からデータフローグラフ３１２を生成するデモンストレーションを行うため、データフローグラフの実行前に、グラフ生成コンピュータシステム３０８によってデータベースクエリおよびデータベース表３２６が受信されて処理される。グラフ生成コンピュータシステム３０８は、データベースコンピュータシステム３２０からデータベース表３２６を受信する。
【００２７】
データベース表３２６は、いくつかの形式のうちのいずれかの形式を取ることができる。例えば、データベース表３２６は、関係型データベース表、部分的なデータベース表、フラットファイル、または、別の種類のデータファイルもしくはデータファイルの集合体であり得る。ある例において、データベース表３２６は、データベース表についての情報、例えば、データベース表についてのメタデータまたはデータベース表の記述の形式で受信することができる。
【００２８】
ある実装形態において、データベース表３２６は、データベースコンピュータシステム３２０と関連付けられるか、または、そうでない場合は、グラフ生成コンピュータシステム３０８へのアクセスが可能なデータ登録によって特定することができる。データ登録は、例えば、データベース表３２６と関連付けられたデータファイル位置と、データベース表と関連付けられた主キーおよびインデックス情報とを含み得るルックアップファイルカタログの形式であり得る。また、データ登録は、異なるタイプのデータベース表に対するデータフォーマットについての情報も提供することができる。さらに、データ登録は、どのようにデータフローグラフ３１２がデータベース表にアクセスできるかについての情報も提供することができる。
【００２９】
また、グラフ生成コンピュータシステム３０８は、データベース表３２６に適用するデータベースクエリ３０２も受信する。例えば、データベースクエリは、ＳＱＬクエリであり得る。データベースクエリ３０２は、任意の数の可能なソースから受信することができる。例えば、データベースクエリ３０２は、ユーザ３３０がデータベースクエリを入力したユーザインターフェース３２８から受信することができる。ある例において、データベースクエリ３０２は、データ格納システムから受信されるか、データベースクエリは、インターネットなどのコンピュータネットワークから受信されるか、または、データベースクエリは、別の以前に受信されたデータベースクエリに基づいて生成される。
【００３０】
ある実装形態において、グラフ生成コンピュータシステム３０８は、データベース表３２６についての情報から生成されたデータベース表３２６のバージョンをクエリ計画コンピュータシステム３１６に提供する（矢印３３２で表されるように）。例えば、クエリ計画コンピュータシステム３１６に提供されたデータベース表３２６のバージョンは、データベース表よりもサイズが小さく、したがって、処理のためにより少ないコンピュータリソースを必要とするデータベース表の構造表現３３４であり得る。データベース表３２６の構造表現３３４は、データベース表についての情報を含み得るが、データベース表の一部またはすべてのデータが欠けている。例えば、データベース表３２６の構造表現３３４は、データベース表の列、行またはフィールドなどのデータベース表のフォーマットを反映するフォーマットを含み得る。また、データベース表３２６の構造表現３３４は、データベース表の要素のデータ格納サイズまたはデータベース表の要素のデータタイプなどのデータについての情報も含み得る。
【００３１】
グラフ生成コンピュータシステムは、データベースクエリ３０２およびデータベース表３２６の構造表現３３４をクエリ計画コンピュータシステム３１６に提供する（矢印３３２で表されるように）。クエリ計画コンピュータシステム３１６は、クエリプランジェネレータ３１８を実行し、クエリプランジェネレータ３１８は、データベース表３２６上でのデータベースクエリ３０２の実行用に最適化されたクエリプランを生成する。データベース表３２６の構造表現３３４は、データベース表３２６自体によって供給されるものと同じ、クエリプランジェネレータ３１８によって使用される情報、例えば、データサイズ、データタイプおよびデータベース表に含まれるデータについての他の情報を供給する。ある実装形態において、データベース表３２６の構造表現３３４は、データルックアップおよび検索の最適化に使用されるデータ要素のインデックスを含む。クエリプランジェネレータ３１８は、インデックスを使用して、インデックス付きのデータベース表３２６からのデータ要素の識別および検索速度を計算することができる。
【００３２】
グラフ生成コンピュータシステム３０８は、クエリ計画コンピュータシステム３１６からクエリプラン３１４を受信する。クエリプラン３１４は、データベース表３２６上でのデータベースクエリ３０２の実行に使用することができるデータベースオペレーションの構成について記述する。例えば、クエリプラン３１４におけるオペレーションは、データフローグラフ３１２のノードに対応し得る。また、クエリプラン３１４は、クエリプランにおけるオペレーションによって使用されるデータタイプについての情報も含み得る。例えば、クエリプランにおけるオペレーションは、パラメータを含むことができ、パラメータのデータタイプは、クエリプラン内に記述されることができる。
【００３３】
生成された時点で、クエリプラン３１４は、グラフ生成エンジン３１０によるデータフローグラフ３１２の生成のためにグラフ生成コンピュータシステム３０８に提供される。グラフ生成エンジン３１０は、クエリプラン３１４に対応するデータフローグラフ３１２を出力する。ある実装形態において、データフローグラフ３１２は、クエリプランで記述されるオペレーションを表すノードと、オペレーション間のデータのフローを表すノードリンクとを有する。実行用にデータベースクエリを準備する各インスタンスに対してデータフローグラフ３１２を生成することができるため、グラフ生成エンジン３１０は、データベースクエリを実行するためのリアルタイム要求への応答に対して十分素早くデータフローグラフを生成することができる。ある実装形態において、グラフ生成エンジン３１０は、１秒以内にクエリプランからデータフローグラフを生成することができる。
【００３４】
グラフ生成コンピュータシステム３０８は、グラフ生成エンジン３１０によって生成されたデータフローグラフ３１２をデータベース管理コンピュータシステム３０４に提供する（矢印３３６で表されるように）。ある実装形態において、グラフ生成コンピュータシステム３０８は、データベース管理コンピュータシステムで使用するためのデータベース表３２６を準備し、準備したデータベース表３３８を提供することも行う。例えば、グラフ生成コンピュータシステム３０８は、グラフ生成コンピュータシステム３０８で使用されるフォーマットからデータベース管理コンピュータシステム３０４で使用されるフォーマットにデータベース表３２６を変換し得る。
【００３５】
データベース管理コンピュータシステム３０４に提供された時点で、実行のためのデータフローグラフ３１２の準備が整う。図４に示されるように、データベース管理コンピュータシステム３０４は、データベースクエリの結果４０２を生成するため、データフローグラフ３１２のオペレーションを実行し、データベース表３２６を使用することができる。データベース管理コンピュータシステム３０４は、データフローグラフ３１２の１つまたは複数のノード４０４ａ、４０４ｂ、４０４ｃにデータベース表３２６を提供し、グラフ実行エンジン３０６を使用してデータフローグラフを実行する。グラフ実行エンジン３０６は、データフローグラフ３１２のノード４０４ａ、４０４ｂ、４０４ｃによって表されるオペレーションを実行し、これらのオペレーションは、基本的なデータベースクエリを実行するためのデータベースオペレーションに相当する。さらに、ノード間のリンク４０８ａ、４０８ｂ、４０８ｃは、データベース表が処理される際のデータベースオペレーション間のデータのフローを表す。データフローグラフ３１２は、データベースクエリの結果４０２を出力する。
【００３６】
４．構造表現
図５は、データベース表５００およびデータベース表の構造表現５０２（データベース表からのデータのいずれも含まない）の一例を示す。データベース表５００は、同様のまたは異なるタイプのデータを含み得る列５０４ａ〜５０４ｉを有する。また、データベース表５００は、それぞれが各列に対応するフィールドを含む行５０８ａ〜５０８ｅも有する。行の各フィールドは、対応する列のデータタイプ（例えば、文字列、整数、浮動小数点数など）のデータ要素５１０ａ、５１０ｂ、５１０ｃを含む。さらに、各行５０８ａ〜５０８ｅは、固有のデータ格納サイズ５１２ａ〜５１２ｅを有する。例えば、データ格納サイズ５１２ａ〜５１２ｅは、メモリなどのデータストレージ内に行が存在する際に、その行のデータ要素によって使用される格納スペース量であり得る。
【００３７】
データベース表５００の構造表現５０２（図３に示されるように、グラフ生成コンピュータシステム３０８によって生成される）は、データベース表と同一の列５１４ａ〜５１４ｉを有し、元の列５０４ａ〜５０４ｉと同じデータタイプを含む。また、データベース表５００の構造表現５０２は、データベース表の行５０８ａ〜５０８ｅに相当する行５１８ａ〜５１８ｅも有する。しかし、行５１８ａ〜５１８ｅは、データベース表５００からのデータ要素５１０ａ、５１０ｂ、５１０ｃを含まない。各行５１８ａ〜５１８ｅは、データ格納サイズ値５２０ａ〜５２０ｅと関連付けられる。データベース表５００の行のデータ格納サイズ５１２ａ〜５１２ｅは、個別のデータ要素５１０ａ、５１０ｂ、５１０ｃのデータ格納サイズから計算することができるが、各行５１８ａ〜５１８ｅのデータ格納サイズ値５２０ａ〜５２０ｅは、それ自体が、データベース表の構造表現５０２の各行と並んで格納されるデータ要素であり得る。データベース表の構造表現のフィールド５２２ａ、５２２ｂ、５２２ｃは、データベース表のフィールドからのデータ要素５１０ａ、５１０ｂ、５１０ｃが欠けているため、データベース表５００の構造表現５０２のデータ格納サイズの合計値は、データベース表のデータ格納サイズの合計値のごく一部であり得る。ある実装形態において、データベース表５００の構造表現５０２は、データベース表からの何らかのデータ要素を保持することができ、例えば、データベース表の構造表現は、キー値５２４、５２６に相当するデータ要素またはデータベース表の構造、組織もしくはフォーマットに使用される他のデータ要素を保持することができる。ある実装形態において、データベース表５００の構造表現５０２は、データの検索に使用される情報を提供するインデックスまたは別のデータ構造を含み得る。ある実装形態において、データベース表５００の構造表現５０２は、データベース表に含まれるデータについての他の統計を含み得る。
【００３８】
５．関数呼び出し
図６に示されるように、ある実装形態では、カスタムグラフ関数６０２をデータベースクエリ６０４に埋め込むことができる。例えば、カスタムグラフ関数６０２は、データフローグラフの実行の間にデータフローグラフ６０６が行うことができるオペレーションを表し得る。カスタムグラフ関数６０２は、データベースクエリ６０４の文脈中におけるいかなる機能性も有さない場合があり、生成されるデータフローグラフ６０６に渡されるデータベースクエリに配置される。例えば、カスタムグラフ関数６０２は、データベースクエリ６０４に追加され、データフローグラフへの変換に対してそれを準備することができるが、既存のデータベースクエリの一部を置き換えるかまたは増加させる。さらに、クエリプランジェネレータは、カスタムグラフ関数６０２の機能性についての情報を有さない場合がある。カスタムグラフ関数６０２は、データベースクエリ６０４の言語における同等の機能を有さない関数であり得る。ある実装形態において、クエリプランジェネレータは、カスタムグラフ関数６０２に対する入力データタイプまたは出力データタイプを知っている場合がある。データフローグラフ６０６が生成される（６０８）と、カスタムグラフ関数６０２は、データフローグラフのノード６１０として機能し得る。
【００３９】
ある実装形態において、カスタムグラフ関数６０２は、特別なもしくはカスタマイズされたフォーマットでのデータへのアクセスに使用される関数であり得るか、カスタムグラフ関数は、正規表現もしくはパターンマッチング表現の実行に使用される関数であり得るか、または、カスタムグラフ関数は、ユーザ、例えば、データベース管理コンピュータシステムのユーザによって実装される関数であり得る。
【００４０】
６．連合クエリ
ある実装形態において、クエリプランジェネレータ（例えば、図３に示されるクエリプランジェネレータ３１８）は、複数のデータソースおよび／または複数のタイプのデータソースから取得された入力データに対して動作するように構築されたデータベースクエリに対して動作することができる。例えば、データベースクエリは、複数のデータベース表に対して動作するように構築することができ、データベース表は、異なるタイプのデータベースに属し、異なる内部の機能性を有し得る。また、データベースクエリは、複数のデータファイル、複数のネットワークソケット、他のデータフローグラフの複数の出力、または、これらのタイプのデータソースの任意の組合せもしくはデータベースクエリを使用してアクセスすることができる他のタイプのデータソースの任意の組合せなど、他のデータソースでアクセス可能なデータに対して動作するように構築することもできる。グラフ生成エンジンがクエリプランからデータフローグラフを生成すると、結果として得られたデータフローグラフは、データソースの数およびそれぞれのタイプに応じて、それぞれのデータソースの特性に基づいてデータソースを表す各入力へのアクセスに対して最適化することができる。
【００４１】
図７は、グラフ生成エンジン９０８とグラフオプティマイザ７０４とを含むグラフ生成コンピュータシステム７０６を示す。グラフ生成コンピュータシステム７０６は、１つまたは複数のデータベース表７２６ａ、７２６ｂを受信する。例えば、グラフ生成コンピュータシステム７０６は、１つまたは複数のデータベースコンピュータシステム、例えば、データ格納システム（例えば、ハードドライブ、光ディスクなど）にデータベース７２２を有するデータベースコンピュータシステム７２０からデータベース表７２６ａ、７２６ｂを受信することができる。また、グラフ生成コンピュータシステム７０６は、データベース表７２６ａ、７２６ｂに適用するデータベースクエリ７０２も受信する。例えば、データベースクエリ７０２は、ユーザインターフェースから受信することができるか、データベースクエリ７０２は、データ格納システムから受信することができるか、データベースクエリは、インターネットなどのコンピュータネットワークから受信することができるか、または、データベースクエリは、別の以前に受信されたデータベースクエリに基づいて生成することができる。
【００４２】
グラフ生成コンピュータシステム７０６は、データベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂをクエリ計画コンピュータシステム７４６に提供する（矢印７３２で表されるように）。いくつかの実装形態では、データベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂは、データベース表７２６ａ、７２６ｂ自体である。いくつかの例では、データベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂは、データベース表７２６ａ、７２６ｂの構造表現である。例えば、データベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂは、図５に示されるデータベース表５００の構造表現５０２と同じ様式でフォーマットされた構造表現であり得る。
【００４３】
グラフ生成コンピュータシステム７０６は、データベースクエリ７０２およびデータベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂをクエリ計画コンピュータシステム７４６に提供する（矢印７３２で表されるように）。クエリ計画コンピュータシステム７４６は、クエリプランジェネレータ７４８を実行し、クエリプランジェネレータ７４８は、データベース表７２６ａ、７２６ｂ上でのデータベースクエリ７０２の実行用のクエリプラン７１４を生成する。ある実装形態では、データベース表７２６ａ、７２６ｂのバージョン７３４ａ、７３４ｂがデータベース表７２６ａ、７２６ｂの構造表現であれば、構造表現は、データベース表７２６ａ、７２６ｂ自体によって供給されるものと同じ、クエリプランジェネレータ７４８によって使用される情報を供給する。
【００４４】
グラフ生成コンピュータシステム７０６は、クエリ計画コンピュータシステム７４６からクエリプラン７１４を受信する。図３に示されるクエリプラン３１４と同様に、このクエリプラン７１４は、データベース表７２６ａ、７２６ｂ上でのデータベースクエリ７０２の実行に使用することができるデータベースオペレーションの構成について記述する。グラフ生成コンピュータシステム７０６は、クエリプラン７１４を入力として使用して、グラフ生成エンジン９０８を実行する。グラフ生成エンジン９０８は、クエリプラン７１４のコンテンツに基づいてデータフローグラフ７１６を生成する。ある実装形態において、データフローグラフ７１６は、クエリプラン７１４で記述されるオペレーションを表すノードと、オペレーション間のデータのフローを表すノードリンクとを有する。
【００４５】
データフローグラフ７１６は、グラフオプティマイザ７０４によって最適化されたデータフローグラフ７１８に変換することができる。ある実装形態において、データフローグラフ７１６は、コンピュータシステム（例えば、データベース管理コンピュータシステム７４４）によって実行して、クエリプラン７１４によって定義されたオペレーションに相当するオペレーションを行うことができる。データフローグラフ７１６によって行われたいくつかのオペレーションは冗長なものであってもよく、除去することも、他のオペレーションと統合することもできる。例えば、データフローグラフ７１６は、コンポーネントのグループが実行するものと同じオペレーションを実行する単一のコンポーネントにマージすることができるコンポーネントのグループを含み得る。グラフオプティマイザ７０４は、データフローグラフ７１６を分析し、最適化を実行してデータフローグラフを変更し、例えば、冗長コンポーネントの除去、コンポーネントのマージ、および、そうでなければ、データフローグラフ７１６のコンポーネントの数の削減を行い、最適化されたデータフローグラフ７１８を生成する。最適化されたデータフローグラフ７１８が生成された後、最適化されたデータフローグラフ７１８は、実行のためにデータベース管理コンピュータシステム７４４に提供することができる。
【００４６】
ある実装形態において、データフローグラフ７１６および／または最適化されたデータフローグラフ７１８は、クエリプランジェネレータ７４８の出力（例えば、クエリプラン７１４）をデータフローグラフ７１６の他のコンポーネントに提供するよう構成されたコンポーネントを含む。例えば、データフローグラフ７１６または最適化されたデータフローグラフ７１８は、実行の間（「即座に（on the fly）」）、データベースクエリ７０２を受信することができ、したがって、データフローグラフ７１６または最適化されたデータフローグラフ７１８のコンポーネントも同様に、実行の間、クエリプランジェネレータ７４８からデータベースクエリ７０２に対応するクエリプラン７１４を要求することができる。クエリプランジェネレータ７４８の出力を提供するコンポーネントは、次いで、データフローグラフ７１８の他のコンポーネントにクエリプラン７１４を提供することができる。
【００４７】
ある実装形態において、グラフオプティマイザ７０４は、最適化されたデータフローグラフ７１８を生成する際に、データフローグラフ７１６のコンポーネントの数を増加することができる。例えば、データフローグラフ７１６は、複雑なコンポーネントがより効率的なコンポーネントのグループに置き換えられた場合に実行されると、より速くまたはより効率的に動作することができる。
【００４８】
ある実装形態において、グラフ生成コンピュータシステム７０６は、クエリプラン７１４に対して動作するクエリプランオプティマイザを含み、クエリプラン７１４は、データフローグラフに変換される前に最適化される。
【００４９】
図８は、クエリプラン８０６から生成されたデータフローグラフ８０２および最適化されたデータフローグラフ８０４の一例を示す。クエリプラン８０６は、以下のＳＱＬクエリを表す。
select count(*) as num_transactions,
sum(transaction_amt) as total,
account_id
from federated_transactions
group by account_id
order by account_id
【００５０】
このＳＱＬクエリは、federated_transactionsと呼ばれるデータベース表から記録を選択し、それらをグループ分けし、順番付けを行う。クエリプラン８０６は、クエリを実行するために実行することができる３つのオペレーションについて記述する。クエリプラン８０６のオペレーションは、データ選択オペレーション８１０、ソートオペレーション８１２およびグループ集計オペレーション８１４と呼ばれるデータ要約オペレーションである。これらのオペレーションは、大体がオペレーションに対応するコンポーネントを有するデータフローグラフ８０２に変換することができる。データフローグラフ８０２は、データ選択コンポーネント８２０、ソートコンポーネント８２２、ロールアップコンポーネント８２４と呼ばれるデータ要約コンポーネントおよび出力コンポーネント８２６を有する。
【００５１】
データ選択コンポーネント８２０は、データソースを表す。例えば、データ選択コンポーネント８２０は、データベース表、第２のデータフローグラフの出力、ネットワークソケットまたは別のデータソースであり得る。
【００５２】
出力コンポーネント８２６は、データの送信先を表す。例えば、出力コンポーネント８２６は、データファイル、データベース表、第２のデータフローグラフへの入力、ネットワークソケットまたは出力データの別の送信先のいずれか１つであり得る。
【００５３】
データ選択コンポーネント８２０は、実行可能な機能性を有するデータソースを表し得る。例えば、データ選択コンポーネント８２０は、データベースクエリを実行することができ、上記で示されるＳＱＬクエリなどの実行されたデータベースクエリに基づいてデータを返すデータベースのデータベース表を表し得る。データフローグラフ８０２は、データベース表を格納するデータベースと関連付けられた機能性へのアクセスを有し得る。例えば、データフローグラフ８０２は、実行可能な機能性と関連付けられたオペレーションを実行するためにデータベースに要求を送信することができるコンポーネントを有し得る。
【００５４】
ある実装形態において、ＳＱＬクエリは、データベースに属するデータに対して動作する。例えば、データ選択コンポーネント８２０によって表されたfederated_transactionsデータベース表は、ソートコンポーネント８２２およびロールアップコンポーネント８２４によって実行されるものと同じ機能を実行することができるデータベースに属し得る。最適化されたデータフローグラフ８０４は、この組み込み機能性を利用するクエリプラン８０６から生成することができる。最適化されたデータフローグラフ８０４は、ロールアップ機能性を含むデータ選択コンポーネント８３０および出力コンポーネント８３２の２つのコンポーネントのみを有する。
【００５５】
最適化されたデータフローグラフ８０４は、クエリプラン８０６から直接生成されるデータフローグラフ８０２より少ないコンポーネントを有してもよく、また、最適化されたデータフローグラフ８０４は、より効率的に動作してもよい。例えば、図示される例では、データフローグラフ８０２は、federated_transactionsデータベース表から７９６，０９６個の記録を選択し、ロールアップオペレーションが完了した時点で、この数は、３，７５４個の記録まで削減される。最適化されたデータフローグラフ８０４は、７９６，０９６個の記録のすべてを選択して処理する工程を行う必要はないが、その理由は、最適化されたデータフローグラフ８０４は、既にソートされ、要約された３，７５４個の記録を取得するためである。
【００５６】
ある実装形態において、最適化は、最適化されたデータフローグラフ８０４によって機能性が利用されているデータソースに適したクエリにクエリプラン８０６の一部を変換し直すことによって実行することができる。図９は、最適化されたデータフローグラフ８０４のデータ選択コンポーネント８３０と関連付けられたユーザインターフェース９４０の一例を示す。ユーザインターフェース９４０により、データ選択コンポーネント８３０は、ＳＱＬクエリ９４２を用いて構成することができる。データ選択コンポーネント８３０と関連付けられたデータフローグラフ８０４が実行されると、ＳＱＬクエリ９４２は、データ選択コンポーネント８３０によって表されるデータソースに伝達され、データ選択コンポーネント８３０と関連付けられたデータベース機能性によって実行される。例えば、データ選択コンポーネント８３０がデータベースコンピュータシステム７２０（図７）によって格納されたデータベース７２２と関連付けられれば、ＳＱＬクエリ９４２は、実行のためにデータベースコンピュータシステム７２０に伝達することができる。このように、データ選択コンポーネント８３０は、ＳＱＬクエリ９４２を使用して、データベース７２２と関連付けられた機能性にアクセスすることができる。
【００５７】
入力として複数のデータソースを有するクエリプランを表すデータフローグラフは、複数の入力の特性に基づいて最適化することができる。図１０は、最適化されたデータフローグラフ１０３０への変換を受けるクエリプラン１０１０を示す。クエリプラン１０１０は、連合クエリを表し、入力として２つのデータベース表１０１２、１０１４を有する。クエリプランは、データフローグラフ１０２０に変換することができる（１０１６）。例えば、図７に示されるグラフ生成エンジン９０８が変換を実行することができる。
【００５８】
データフローグラフ１０２０は、データベース表の１つ１０１２を表すデータ選択コンポーネント１０２２と、他のデータベース表１０１４を表すデータコンポーネント１０２６とを含む。データ選択コンポーネント１０２２は、ロールアップコンポーネント１０２４にデータを出力し、データコンポーネント１０２６は、第２のロールアップコンポーネント１０２８にデータを出力する。データ選択コンポーネント１０２２は、データフローグラフ１０２０内でロールアップコンポーネント１０２４が実行するものと同じオペレーションの実行に使用することができる内部の機能性を有する。例えば、データ選択コンポーネント１０２２は、実行可能な機能性を有するデータベースシステムを表してもよく、それが提供するデータに対してそれ自体のオペレーションを実行することができる。例えば、データ選択コンポーネント１０２２は、図７に示されるデータベース７２２などのデータベース上でアクセス可能なデータベース表を表し得る。
【００５９】
データコンポーネント１０２６は、データフローグラフ１０２０内でロールアップコンポーネント１０２８が実行するものと同じオペレーションの実行に使用することができる機能性を有さない。例えば、データコンポーネント１０２６は、実行可能な機能性を含まないデータファイルなどの実体であり得る。
【００６０】
データフローグラフ１０２０は、最適化されたデータフローグラフ１０３０に変換することができ（１０１８）（例えば、図７に示されるグラフオプティマイザ７０４などのグラフオプティマイザによって）、最適化されたデータフローグラフ１０３０では、データ選択コンポーネント１０２２およびデータコンポーネント１０２６の内部の機能性に基づいて、コンポーネントの一部が除去されている。データ選択コンポーネント１０２２は、ロールアップ機能性を含むため、データ選択コンポーネント１０２２およびその関連ロールアップコンポーネント１０２４を組み合わされたデータ選択コンポーネント１０３２にマージして、そうでなければロールアップコンポーネント１０２４によって実行されるロールアップオペレーションを組み込むことができる。組み合わされたデータ選択コンポーネント１０３２には、最適化されたデータフローグラフ１０３０にデータを提供する前にロールアップオペレーションを実行するように組み合わされたデータ選択コンポーネント１０３２に指示するデータベースクエリを提供することができる。例えば、組み合わされたデータ選択コンポーネント１０３２には、図８に示されるＳＱＬクエリ９４２などのデータベースクエリを提供することができる。データコンポーネント１０２６はそうでなければロールアップコンポーネント１０２８によって重複して行われる内部のロールアップ機能性を有さないため、データコンポーネント１０２６と関連付けられたロールアップコンポーネント１０２８は、最適化されたデータフローグラフ１０３０に残存する。
【００６１】
図１１は、最適化されたデータフローグラフ１１３０への変換を受けるクエリプラン１１１０を示す。クエリプラン１１１０は、連合クエリを表し、入力として２つのデータベース表１１１２、１１１４を有する。クエリプランは、データフローグラフ１１２０に変換することができる（１１１６）。例えば、図７に示されるグラフ生成エンジン９０８が変換を実行することができる。
【００６２】
データフローグラフ１１２０は、クエリプラン１１１０のオペレーションに対応するコンポーネントを含む。このデータフローグラフ１１２０は、クエリプラン１１１０のデータベース表１１１２、１１１４を表すデータソースコンポーネント１１２２、１１２４を含み、また、データソースコンポーネント１１２２、１１２４によって提供されるデータに対して動作して、データベース表１１１２、１１１４のデータを単一のデータソースに組み合わせる結合コンポーネント１１２６も含む。
【００６３】
データベース表１１１２、１１１４は、同じデータベース、例えば、図７に示されるデータベース７２２に属し得る。データベース７２２は、単一のデータソース、例えば、結合オペレーションの結果としての単一のデータベース表として、２つのデータベース表１１１２、１１１４のデータを提供することができる機能性を有し得る。グラフオプティマイザ、例えば、図７に示されるグラフオプティマイザ７０４は、データベース表１１１２、１１１４と関連付けられたデータベース７２２の機能性を特定し、データフローグラフ１１２０のコンポーネントの数を削減することによってデータフローグラフ１１２０を簡易化できるかどうかを決定することができる。グラフオプティマイザ７０４は、データベース７２２がデータベース表１１１２、１１１４に対する結合オペレーションを実行し、データベース７２２が２つのデータベース表１１１２、１１１４に対する結合オペレーションを実行する際にデータベース７２２によって提供されたデータを表すマージされたデータソースコンポーネント１１３２を含む最適化されたデータフローグラフ１１３０を生成できることを決定することができる。結合コンポーネント１１２６によって表される機能性はデータベース７２２が代わりに実行するため、最適化されたデータフローグラフ１１３０は、結合コンポーネント１１２６を含まない。
【００６４】
図１２は、グラフ生成コンピュータシステム７０６（図７に示される）の例示的なオペレーションを示すフローチャート１２００である。工程１２０２では、グラフ生成コンピュータシステムは、クエリプラン、例えば、クエリ計画コンピュータシステムのクエリプランジェネレータによって生成されたクエリプランを受信する。クエリプランは、データソースを表す少なくとも１つの入力に対してデータベースクエリを実行するためのオペレーションを表す。工程１２０４では、グラフ生成コンピュータシステムは、グラフ生成エンジンを使用して、クエリプランで記述されたオペレーションに基づいて、クエリプランからデータフローグラフを生成する。結果として得られたデータフローグラフは、クエリプランによって表される少なくとも１つのオペレーションを表す少なくとも１つのノードを含み、クエリプランと関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む。工程１２０６では、グラフ生成コンピュータシステムは、データソースを表す入力の特性に基づいて、データフローグラフのコンポーネントを変更する。コンポーネントを変更して、データフローグラフを最適化する、例えば、データフローグラフのコンポーネントの数を削減することができる。
【００６５】
上記で説明されるデータベースクエリ管理手法は、コンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えば、ソフトウェアは、１つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム（それは、分散型、クライアント／サーバまたはグリッドなどのさまざまなアーキテクチャのものである）上で実行する１つまたは複数のコンピュータプログラムの手順を形成し、コンピュータシステムはそれぞれ、少なくとも１つのプロセッサと、少なくとも１つのデータ格納システム（揮発性および不揮発性メモリならびに／または格納要素を含む）と、少なくとも１つの入力デバイスまたはポートと、少なくとも１つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、コンピューテーショングラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの１つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【００６６】
ソフトウェアは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能なＣＤ−ＲＯＭなどの記憶媒体上で提供されても、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達されてもよい（伝播信号で符号化される）。機能のすべては、特殊用途のコンピュータ上か、または、コプロセッサなどの特殊用途のハードウェアを使用して実行することができる。ソフトウェアは、ソフトウェアによって指定されるコンピューテーションの異なる部分は異なるコンピュータによって実行される分散様式で実装することができる。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス（例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体）上に格納されるか、または、同記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【００６７】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更を行うことができることが理解されよう。例えば、上記で説明された工程のいくつかは、順番に依存しないものであり得、したがって、説明されている順番とは異なる順番で実行することができる。
【００６８】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。例えば、上記で説明された多くの機能工程は、処理全体に実質的に影響を与えることなく、異なる順番で実行することができる。他の実施形態は、以下の特許請求の範囲内にある。
【図１】
0006364107.tif 000002
【図２】
0006364107.tif 000003
【図３】
0006364107.tif 000004
【図４】
0006364107.tif 000005
【図５】
0006364107.tif 000006
【図６】
0006364107.tif 000007
【図７】
0006364107.tif 000008
【図８】
0006364107.tif 000009
【図９】
0006364107.tif 000010
【図１０】
0006364107.tif 000011
【図１１】
0006364107.tif 000012
【図１２】
0006364107.tif 000013