(57)【特許請求の範囲】
【請求項１】
第１のシステムにより実行される、ＳＱＬクエリに基づいてコンピュータプログラムを生成する方法であって、
第１のデータソースに記憶されている第１のデータセットへの参照を含み、前記第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照を含むＳＱＬクエリを受信することと、
前記ＳＱＬクエリが２つ以上のコマンドを含み、前記コマンドが第１の和結合型操作と第１の集約操作とを含むと判断することと、
前記第１の和結合型操作が前記第１のデータセットからのデータの少なくとも一部分に適用され、前記第２のデータセットからのデータの少なくとも一部分に適用されることを前記ＳＱＬクエリが記述していると判断することと、
前記第１の集約操作が前記第１の和結合型操作の結果として得られるデータに適用されることを前記ＳＱＬクエリが記述していると判断することと、
遂行された時に、前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、
前記一連の操作から第２の集約操作を選択することと、
前記ＳＱＬクエリに基づいて、第２のシステムに実行させるために、前記第１のシステム上でコンピュータプログラムを生成することであって、前記コンピュータプログラムが、
前記第１のデータセットからのデータの一部分について前記第２の集約操作を実行するよう前記第２のシステムに指示する命令を送信し、
前記第１のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第２のシステムから受信し、
前記特定のデータセットと、前記第２のデータセットからのデータの一部分の要約とについて第２の和結合型操作を実行する
ために構成されることと、
を含む、方法。
【請求項２】
前記第１のシステムがグラフベースの処理システムを含み、前記第２のシステムがリレーショナルデータベース管理システムを含む、請求項１に記載の方法。
【請求項３】
前記コンピュータプログラムが、
前記第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令を送信し、
前記第２のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第３のシステムから受信する
ために構成される、請求項１に記載の方法。
【請求項４】
前記コンピュータプログラムが、
前記第１のデータセットからのデータの前記一部分の要約と前記第２のデータセットからのデータの前記一部分の要約である前記データセットに適用される前記ＳＱＬクエリの前記和結合型操作を表す第１のコンポーネントであって、前記要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第１のコンポーネントと、
前記第１のデータセットを表す第２のコンポーネントであって、実行された時に前記命令を送信させる第２のコンポーネントと、
を含む、請求項１に記載の方法。
【請求項５】
前記第２のデータセットを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントとを含み、前記第３のコンポーネントの出力が前記第４のコンポーネントに流れ、前記第４のコンポーネントの出力が前記第１のコンポーネントに流れる、請求項４に記載の方法。
【請求項６】
前記第２のコンポーネントの前記出力が、前記第１のデータセットからのデータの前記一部分の前記要約である前記特定のデータセットを含む、請求項４に記載の方法。
【請求項７】
前記第１のデータソースを表す前記第２のコンポーネントが前記命令を送信し、前記第１のシステムが前記コンピュータプログラムを実行する前記第２のシステムにデータを送信させる前に前記命令が遂行される、請求項４に記載の方法。
【請求項８】
前記命令が、前記第２の集約操作に対応するコマンドを含むＳＱＬ文を含む、請求項１に記載の方法。
【請求項９】
前記ＳＱＬクエリに基づいて前記コンピュータプログラムを生成することが、
前記ＳＱＬクエリに基づいてクエリプランを生成することと、
前記第１のデータソースからのデータに適用される前記第２の集約操作を前記クエリプランに追加することと、
前記第２のシステムが前記第２の集約操作を遂行するための機能性を含むと判断することと、
前記第１のデータセットを表す前記クエリプランの一部分に、前記第２の集約操作を遂行するための命令を付加することと、
前記クエリプランに基づいて前記コンピュータプログラムを生成することと、
を含む、請求項１に記載の方法。
【請求項１０】
前記第１の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、前記第２の集約操作が前記第１の集約操作と同じタイプの集約操作である、請求項１に記載の方法。
【請求項１１】
前記第１の集約操作が平均操作であり、前記第２の集約操作が合計操作及びカウント操作を含む、請求項１に記載の方法。
【請求項１２】
前記第１の集約操作に基づいて前記第２の集約操作を決定することを含む、請求項１に記載の方法。
【請求項１３】
前記第１の和結合型操作が前記第２の和結合型操作と同じタイプのものである、請求項１に記載の方法。
【請求項１４】
ＳＱＬクエリに基づいてコンピュータプログラムを生成するためのシステムであって、
第１のデータソースに記憶されている第１のデータセットへの参照を含み、前記第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照を含むＳＱＬクエリを受信し、
前記ＳＱＬクエリが２つ以上のコマンドを含み、前記コマンドが第１の和結合型操作と第１の集約操作とを含むと判断し、
前記第１の和結合型操作が前記第１のデータセットからのデータの少なくとも一部分に適用され、前記第２のデータセットからのデータの少なくとも一部分に適用されることを前記ＳＱＬクエリが記述していると判断し、
前記第１の集約操作が前記第１の和結合型操作の結果として得られるデータに適用されることを前記ＳＱＬクエリが記述していると判断し、
遂行された時に、前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定し、
前記一連の操作から第２の集約操作を選択し、
前記ＳＱＬクエリに基づいて、第２のシステムに実行させるために、第１のシステム上でコンピュータプログラムを生成し、前記コンピュータプログラムが、
前記第１のデータセットからのデータの一部分について前記第２の集約操作を実行するよう前記第２のシステムに指示する命令を送信し、
前記第１のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第２のシステムから受信し、
前記特定のデータセットと、前記第２のデータセットからのデータの一部分の要約とについて第２の和結合型操作を実行する
ために構成される１つ以上のプロセッサを含む、システム。
【請求項１５】
前記第１のシステムがグラフベースの処理システムを含み、前記第２のシステムがリレーショナルデータベース管理システムを含む、請求項１４に記載のシステム。
【請求項１６】
前記コンピュータプログラムが、
前記第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令を送信し、
前記第２のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第３のシステムから受信する
ために構成される、請求項１４に記載のシステム。
【請求項１７】
前記コンピュータプログラムが、
前記第１のデータセットからのデータの前記一部分の要約と前記第２のデータセットからのデータの前記一部分の要約である前記データセットに適用される前記ＳＱＬクエリの前記和結合型操作を表す第１のコンポーネントであって、前記要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第１のコンポーネントと、
前記第１のデータセットを表す第２のコンポーネントであって、実行された時に前記命令を送信させる第２のコンポーネントと、
を含む、請求項１４に記載のシステム。
【請求項１８】
前記コンピュータプログラムが、
前記第２のデータセットを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントとを含み、前記第３のコンポーネントの出力が前記第４のコンポーネントに流れ、前記第４のコンポーネントの出力が前記第１のコンポーネントに流れる、請求項１７に記載のシステム。
【請求項１９】
前記第２のコンポーネントの前記出力が、前記第１のデータセットからのデータの前記一部分の前記要約である前記特定のデータセットを含む、請求項１７に記載のシステム。
【請求項２０】
前記第１のデータソースを表す前記第２のコンポーネントが前記命令を送信し、前記第１のシステムが前記コンピュータプログラムを実行する前記第２のシステムにデータを送信させる前に前記命令が遂行される、請求項１７に記載のシステム。
【請求項２１】
前記命令が、前記第２の集約操作に対応するコマンドを含むＳＱＬ文を含む、請求項１４に記載のシステム。
【請求項２２】
前記ＳＱＬクエリに基づいて前記コンピュータプログラムを生成することが、
前記ＳＱＬクエリに基づいてクエリプランを生成することと、
前記第１のデータソースからのデータに適用される前記第２の集約操作を前記クエリプランに追加することと、
前記第２のシステムが前記第２の集約操作を遂行するための機能性を含むと判断することと、
前記第１のデータセットを表す前記クエリプランの一部分に、前記第２の集約操作を遂行するための命令を付加することと、
前記クエリプランに基づいて前記コンピュータプログラムを生成することと、
を含む、請求項１４に記載のシステム。
【請求項２３】
前記第１の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、前記第２の集約操作が前記第１の集約操作と同じタイプの集約操作である、請求項１４に記載のシステム。
【請求項２４】
前記第１の集約操作が平均操作であり、前記第２の集約操作が合計操作及びカウント操作を含む、請求項１４に記載のシステム。
【請求項２５】
前記１つ以上のプロセッサが、前記第１の集約操作に基づいて前記第２の集約操作を決定するために構成される、請求項１４に記載のシステム。
【請求項２６】
第１の集約操作に基づいて前記第２の集約操作を決定することが、
遂行された時に前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、
前記一連の操作から前記第２の集約操作を選択することと、
を含む、請求項２５に記載のシステム。
【請求項２７】
前記第１の和結合型操作が前記第２の和結合型操作と同じタイプのものである、請求項１４に記載のシステム。
【請求項２８】
コンピュータシステムシステムにより実行された時に、ＳＱＬクエリに基づいてコンピュータプログラムを生成するための操作を前記コンピュータシステムに遂行させる実行可能コードを記憶するコンピュータ可読媒体であって、
前記コンピュータプログラムを生成するための操作が、
第１のデータソースに記憶されている第１のデータセットへの参照を含み、前記第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照を含むＳＱＬクエリを受信することと、
前記ＳＱＬクエリが２つ以上のコマンドを含み、前記コマンドが第１の和結合型操作と第１の集約操作とを含むと判断することと、
前記第１の和結合型操作が前記第１のデータセットからのデータの少なくとも一部分に適用され、前記第２のデータセットからのデータの少なくとも一部分に適用されることを前記ＳＱＬクエリが記述していると判断することと、
前記第１の集約操作が前記第１の和結合型操作の結果として得られるデータに適用されることを前記ＳＱＬクエリが記述していると判断することと、
遂行された時に、前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、
前記一連の操作から第２の集約操作を選択することと、
前記ＳＱＬクエリに基づいて、第２のシステムに実行させるために、第１のシステム上でコンピュータプログラムを生成することであって、前記コンピュータプログラムが、
前記第１のデータセットからのデータの一部分について前記第２の集約操作を実行するよう前記第２のシステムに指示する命令を送信し、
前記第１のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第２のシステムから受信し、
前記特定のデータセットと、前記第２のデータセットからのデータの一部分の要約とについて第２の和結合型操作を実行する
ために構成されることと、
を含む、コンピュータ可読媒体。
【請求項２９】
前記第１のシステムがグラフベースの処理システムを含み、前記第２のシステムがリレーショナルデータベース管理システムを含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
前記コンピュータプログラムが、
前記第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令を送信し、
前記第２のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第３のシステムから受信する
ために構成される、請求項２８に記載のコンピュータ可読媒体。
【請求項３１】
前記コンピュータプログラムが、
前記第１のデータセットからのデータの前記一部分の要約と前記第２のデータセットからのデータの前記一部分の要約である前記データセットに適用される前記ＳＱＬクエリの前記和結合型操作を表す第１のコンポーネントであって、前記要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第１のコンポーネントと、
前記第１のデータセットを表す第２のコンポーネントであって、実行された時に前記命令を送信させる第２のコンポーネントと、
を含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３２】
前記コンピュータプログラムが、
前記第２のデータセットを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントとを含み、前記第３のコンポーネントの出力が前記第４のコンポーネントに流れ、前記第４のコンポーネントの出力が前記第１のコンポーネントに流れる、請求項３１に記載のコンピュータ可読媒体。
【請求項３３】
前記第２のコンポーネントの前記出力が、前記第１のデータセットからのデータの前記一部分の前記要約である前記特定のデータセットを含む、請求項３１に記載のコンピュータ可読媒体。
【請求項３４】
前記コンピュータプログラムを生成するための操作が、前記第１のデータソースを表す前記第２のコンポーネントによって前記命令の送信を生じさせ、前記第１のシステムによって、前記コンピュータプログラムを実行する前記第２のシステムにデータを送信される前に前記命令の遂行を生じさせる、請求項３１に記載のコンピュータ可読媒体。
【請求項３５】
前記命令が、前記第２の集約操作に対応するコマンドを含むＳＱＬ文を含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３６】
前記ＳＱＬクエリに基づいて前記コンピュータプログラムを生成することが、
前記ＳＱＬクエリに基づいてクエリプランを生成することと、
前記第１のデータソースからのデータに適用される前記第２の集約操作を前記クエリプランに追加することと、
前記第２のシステムが前記第２の集約操作を遂行するための機能性を含むと判断することと、
前記第１のデータセットを表す前記クエリプランの一部分に、前記第２の集約操作を遂行するための命令を付加することと、
前記クエリプランに基づいて前記コンピュータプログラムを生成することと、
を含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３７】
前記第１の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、前記第２の集約操作が前記第１の集約操作と同じタイプの集約操作である、請求項２８に記載のコンピュータ可読媒体。
【請求項３８】
前記第１の集約操作が平均操作であり、前記第２の集約操作が合計操作及びカウント操作を含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３９】
前記操作が、前記第１の集約操作に基づいて前記第２の集約操作を決定することを含む、請求項２８に記載のコンピュータ可読媒体。
【請求項４０】
第１の集約操作に基づいて前記第２の集約操作を決定することが、
遂行された時に前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、
前記一連の操作から前記第２の集約操作を選択することと、
を含む、請求項３９に記載のコンピュータ可読媒体。
【請求項４１】
前記第１の和結合型操作が前記第２の和結合型操作と同じタイプのものである、請求項２８に記載のコンピュータ可読媒体。
【請求項４２】
ＳＱＬクエリに基づいてコンピュータプログラムを生成するためのシステムであって、
第１のデータソースに記憶されている第１のデータセットへの参照を含み、前記第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照を含むＳＱＬクエリを受信するための手段と、
前記ＳＱＬクエリが２つ以上のコマンドを含み、前記コマンドが第１の和結合型操作と第１の集約操作とを含むと判断するための手段と、
前記第１の和結合型操作が前記第１のデータセットからのデータの少なくとも一部分に適用され、前記第２のデータセットからのデータの少なくとも一部分に適用されることを前記ＳＱＬクエリが記述していると判断するための手段と、
前記第１の集約操作が前記第１の和結合型操作の結果として得られるデータに適用されることを前記ＳＱＬクエリが記述していると判断するための手段と、
遂行された時に、前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定するための手段と、
前記一連の操作から第２の集約操作を選択するための手段と、
前記ＳＱＬクエリに基づいて、第２のシステムに実行させるために、第１のシステム上でコンピュータプログラムを生成するための手段であって、前記コンピュータプログラムが、
前記第１のデータセットからのデータの一部分について前記第２の集約操作を実行するよう前記第２のシステムに指示する命令を送信し、
前記第１のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第２のシステムから受信し、
前記特定のデータセットと、前記第２のデータセットからのデータの一部分の要約とについて第２の和結合型操作を実行する
ために構成される手段と、
を含む、システム。
【請求項４３】
前記第１のシステムがグラフベースの処理システムを含み、前記第２のシステムがリレーショナルデータベース管理システムを含む、請求項４２に記載のシステム。
【請求項４４】
前記コンピュータプログラムが、
前記第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令を送信し、
前記第２のデータセットからのデータの前記一部分の要約である特定のデータセットを前記第３のシステムから受信する
ために構成される、請求項４２に記載のシステム。
【請求項４５】
前記コンピュータプログラムが、
前記第１のデータセットからのデータの前記一部分の要約と前記第２のデータセットからのデータの前記一部分の要約である前記データセットに適用される前記ＳＱＬクエリの前記和結合型操作を表す第１のコンポーネントであって、前記要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第１のコンポーネントと、
前記第１のデータセットを表す第２のコンポーネントであって、実行された時に前記命令を送信させる第２のコンポーネントと、
を含む、請求項４２に記載のシステム。
【請求項４６】
前記コンピュータプログラムが、
前記第２のデータセットを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントとを含み、前記第３のコンポーネントの出力が前記第４のコンポーネントに流れ、前記第４のコンポーネントの出力が前記第１のコンポーネントに流れる、請求項４５に記載のシステム。
【請求項４７】
前記第２のコンポーネントの前記出力が、前記第１のデータセットからのデータの前記一部分の前記要約である前記特定のデータセットを含む、請求項４５に記載のシステム。
【請求項４８】
前記第１のデータソースを表す前記第２のコンポーネントが前記命令を送信し、前記第１のシステムが前記コンピュータプログラムを実行する前記第２のシステムにデータを送信させる前に前記命令が遂行される、請求項４５に記載のシステム。
【請求項４９】
前記命令が、前記第２の集約操作に対応するコマンドを含むＳＱＬ文を含む、請求項４２に記載のシステム。
【請求項５０】
前記ＳＱＬクエリに基づいて前記コンピュータプログラムを生成することが、
前記ＳＱＬクエリに基づいてクエリプランを生成することと、
前記第１のデータソースからのデータに適用される前記第２の集約操作を前記クエリプランに追加することと、
前記第２のシステムが前記第２の集約操作を遂行するための機能性を含むと判断することと、
前記第１のデータセットを表す前記クエリプランの一部分に、前記第２の集約操作を遂行するための命令を付加することと、
前記クエリプランに基づいて前記コンピュータプログラムを生成することと、
を含む、請求項４２に記載のシステム。
【請求項５１】
前記第１の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、前記第２の集約操作が前記第１の集約操作と同じタイプの集約操作である、請求項４２に記載のシステム。
【請求項５２】
前記第１の集約操作が平均操作であり、前記第２の集約操作が合計操作及びカウント操作を含む、請求項４２に記載のシステム。
【請求項５３】
前記第１の集約操作に基づいて前記第２の集約操作を決定する手段を含む、請求項４２に記載のシステム。
【請求項５４】
第１の集約操作に基づいて前記第２の集約操作を決定することが、
遂行された時に前記第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、
前記一連の操作から前記第２の集約操作を選択することと、
を含む、請求項５３に記載のシステム。
【請求項５５】
前記第１の和結合型操作が前記第２の和結合型操作と同じタイプのものである、請求項４２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権主張
本出願は、２０１５年６月２２日に出願された米国特許出願第１４／７４６１８８号に対する優先権を主張するものであり、同出願は２０１４年１１月１４日に出願された米国特許出願第６２／０７９９２２号に対する優先権を主張するものであり、両出願の内容全体が参照により本明細書に取り入れられる。
【０００２】
本明細書は、和結合型操作（ｕｎｉｏｎ−ｔｙｐｅ  ｏｐｅｒａｔｉｏｎ）を含むクエリ（ｑｕｅｒｙ）の処理に関する。
【背景技術】
【０００３】
データソース（ｄａｔａ  ｓｏｕｒｃｅ）に対するクエリはそのデータソースから取り出すべきデータを指定するものである。クエリはデータソース（例えば、データベース）に対して提供することができ、データソースに関連するデータ処理システム（例えば、データベース管理システム）はそのクエリによって指定されたデータを返すことができる。クエリを構文解析して、そのクエリによって指定されたデータソース内のデータを識別するために、様々な技法を使用することができる。
【発明の概要】
【課題を解決するための手段】
【０００４】
態様１は、ＳＱＬクエリに基づいてコンピュータプログラムを生成する方法であって、第１のデータソースに記憶されている第１のデータセットへの参照を含み、第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照を含むＳＱＬクエリを受信することと、ＳＱＬクエリが２つ以上のコマンドを含み、当該コマンドが第１の和結合型操作と第１の集約操作（ａｇｇｒｅｇａｔｉｏｎ  ｏｐｅｒａｔｉｏｎ）とを含むと判断することと、第１の和結合型操作が第１のデータセットからのデータの少なくとも一部分に適用され、第２のデータセットからのデータの少なくとも一部分に適用されることをＳＱＬクエリが記述していると判断することと、第１の集約操作が第１の和結合型操作の結果として得られるデータに適用されることをＳＱＬクエリが記述していると判断することと、ＳＱＬクエリに基づいて第１のシステム上でコンピュータプログラムを生成することであって、当該コンピュータプログラムが、第１のデータセットからのデータの一部分について第２の集約操作を実行するよう第２のシステムに指示する命令を送信し、データの第１の部分の要約である特定のデータセットを第２のシステムから受信し、当該特定のデータセットと、第２のデータセットからのデータの一部分の要約とについて第２の和結合型操作を実行するために構成されることとを含む方法である。
【０００５】
態様２は、当該コンピュータプログラムが、第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令を送信し、データの第２の部分の要約である特定のデータセットを第３のシステムから受信するためにさらに構成される、態様１の方法である。
【０００６】
態様３は、当該コンピュータプログラムが、データの第１の部分の要約とデータの第２の部分の要約であるデータセットに適用されるＳＱＬクエリの和結合型操作を表す第１のコンポーネントであって、当該要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第１のコンポーネントと、第１のデータセットを表す第２のコンポーネントであって、実行された時に当該命令を送信させる第２のコンポーネントとを含む、態様１又は２の方法である。
【０００７】
態様４は、第２のデータセットを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントとを含み、第３のコンポーネントの出力が第４のコンポーネントに流れ、第４のコンポーネントの出力が第１のコンポーネントに流れる、態様３の方法である。
【０００８】
態様５は、第２のコンポーネントの出力が、データの第１の部分の要約である特定のデータセットを含む、態様３又は４の方法である。
【０００９】
態様６は、第１のデータソースを表すコンポーネントが命令を送信し、第１のシステムがコンピュータプログラムを実行するシステムにデータを送信させる前に命令が遂行される、態様３、４、又は５の方法である。
【００１０】
態様７は、命令が、第２の集約操作に対応するコマンドを含むＳＱＬ文を含む、態様１乃至６のいずれかの方法である。
【００１１】
態様８は、ＳＱＬクエリに基づいてコンピュータプログラムを生成することが、ＳＱＬクエリに基づいてクエリプラン（ｑｕｅｒｙ  ｐｌａｎ）を生成することと、第１のデータソースからのデータに適用される第２の集約操作をクエリプランに追加することと、第１のシステムが第２の集約操作を遂行するための機能性を含むと判断することと、第１のデータセットを表すクエリプランの一部分に、第２の集約操作を遂行するための命令を付加することと、クエリプランに基づいてコンピュータプログラムを生成することとを含む、態様１乃至７のいずれかの方法である。
【００１２】
態様９は、第１の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、第２の集約操作が第１の集約操作と同じタイプの集約操作である、態様１乃至８のいずれかの方法である。
【００１３】
態様１０は、第１の集約操作が平均操作であり、第２の集約操作が合計操作又はカウント操作である、態様１乃至９のいずれかの方法である。
【００１４】
態様１１は、第１の集約操作に基づいて第２の集約操作を決定することを含む、態様１乃至１０のいずれかの方法である。
【００１５】
態様１２は、第１の集約操作に基づいて第２の集約操作を決定することが、遂行された時に第１の集約操作の出力と同等の出力を生成する一連の操作を決定することと、当該一連の操作から第２の集約操作を選択することとを含む、態様１１の方法である。
【００１６】
態様１３は、第１の和結合型操作が第２の和結合型操作と同じタイプのものである、態様１乃至１２のいずれかの方法である。
【００１７】
態様１４は、第１のシステムがグラフベースの処理システムを含み、第２のシステムがリレーショナルデータベース管理システムを含む、態様１乃至１３のいずれかの方法である。
【００１８】
これらの諸態様のうちの１つ以上は、単独又は組み合わせて、コンピュータシステムによって実行された時に当該態様の操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶する、システム又は装置としてあるいはコンピュータ可読記憶装置として表すことができる。一例として、コンピュータ可読記憶装置は、コンピュータシステムによって実行された時に第１乃至第１３の態様のうちのいずれか１つによる操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶することができる。もう１つの例として、１つ以上のプロセッサを含むコンピュータシステムは、当該１つ以上のプロセッサによって実行された時に第１乃至第１３の態様のうちのいずれか１つによる操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶するコンピュータ可読記憶装置を含むことができる。
【００１９】
諸態様は以下の利点のうちの１つ以上を含むことができる。データ処理システムは、データソースから転送されるデータの量を削減するために集約操作をプッシュダウンする。クエリに対応するコンピュータプログラムは、例えば、コンポーネントを除去することにより簡略化することができる。
【００２０】
本発明のその他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００２１】
【図１】クエリを処理できるデータ処理システムを示している。
【図２】データ処理システムの諸要素を示している。
【図３】クエリプランを示している。
【図４】クエリプランを示している。
【図５】コンピュータプログラムを示している。
【図６】コンピュータプログラムを示している。
【図７】フローチャートである。
【図８】フローチャートである。
【発明を実施するための形態】
【００２２】
データ処理システムは、クエリ（ＳＱＬクエリなど）をデータフローグラフなどのコンピュータプログラムに変換することができる。データフローグラフは、実行された時にクエリの操作と同等の操作（例えば、データ処理操作）を遂行するコンポーネントを含む。クエリからコンピュータプログラムを生成するシステムは、いくつかの操作がデータソース（例えば、データベースシステム）によって実行できると判断することができる。例えば、コンピュータプログラムの１つのコンポーネントは、そのコンポーネントによって表された１つ以上の操作を実行するようデータソースに指示することにより、データソースに「プッシュダウン」することができ、それによりそのコンポーネントをコンピュータプログラムから削除することができる。例えば、コンピュータプログラムは、データソースで実行された時にその操作を遂行するＳＱＬ文をデータソースに送信することにより、操作を実行するようデータソースに指示することができる。
【００２３】
ＳＱＬクエリ（ＳＱＬ文ともいう）は、構造化照会言語（ＳＱＬ）によって定義されたコマンド及び構文を使用する。一般に、クエリは、そのクエリに示されている１つ以上のデータセット内のデータのサブセットを指定する文である。指定されたサブセットは、そのクエリを処理するシステムによって、そのクエリを発行したシステムに返すことができる。クエリによって指定され、そのクエリに応答して返されるデータは一般に、そのクエリによって示されるデータセット内に記憶されている全データの一部分である。ＳＱＬクエリの一例は、「ＳＥＬＥＣＴ  ｌａｓｔ＿ｎａｍｅ  ＦＲＯＭ  ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」にすることができる。このＳＱＬクエリはＳＥＬＥＣＴという操作を含み、これはＳＥＬＥＣＴ操作の引数に応じてデータを取り出すよう、クエリを実行するシステムに指示するものである。ＳＱＬの構文では、引数は、データベーステーブルなどのデータセットである「ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」及びデータベーステーブルの列である「ｌａｓｔ＿ｎａｍｅ」である。システムがクエリを解釈し、クエリの操作を実行すると、システムはクエリに応答してｌａｓｔ＿ｎａｍｅ列のデータ（例えば、ｌａｓｔ＿ａｍｅ列に含まれるデータの各部分）を返すことになる。ＳＱＬについては、２００８年４月７日に出版されたＡｌｅｘ  Ｋｒｉｅｇｅｌ及びＢｏｒｉｓ  Ｔｒｕｋｈｎｏｖによる「ＳＱＬ  Ｂｉｂｌｅ，  ２ｎｄ  Ｅｄｉｔｉｏｎ」（ＩＳＢＮ  ９７８−０４７０２２９０６４）に詳細に記載されており、同書は参照により本明細書に取り入れられる。
【００２４】
時には、クエリは、２つ以上のデータソースからのレコードの組み合わせについて実行される操作を含むことができる。例えば、クエリは和結合型操作を含むことができる。和結合型操作は、２つ以上のデータソースからのレコードを含むデータセットを生成し、そのデータセットを出力として提供する。言い換えれば、和結合型操作は、２つ以上のソースからのデータを単一のデータセットに結合する。「ｕｎｉｏｎ」という用語（例えば、ＳＱＬにおけるＵＮＩＯＮコマンド）は典型的に、その出力を提供する前に両方のデータソースにおいて重複するデータ要素を除去する和結合型操作を指し、「ｕｎｉｏｎ  ａｌｌ」（例えば、ＳＱＬにおけるＵＮＩＯＮ  ＡＬＬコマンド）は典型的に、その出力を提供する前に両方のデータソースにおいて重複するデータ要素を除去しない和結合型操作を指す。例えば、２つのデータセットのそれぞれが電話番号を含み、両方のデータセットが「５５５−１２１２」という電話番号を表すデータ要素を含む場合、「ｕｎｉｏｎ」操作は電話番号「５５５−１２１２」を表す１つのデータ要素のみを出力し、「ｕｎｉｏｎ  ａｌｌ」操作は電話番号「５５５−１２１２」を表す２つのデータ要素を出力することになる。
【００２５】
クエリは、和結合型操作の後に集約操作（例えば、ＳＵＭ、ＣＯＵＮＴ、ＡＶＧ、ＭＩＮ、又はＭＡＸなどの操作）も含むことができる。集約操作は、時には集合関数又は要約操作と呼ばれ、出力データが典型的に入力データよりかなり小さいサイズになるように入力データを要約する出力データを提供する。クエリが和結合型操作の後に集約操作を含む場合、集約操作を遂行するためにデータソースから受信したデータの要約のみが必要になるので、コンピュータプログラムを生成するシステムは和結合型操作の前に集約操作を置くことができる。さらに、和結合型操作の前に置かれた集約操作は、データソースのいずれか又は全部が集約操作を本来サポートするものと判断された場合、それぞれの関連データソース内にプッシュダウンすることができる。コンピュータプログラムは、そうでなければデータソースのうちのいくつか又は全部から受信されると思われるデータの要約のみを受信するので、これは典型的にデータソースから転送されるデータの量を削減する。
【００２６】
実世界の一例として、電話会社は６０日間遡って通話の記録を記憶する場合がある。この会社は、最後の７日間の通話記録を含むデータストアと、残りの５３日間の記録を含むもう１つのデータストアを有する可能性がある。６０日間すべての記録について実行されたクエリは和結合型操作を含む可能性があり、集約操作は一方又は両方のデータストアにプッシュダウンすることができる。さらに、最後の７日間の通話記録を含むデータストアはリレーショナルデータベースにすることができ、残りの５３日間の記録を含むデータストアはリレーショナルデータベース以外のタイプのデータストア、例えばフラットファイルにすることができる。集約操作は、依然として最後の７日間の通話記録を含むリレーショナルデータベースにプッシュダウンすることができる。
【００２７】
図１は、クエリ１０２を処理して、クエリ１０２によって指定された結果１０４を生成することができるデータ処理システム１００を示している。結果１０４は、クエリ１０２によって参照されるデータソース１１０、１２０から受信したデータ１０６に基づくものである。データ処理システム１００は、クエリ１０２に基づいてデータ処理システム１００が生成する命令１１４、１２４に応答してデータ１０６を受信する。
【００２８】
クエリ１０２は、そのクエリによって指定されたものと判断されたデータを取り出すために使用される。
【００２９】
１つのタイプのクエリ１０２は構造化照会言語（ＳＱＬ）クエリである。ＳＱＬクエリ（ＳＱＬ文ともいう）は、構造化照会言語によって定義されたコマンド及び構文を使用する。クエリに応答してデータを返すリソースの典型的な一例はリレーショナルデータベースである。リレーショナルデータベースは、１つ以上のデータベーステーブルと、ＳＱＬクエリの解釈、テーブルからのデータの読み取り、テーブルへのデータの書き込み、その他の種類のデータ処理機能の実行などのデータ処理操作を管理するシステムとの集合である。データベーステーブルは、ａ）それぞれが１つのレコードを表す行と、ｂ）それぞれが行内に記憶されているデータのカテゴリを表す列とに配置されたデータの集合である。例えば、「ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」というデータベーステーブルは、それぞれがある事業の現在の顧客を表す行を有することができ、顧客の名前、顧客の住所、顧客が最後に購入した製品などのデータのカテゴリを表す列を有することができる。
【００３０】
データソース１１０、１２０はデータ処理システム１００の外部にある。データ処理システム１００の外部ということは、そのリソースがデータ処理システム１００のコンポーネントの１つではないことを意味する。（データ処理システム１００のいくつかのコンポーネントは図２に詳細に示されている。）例えば、データソース１１０、１２０は、ネットワーク（例えば、インターネット）を使用して通信する設備にすることができる。データ処理システム１００は、ネットワークにデータを送信し、ネットワークからデータを受信することにより、データソース１１０、１２０と通信する。
【００３１】
同図に示されているように、データ処理システム１００は、複数のデータソース１１０、１２０への参照１０１、１０３を含むクエリ１０２を受信することができる。データソース１１０、１２０はそれぞれ、１つ以上のデータセットを含む。例えば、データソース１１０、１２０は、記憶媒体、例えば、有形で非一時的なコンピュータ可読媒体上に記憶されているデータベーステーブル、データファイル、又はその他のデータ構造などのデータセットを含むことができる。
【００３２】
さらに、データソースは典型的に、そのデータソースに関連するシステムによって管理される。例えば、データソースがデータベーステーブル（又はデータベーステーブルの集合）を含むリレーショナルデータベースである場合、そのリレーショナルデータベースはリレーショナルデータベース管理システム（ＲＤＢＭＳ）によって管理することができる。参照１０１、１０３はデータソースを識別する任意の情報にすることができる。いくつかの例では、参照１０１、１０３はデータソース１１０、１２０の英数字「名」である。
【００３３】
リレーショナルデータベース管理システム（ＲＤＢＭＳ）は、リレーショナルデータベースに記憶されているデータの作成及び修正に向けられた命令を処理するシステムである。ＲＤＢＭＳは、クエリを解釈し、クエリによって指定されたデータを返すための機能性を含む。クエリを解釈することと、クエリによって指定されたデータを返すことの組み合わせは、時にはクエリを実行することと呼ばれる。例えば、いくつかのＲＤＢＭＳ実施形態は、ａ）ＳＱＬクエリを構文解析し、ｂ）構造化照会言語によって定義された操作を識別し、ｃ）コマンドの引数を識別し、ｄ）引数に応じて操作を遂行する（例えば、実行する）エンジンを含む。
【００３４】
上記のように、ＳＱＬクエリ「ＳＥＬＥＣＴ  ｌａｓｔ＿ｎａｍｅ  ＦＲＯＭ  ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」は操作ＳＥＬＥＣＴを含み、これはＳＥＬＥＣＴ操作の引数に応じてデータを取り出すようＲＤＢＭＳに指示する。引数は、ＲＤＢＭＳによって管理されるデータベーステーブルである「ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」及びデータベーステーブルの列である「ｌａｓｔ＿ｎａｍｅ」である。ＲＤＢＭＳがクエリを解釈し、クエリの操作を実行すると、ＲＤＢＭＳはクエリに応答してｌａｓｔ＿ｎａｍｅ列のデータ（例えば、ｌａｓｔ＿ｎａｍｅ列に含まれるデータの各部分）を返すことになる。
【００３５】
データ処理システム１００は、クエリ１０２に基づいてコンピュータプログラム１０８（時にはデータ処理プログラムという）を生成する。例えば、コンピュータプログラム１０８は、クエリを入力として取り、データフローグラフを出力として生成するエンジン（例えば、データ処理システム１００のサブシステムを形成するエンジン）を使用して生成することができる。ここでは一例としてデータフローグラフを使用するが、コンピュータプログラムは、プログラムコードによって表される命令を遂行するために実行できるプログラムコードを含む任意の種類のプログラムにすることができる。
【００３６】
このようにして、図１に示されているコンピュータプログラム１０８などのコンピュータプログラムは、実行された時に、例えばＲＤＢＭＳなどのデータベース管理システムにより、対応するクエリ１０２の実行と同じ出力を生成することができる。従って、クエリ１０２は、ＳＱＬなどの照会言語を使用して作成することができる。しかしながら、対応するデータ処理操作を遂行するシステム、例えばデータ処理システム１００のサブシステムは、クエリ１０２を実行したが、コンピュータプログラム１０８を実行しなかったシステム（例えば、ＲＤＢＭＳ）によって実行されると思われる操作と同等の操作を実行するために、コンピュータプログラム１０８を実行することができる。２つの操作が同等であるという場合、同じ入力データを提供された時に２つの操作が実質的に同じ出力データを生成することを意味する。一例として、２つの操作は、同じ入力データを提供された時に正確に同じ出力データを生成する可能性がある。一例として、同じ入力データを提供された２つの操作はデータフォーマットのみが異なる出力データを生成する可能性があり、例えば、１つの操作はコンマで区切られた出力データを生成する可能性があり、同等の操作は、それ以外はコンマで区切られた出力データと同一である、タブで区切られた出力データを生成する可能性がある。
【００３７】
いくつかの例では、クエリ１０２の操作のうちのいくつかはコンピュータプログラム１０８によって遂行することができ、クエリ１０２の操作のうちのいくつかはデータソース１１０、１２０にプッシュダウンすることができる。これにより、データ処理システム１００は、データソース１１０、１２０を管理するシステム１１２、１２２のうちの１つ以上によって実行できるクエリ１０２内の操作を識別することを意味する。次に、データ処理システム１００は、システム１１２、１２２によって実行された時に、データ処理システム１００によって識別された操作と同等の操作をシステム１１２、１２２に実行させる命令１１４、１２４を生成することができる。コンピュータプログラム１０８は、コンピュータプログラム１０８が実行された時に命令１１４、１２４をシステム１１２、１２２に送信するように構成することができる。命令１１４、１２４は、システム１１２、１２２によって実行できる任意のフォーマットの命令にすることができる。
【００３８】
いくつかの例では、データソース１１０、１２０のそれぞれの能力は、データソース１１０、１２０の既知の特徴に基づいてデータ処理システム１００に知られている。例えば、データ処理システム１００がＳＱＬ文を使用してデータソース１１０のうちの１つと通信する場合、データソース１１０がＳＱＬ文を処理できることはデータ処理システム１００にすでに知られている。この情報により、データ処理システム１００は、ＳＱＬ文として表し、従って、データソース１１０にプッシュダウンすることができるその他の操作を識別することができる。
【００３９】
いくつかの例では、プッシュダウンされる操作は集約操作１０５である。集約操作１０５はデータを取り入れて、データの要約を生成するので、集約操作１０５は典型的にその入力データに比べて少量の出力データを生成する。この理由で、一般に、データソース１１０、１２０を管理するシステム１１２、１２２によって、集約操作１０５に対応する操作を遂行することはより効率的である。このようにして、データ処理システム１００はデータソース１１０、１２０のそれぞれから要約データ１１６、１２６を受信するだけである。要約データ１１６、１２６は典型的に、集約操作１０５に対応する操作がデータ処理システム１００上で実行しているコンピュータプログラム１０８によって実行された場合にデータソース１１０、１２０から転送されると思われるデータ１０６より少量のデータになる。さらに、集約操作は一般にＳＱＬ文又はＳＱＬ文の一部分として表すことができ、従って、これはＳＱＬ文を処理できるシステム（例えば、ＲＤＢＭＳ）にプッシュダウンすることができる操作の一例である。このようにして、それぞれのデータソース１１０、１２０から返されるデータ１０６は、データの一部分（例えば、クエリ１０２によって指定されるようにデータベーステーブルの一部分又はデータのその他の本体の一部分）そのものではなく、それぞれのデータソースに記憶されているデータの一部分の要約になる。
【００４０】
集約操作１０５は、和結合型操作がクエリ１０２内の集約操作１０５に先行する場合でもプッシュダウンすることができ、これについては図３及び図４に詳細に示されている。
【００４１】
図２は、クエリ１０２を解釈し、クエリ１０２に対応するコンピュータプログラム１０８を生成するために使用できるデータ処理システム１００の諸要素を示している。
【００４２】
クエリ１０２は、クエリ１０２に対応するクエリプラン１３２を生成するクエリプランナ（ｑｕｅｒｙ  ｐｌａｎｎｅｒ）１３０によって受信される。例えば、データ処理システム１００はクエリプランナ１３０にクエリ１０２を提供することができる。クエリプランは、クエリが実行される場合に実行できる操作（例えば、データ処理操作）の記述である。例えば、この操作は、例えばデータベース管理システムによって遂行されるデータベース操作である可能性がある。また、この操作は他の形を取ることもできる。データベース操作は時にはデータベース機能又はデータベースタスクともいう。
【００４３】
クエリプランは、その他の配置の操作又は異なるセットの操作が同じ結果を達成すると思われる場合でも、１つの可能な配置の操作について記述する可能性がある。クエリプランナは、クエリに関する情報及びクエリによって使用されるデータソースに関する情報に基づいてクエリプランを生成できるシステムである。
【００４４】
いくつかの配置では、操作は、依然として同等の出力を提供しながら、様々な順序で実行することができる。このため、クエリプランナは、最適クエリプランを決定する機能性を有することができる。例えば、最適クエリプランは、最小量の時間でクエリを実行するため、データ記憶空間などの最小量のデータベースリソースを使用するため、又はそれ以外にデータベースシステムによって識別された制約の範囲内でクエリを達成するための操作の配置を記述するクエリプランにすることができる。最適クエリプランを決定するためのクエリプランナの機能性は、多くの可能なクエリプランにスコア又はランクを付ける機能性を含むことができ、最適又は効率的な構成になるように可能なクエリプランを再配置する機能性も含むことができる。
【００４５】
単一クエリは複数回実行することができ、それぞれの実行は固有の最適クエリプランを有することができる。例えば、データベーステーブル内のデータは１つのクエリを２回実行する間に変化する可能性がある。この例では、クエリの１回目の実行のために生成されたクエリプランに記載されている操作は、そのクエリの２回目の実行中に、１回目の実行中より長いか又は短い実行時間を必要とする可能性がある。この場合、例えば、同じ操作を異なる配置にするか又は異なる操作の配置にするなど、異なる操作配置にする方がクエリの２回目の実行により適している可能性がある。クエリの２回目の実行のために最適化されたクエリプランは、データベーステーブルの瞬間的な状態を考慮に入れて、その実行のために生成することができる。
【００４６】
クエリプラン１３２はコンピュータプログラム生成エンジン１４０によって受信される。コンピュータプログラム生成エンジン１４０は、実行された時に、クエリ１０２に対応する操作を遂行するコンピュータプログラム１０８を生成する。例えば、クエリ１０２は、構造化照会言語によって定義された１つ以上の操作と、その操作に関連する引数とを含む。この例では、コンピュータプログラム１０８は、ＳＱＬクエリの操作と同等の実行可能機能性を含み、コンピュータプログラム１０８が実行されると、コンピュータプログラム１０８は同じ引数に基づいて実行される。
【００４７】
コンピュータプログラム生成エンジン１４０は、クエリプラン１３２を分析し、コンピュータプログラム１０８が生成される前にクエリプラン１３２によって表される操作を変更しなければならないかどうかを判断する。コンピュータプログラム１０８はクエリプラン１３２に基づいて生成されるので、コンピュータプログラム生成エンジン１４０は、分析の結果を使用して、コンピュータプログラム１０８の生成に移行する前にクエリプラン１３２を修正することができる。例えば、クエリプラン１３２は集約操作が後に続く和結合型操作を含むことができる。そうである場合、コンピュータプログラム生成エンジン１４０は、和結合型操作の前に集約操作を置くようにクエリプラン１３２を修正することができる。これは、図３及び図４にさらに詳細に示されている。
【００４８】
コンピュータプログラム生成エンジン１４０がコンピュータプログラムを生成する場合、集約操作はデータソースから直接受信したデータについて実行されるので（例えば、そのデータは集約操作の前にいかなる操作も受けない）、コンピュータプログラム生成エンジン１４０はデータソースへのプッシュダウンのための候補として集約操作を識別することができる。次に、コンピュータプログラム生成エンジン１４０は、データソース１１０、１２０を管理するシステム１１２、１２２のいずれか一方又は両方が集約操作と同等の操作を実行できるかどうかを判断することができる。第１のシステム１１２が集約操作と同等の操作を実行できる場合、コンピュータプログラム生成エンジン１４０は、集約操作と同等の操作を実行し、要約データをコンピュータプログラムに返すよう第１のシステム１１２に指示する命令１１４を第１のシステム１１２に送信するようにコンピュータプログラム１０８を構成する。第２のシステム１２２が集約操作と同等の操作を実行できる場合、コンピュータプログラム生成エンジン１４０は、集約操作と同等の操作を実行し、要約データをコンピュータプログラムに返すよう第２のシステム１２２に指示する命令１２４を第２のシステム１２２に送信するようにコンピュータプログラム１０８を構成する。
【００４９】
いくつかの実施形態では、コンピュータプログラム１０８はデータフローグラフ１４２を含む。データフローグラフは、入力データについて実行すべき操作を表すコンポーネントと、データの流れを表すコンポーネント間のリンク（時にはノードと呼ばれる）とを含むコンピュータプログラムである。コンポーネントによって表される操作は、入力データを処理することにより、入力データに基づいた出力データを生成する。コンポーネントは、そのコンポーネントが他のコンポーネントにリンクされている場合、他のコンポーネントに入力データを提供し、他のコンポーネントから出力データを受信することができ、２つのコンポーネント間のそれぞれのリンクは一方のコンポーネントからもう一方のコンポーネントへのデータの流れを表す。グラフのコンポーネントのサブセット（例えば、グラフの１つ以上のコンポーネント）は時にはグラフのサブグラフという。データフローグラフがグラフベースの処理システムによって実行される場合、コンポーネントのそれぞれが実行され、例えば、コンピュータプログラム又はコンピュータプログラムの一部分が実行され、そのコンポーネントによって表される操作を遂行する。実行中に、データフローグラフは、出力データを生成するために処理される（例えば、データフローグラフのコンポーネントの操作によって操作される）入力データを受信する。いくつかの例では、データフローグラフのいくつか又はすべてのコンポーネントはそれぞれ、そのコンポーネントに関連する操作を実行するために実行可能プログラムコードを呼び出すための情報に関連付けられる。例えば、あるコンポーネントは、そのコンポーネントに関連する操作を遂行するための、例えば、データを処理して出力するためのコンピュータで実行可能な命令を含むコンピュータ可読記憶域に記憶されているコンピュータプログラムへの参照に関連付けることができる。いくつかの例では、データフローグラフのいくつか又はすべてのコンポーネントはそれぞれ、データをプログラムコードにとって使用可能な状態にするための情報に関連付けられる。例えば、あるコンポーネントは、そのコンポーネントに関連する実行可能プログラムにデータを引き渡すために呼び出すことができる関数呼び出しに関連付けることができるか、そのコンポーネントに関連する実行可能プログラムに引き渡されるデータを受信できるネットワークポートに関連付けることができるか、あるいはそのコンポーネントに関連する実行可能プログラムにデータを引き渡すための他の技法に関連付けることができる。このようにして、それぞれのコンポーネントはデータを受信し、処理し、出力することができる。
【００５０】
グラフベースのシステムの一例は、「Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ」という名称の米国特許出願公報第２００７／００１１６６８号に詳細に記載されており、同出願は参照により本明細書に取り入れられる。グラフベースの計算を実行するためのシステムは、「Ｅｘｅｃｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎｓ  Ｅｘｐｒｅｓｓｅｄ  ａｓ  Ｇｒａｐｈｓ」という名称の米国特許第５９６６０７２号に記載されており、同特許は参照により本明細書に取り入れられる。さらに、データフローグラフのコンポーネントはクエリ１０２の操作の代わりに使用することができる。この代用による技法は、「Ｍａｎａｇｉｎｇ  Ｄａｔａ  Ｑｕｅｒｉｅｓ」という名称の米国特許出願公報第２０１１／０１７９０１４Ａ１号及び同じく「Ｍａｎａｇｉｎｇ  Ｄａｔａ  Ｑｕｅｒｉｅｓ」という名称の米国特許出願公報第２０１２／０２８４２５５Ａ１号にさらに記載されており、これらの出願は参照により本明細書に取り入れられる。いくつかの実施形態では、データフローグラフはクエリ１０２から生成することができる。
【００５１】
いくつかの実施形態では、コンピュータプログラム１０８はパラメータで構成することができる。例えば、パラメータは、プログラムの挙動を変更するように変更可能な値にすることができる。特定の例として、パラメータは「ファイル名」にすることができ、そのパラメータの値はファイルシステム内のファイルの位置にすることができる。パラメータの値は、異なるファイルにアクセスするようにプログラムを構成するために、異なるファイルの位置に変更することができる。同じプログラムの２つのインスタンスは異なるパラメータ値で構成することができ、その値は同じプログラムの２つのインスタンスの挙動を変更することになる。
【００５２】
実行エンジン１５０はコンピュータプログラム１０８を受信する。次に、実行エンジン１５０はコンピュータプログラム１０８を実行し、例えば、コンピュータプログラム１０８に関連するプログラムコードによって指定された命令を遂行する。実行された時にコンピュータプログラム１０８は、命令１１４、１２４を生成し、データソース１１０、１２０を管理するシステム１１２、１２２にその命令１１４、１２４を送信する。
【００５３】
いくつかの実施形態では、例えば、コンピュータプログラム１０８がデータフローグラフである場合、実行エンジン１５０は、時にはグラフオペレーティングシステムと呼ばれる専用オペレーティングシステムを含む。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎となる操作を実行できるコンピュータプログラムである。例えば、データフローグラフのあるコンポーネントがデータ処理システムによって遂行すべき操作を表す場合、グラフオペレーティングシステムは、その操作を遂行するようデータ処理システムに指示することが課せられる。
【００５４】
データソース１１０、１２０を管理するシステム１１２、１２２に命令１１４、１２４を送信した後、コンピュータプログラム１０８はデータソース１１０、１２０から要約データ１１６、１２６を受信する。次に、実行エンジン１５０はコンピュータプログラム１０８の実行時に要約データ１１６、１２６を使用して、クエリ１０２の結果１０４を生成する。このようにして、データ処理システム１００は、クエリ１０２を実行し、そのクエリによって指定された結果１０４を生成することができる。
【００５５】
図３は、ＳＱＬで作成されたクエリ２００と、そのクエリを表すクエリプラン２１０の図表現を示している。例えば、クエリ２００は図１及び図２に示されているクエリ１０２の一例にすることができ、クエリプラン２１０は図２に示されているクエリプラン１３２の一例にすることができる。クエリ２００は、「Ｂｏｓｔｏｎ」及び「Ｎｅｗ  Ｙｏｒｋ」という２つのデータソース（例えば、リレーショナルデータベーステーブル）内で見つかった「ｐｒｉｃｅ」という列の最大値を計算するために使用される。２つのデータソースはクエリ２００内の引数２０２、２０４によって識別される。また、クエリ２００は実行すべき「ＧＲＯＵＰ  ＢＹ  ｈｏｔｅｌ＿ｃｈａｉｎ」という操作も要求し、この操作は、出力の列のうちの１つ、即ちここではｈｏｔｅｌ＿ｃｈａｉｎ列に応じて出力のデータをグループ分けする。実世界の一例として、このクエリは、ボストンのホテルのデータベースとニューヨークのホテルのデータベースの両方に記録されているホテルの客室の最高価格（「最大値」）を求めるために使用することができる。このクエリが実行されると、２つのデータソースからのデータが合体（例えば、結合）され、ホテルチェーンでグループ分けされる。次に、それぞれのホテルチェーンごとにホテルの客室の最高価格が識別され、返される。
【００５６】
クエリプラン２１０は２つのデータソース２１２、２１４の識別を含み、そのそれぞれは和結合型操作２１６によって結合されるデータを提供する。例えば、和結合型操作２１６は、ＳＱＬクエリ２００に指定されている操作次第で、「ｕｎｉｏｎ」又は「ｕｎｉｏｎ  ａｌｌ」と同等なものにすることができる。ここでは、「ｕｎｉｏｎ」操作（例えば、ＵＮＩＯＮコマンド）がＳＱＬクエリ２００に指定されている。
【００５７】
和結合型操作２１６の出力はＧＲＯＵＰ  ＢＹ操作２１７に提供され、そこで、例えばｈｏｔｅｌ＿ｃｈａｉｎ列でデータをグループ分けすることによってデータが処理される。処理されたデータはロールアップ操作２１８に渡され、そこで入力データの最大値が決定される。この最大値がクエリ２００の結果になる。
【００５８】
図４は、もう１つのバージョンのクエリプラン２１０ａを示している。このバージョンのクエリプラン２１０ａは、例えば図２に示されているコンピュータプログラム生成エンジン１４０によって修正されている。（いくつかの例では、この修正は、クエリプラン１３２が生成エンジン１４０に提供される前にクエリプランナ１３０で実行される。）このバージョンのクエリプラン２１０ａでは、ロールアップ操作２１８ａは第１のデータソース２１２と和結合型操作２１６との間に置かれ、もう１つのロールアップ操作２１８ｂは第２のデータソース２１４と和結合型操作２１６との間に置かれている。クエリプラン２１０ａのこの配置は、図３に示されている配置のクエリプラン２１０と同じ出力を生成する。さらに、データソース２１２、２１４のいずれか一方がロールアップ操作２１８ａ、２１８ｂと同等の操作を遂行できる場合、それぞれのロールアップ操作２１８ａ、２１８ｂは対応するデータソース２１２、２１４にプッシュダウンすることができる。
【００５９】
このバージョンのクエリプラン２１０ａは、和結合型操作の後に追加のロールアップ操作２１９を含む。ロールアップ操作２１８ａ、２１８ｂはそれぞれ「最大値」（最大値）操作を表すので、和結合型操作の出力の最大値は、和結合型操作によって出力される２つの値（例えば、ロールアップ操作２１８ａ、２１８ｂによって返される２つの値）の間の最大値を識別するように決定しなければならない。従って、ロールアップ操作２１８が図３に示されている和結合型操作２１６及びＧＲＯＵＰ  ＢＹ操作２１７の出力について操作するように、ロールアップ操作２１９は和結合型操作２１６及びＧＲＯＵＰ  ＢＹ操作２１７の出力について操作する。しかしながら、図４に示されているこのロールアップ操作２１９は、図３に示されているこの位置のロールアップ操作２１８と比べて非常に少量のデータを操作する。
【００６０】
図４に示されているクエリプラン２１０ａは、集約操作の特性に基づいて生成することができる。例えば、ＭＩＮ（最小データ値）、ＭＡＸ（最大データ値）、ＳＵＭ（データ値の合計）、ＣＯＵＮＴ（レコード数）、及びＡＶＧ（データ値の平均）を含む、集約操作のいくつかの特性は以下の通りである。これらの特性のそれぞれは、集約操作を含む式及び順番に実行される複数の集約操作を含む同等の式を表す。これらの特性のうちのいくつかは、分配特性の適用を含み、関数ｆの場合、式ｆ（Ｘ，Ｙ）は式ｆ（ｆ（Ｘ），ｆ（Ｙ））と同等である。一般に、集約操作はこれらの特性に応じて一連の集約操作に変換することができ、次にその一連の操作のうちのいくつかはデータソースを管理するシステムに「プッシュダウン」することができる。
【００６１】
特性１：  ＡＧＧ（Ｘ  ＵＮＩＯＮ  ＡＬＬ  Ｙ）＝ＡＧＧ（ＡＧＧ（Ｘ）  ＵＮＩＯＮ  ＡＬＬ  ＡＧＧ（Ｙ））  ［ここで、ＡＧＧはＭＩＮ、ＭＡＸ、又はＳＵＭのうちの１つである］
特性２：  ＣＯＵＮＴ（Ｘ  ＵＮＩＯＮ  ＡＬＬ  Ｙ）＝ＳＵＭ（ＣＯＵＮＴ（Ｘ）  ＵＮＩＯＮ  ＡＬＬ  ＣＯＵＮＴ  （Ｙ））
特性３：  ＡＶＧ（Ｘ  ＵＮＩＯＮ  ＡＬＬ  Ｙ）＝ＳＵＭ（Ｘ  ＵＮＩＯＮ  ＡＬＬ  Ｙ）／ＣＯＵＮＴ（Ｘ  ＵＮＩＯＮ  ＡＬＬ  Ｙ）＝ＳＵＭ（ＳＵＭ（Ｘ）  ＵＮＩＯＮ  ＡＬＬ  ＳＵＭ（Ｙ））／ＳＵＭ（ＣＯＵＮＴ（Ｘ）  ＵＮＩＯＮ  ＡＬＬ  ＣＯＵＮＴ（Ｙ））
特性４：  ＡＧＧ（Ｘ  ＵＮＩＯＮ  Ｙ）＝ＡＧＧ（ＡＧＧ（Ｘ）  ＵＮＩＯＮ  ＡＧＧ（Ｙ））  ［ここで、ＡＧＧはＭＩＮ又はＭＡＸのうちの１つである］
【００６２】
以下の擬似コードは、それぞれが和結合型操作に続く１つ以上の集約操作をプッシュダウンするためにクエリプランを修正するための技法を表している。
【００６３】
有効範囲及びサブクエリの範囲テーブルを備えたクエリプランが与えられ、それぞれのサブクエリがターゲット入力式のターゲットリストを定義する場合：
クエリプラン内のそれぞれのサブクエリを最上位からトラバースする。
それぞれのサブクエリについて、以下のチェック及び変形を実行する：
クエリが空でない和結合パラメータを備えたサブクエリタイプの範囲テーブルを１つだけ有するかどうかをチェックする。そうではない場合、次のサブクエリに進む。
クエリターゲットリスト内のそれぞれのターゲット入力について：
ターゲット入力が集約コマンドを有するかどうかをチェックする。そうではない場合、次のターゲット入力に進む。
（ＳＵＭ，ＣＯＵＮＴ，ＡＶＧ）及びＵＮＩＯＮ  ＡＬＬ内の集約コマンド）又は（ＭＩＮ，ＭＡＸ）及びＵＮＩＯＮ内の集約コマンド）かどうかをチェックする。そうではない場合、次のサブクエリに進む。
クエリ範囲テーブル内のサブクエリを変形する。
サブクエリ内のそれぞれの範囲テーブルについて：
新しいサブクエリを作成し、範囲テーブルを新しいサブクエリの範囲テーブルリストにコピーする。
クエリターゲットリスト及びグループ句を新しいサブクエリのターゲットリスト及びグループ句にコピーする。
ターゲットリストがＡＶＧ関数を有するかどうかをチェックする。そうである場合、それぞれのＡＶＧ（）関数に関するＳＵＭ（）関数及びＣＯＵＮＴ（）関数をターゲットリストに追加する。
範囲テーブルを新しいサブクエリで置換する。
クエリターゲットリスト内のそれぞれのターゲット入力について：
ターゲットリストがＡＶＧ関数を有するかどうかをチェックする。それぞれのＡＶＧ（）関数を、対応する新たに形成されたＳＵＭ（）／ＣＯＵＮＴ（）で置換する。
【００６４】
図５は、クエリプラン２１０ａから生成されたコンピュータプログラム３００を示している。このコンピュータプログラム３００は、図１及び図２に示されているコンピュータプログラム１０８の一例にすることができる。このコンピュータプログラム３００は、データの流れを表すリンクによって接続されたコンポーネントを含むデータフローグラフであり、同じく図２に示されているデータフローグラフ１３２の一例にすることができる。
【００６５】
コンピュータプログラム３００は、実行可能コード（例えば、１つ以上の実行可能操作）を表すコンポーネントを有する。コンピュータプログラム３００は、第１のデータソース２１２の出力データを表すコンポーネント３０２と、第２のデータソース２１４の出力データを表すコンポーネント３０４とを有する。２つのコンポーネント３０２、３０４は、和結合型操作２１６を表すコンポーネント３０６にリンクされる。いくつかの実施形態では、コンポーネント３０６は、複数のコンポーネントの組み合わせ、例えばサブグラフにすることができる。このコンポーネント３０６は、ロールアップ操作２１９及びＧＲＯＵＰ  ＢＹ操作２１７を一緒に表すコンポーネント３０８にリンクされる。コンピュータプログラム３００が実行されると、コンピュータプログラム３００の出力は、図３に示されているＳＱＬで作成されたクエリ２００を実行するシステムの出力と同等である。
【００６６】
データソースの出力データを表すコンポーネント３０２、３０４のそれぞれは、それぞれの対応するデータソースに命令を送信するように構成されている。例えば、ボストンデータソース２１２の出力データを表すコンポーネント３０２は、ボストンデータソース２１２を管理するシステム（例えば、ボストンデータソース２１２に記憶されているデータセットを管理するシステム）に送信された時に、図４に示されているロールアップ操作２１８ａによって表される要約操作と同等の操作を実行する命令で構成されている。この操作は、いずれかのデータがコンピュータプログラム３００によって受信される前に遂行される。いくつかの実施形態では、コンポーネント３０２は、ボストンデータソース２１２を管理するシステムにＳＱＬクエリを送信することができる。ここでは、ＳＱＬクエリは、ボストンデータソース２１２に記憶されているデータベーステーブルの「ｐｒｉｃｅ」列の最大値を指定することができる。命令は、例えば、「ＳＥＬＥＣＴ  ｍａｘ（ｐｒｉｃｅ），  ｈｏｔｅｌ＿ｃｈａｉｎ  ＦＲＯＭ  Ｂｏｓｔｏｎ  ＧＲＯＵＰ  ＢＹ  ｈｏｔｅｌ＿ｃｈａｉｎ」というＳＱＬ文にすることができる。このようにして、ロールアップ操作２１８ａはボストンデータソース２１２にプッシュダウンされている。
【００６７】
この例では、ボストンデータソース２１２及びニューヨークデータソース２１４の両方に集約操作がプッシュダウンされている。従って、ボストンデータソース２１２及びニューヨークデータソース２１４を管理するシステムは、集約操作と同等の操作を実行できるものと判断されている。いくつかの実施形態では、この判断は図２に示されているコンピュータプログラム生成エンジン１４０によって行われ、コンピュータプログラム生成エンジン１４０はコンピュータプログラム３００を生成する時にこの判断を使用する。いくつかの実施形態では、この判断は図２に示されているクエリプランナ１３０によって行われ、クエリプラン１３２は集約操作のプッシュダウンを取り入れるようにクエリプランナ１３０によって修正される。これらの実施形態では、コンピュータプログラム生成エンジン１４０は、クエリプラン１３２からコンピュータプログラム３００を生成することができ、クエリプラン１３２で識別されたデータソースを管理するシステムの能力を評価する必要はない。
【００６８】
いくつかの例では、データソースのうちの少なくとも１つは集約操作と同等の操作を実行できない可能性がある。図６は、クエリプラン２１０ａから生成されたコンピュータプログラム３００ａの一例を示している。この例では、ボストンデータソース２１２を管理するシステムは集約操作と同等の操作を実行できるものと判断されている。しかしながら、ニューヨークデータソース２１４を管理するシステムは集約操作と同等の操作を実行できないものと判断されている。従って、このコンピュータプログラム３００ａでは、ニューヨークデータソース２１４の出力を表すコンポーネント３０４は、和結合型操作を表すコンポーネント３０６にリンクされたロールアップコンポーネント３０５にリンクされる。ここでは、ＭＡＸ操作をニューヨークデータソース２１４にプッシュダウンすることができないので、操作は代わりにロールアップコンポーネント３０５で実行される。ボストンデータソース２１４の出力を表すコンポーネント３０２は、クエリプラン２１０からの集約操作２１８ａと同等の操作を遂行するための命令をボストンデータソース２１４に送信するように構成され、従って、ボストンデータソース２１４の出力を表すコンポーネント３０２は和結合型操作を表すコンポーネント３０６にリンクされる。このようにして、他のデータソースが操作をサポートしない場合でも、集約操作を何らかのデータソースにプッシュダウンすることができる。
【００６９】
図７は、ＳＱＬクエリに基づいてコンピュータプログラムを生成するための手順４００を表すフローチャートを示している。手順４００は、例えば、図１に示されているデータ処理システム１００のコンポーネントによって遂行することができる。
【００７０】
この手順は４０２でＳＱＬクエリを受信する。例えば、ＳＱＬクエリは図１に示されているクエリ１０２の一例にすることができる。いくつかの例では、ＳＱＬクエリは、データ処理システムの外部にある１つ以上のデータセットへの参照を含む。例えば、クエリは、第１のデータソースに記憶されている第１のデータセットへの参照と、第１のデータソースとは異なる第２のデータソースに記憶されている第２のデータセットへの参照とを有することができる。例えば、データソースは、リレーショナルデータベース（例えば、リレーショナルデータベーステーブルを記憶する）、データ記憶域上でアクセス可能なフラットファイル、ネットワークを介してアクセス可能なデータストリーム、ＨＤＦＳ（Ｈａｄｏｏｐ分散ファイルシステム）ファイル、又はその他の種類のデータソースにすることができる。図１に示されているデータソース１１０、１２０はデータソースの例であり、データセットはデータソース１１０、１２０に記憶されているデータにすることができる。参照の例は図３に示されている引数２０２、２０４である。
【００７１】
この手順は４０４で、ＳＱＬクエリが２つ以上のコマンドを含み、そのコマンドが第１の和結合型操作と第１の集約操作とを含むと判断する。いくつかの実施形態では、和結合型操作は、第１のデータソースから受信したデータに基づいてデータの第１の部分に適用され、第２のデータソースから受信したデータに基づいてデータの第２の部分にも適用される。ＳＱＬクエリの一例は図３に示されているＳＱＬクエリ２００である。いくつかの実施形態では、ＳＱＬクエリは、ＳＱＬクエリから生成されたクエリプランに基づいて和結合型操作と第１の集約操作とを含むものと判断される。
【００７２】
この手順は４０６で、第１の和結合型操作が第１のデータセットからのデータの少なくとも一部分に適用され、第２のデータセットからのデータの少なくとも一部分に適用されることをＳＱＬクエリが記述していると判断する。例えば、プロセスは、ＳＱＬクエリを構文解析して、和結合型操作（例えば、ＵＮＩＯＮ又はＵＮＩＯＮ  ＡＬＬ）を識別し、データの一部分に対応する引数（例えば、データの一部分を含むデータソースを指定する引数）を識別することができる。
【００７３】
この手順は４０８で、第１の集約操作が第１の和結合型操作の結果として得られるデータに適用されることをＳＱＬクエリが記述していると判断する。例えば、この手順は、ＳＱＬクエリを構文解析して第１の集約操作を識別することができ、例えば、和結合型操作は第１の集約操作への引数として提供される。
【００７４】
いくつかの実施形態では、この手順は第１の集約操作に基づいて第２の集約操作を決定する。例えば、この手順は、遂行された時に第１の集約操作の出力と同等の出力を生成する一連の操作を決定し、その一連の操作から第２の集約操作を選択することができる。一例として、第１の集約操作は最小値操作、最大値操作、合計操作、又はカウント操作にすることができ、第２の集約操作は第１の集約操作と同じタイプの集約操作にすることができる。もう１つの例として、第１の集約操作は平均操作にすることができ、第２の集約操作は合計操作又はカウント操作にすることができる。これらの例では、第２の集約操作は上記の特性１〜４のうちの１つに応じて選択される。
【００７５】
いくつかの実施形態では、この手順は、第２の集約操作が第１のデータソースを管理するシステムによって実行できると判断する。例えば、データソースを管理するシステムが、ＳＱＬ文を実行できるＲＤＢＭＳである場合、このシステムは、集約操作がＳＱＬ文の一部として表される場合にその集約操作を実行することができる。ＲＤＢＭＳ１１２、１２２の例は図１に示されている。
【００７６】
この手順は４１０で、ＳＱＬクエリに基づいてコンピュータプログラムを生成する。いくつかの実施形態では、コンピュータプログラムは、第１のシステム、例えば、図１に示されているデータ処理システム１００によって生成される。このプログラムの実行は、以下の図８に示されている手順５００に対応することができる。いくつかの実施形態では、これは、ＳＱＬクエリに基づいてクエリプランを生成することと、第１のデータソースからのデータに適用される第２の集約操作をクエリプランに追加することと、第１のデータソースに関連する第１のシステムが第２の集約操作を遂行するための機能性を含むと判断することと、第２の集約操作を遂行するための命令を、第１のデータソースを表すクエリプランの一部分に付加することと、クエリプランに基づいてコンピュータプログラムを生成することとを含む。次に、このプログラムを実行することができる。
【００７７】
いくつかの実施形態では、手順４００の４１０で生成されたコンピュータプログラムは、ＳＱＬクエリの和結合型操作を表す第１のコンポーネントを含む。第１のコンポーネントは、データの第１の部分の要約及びデータの第２の部分の要約に適用され、それぞれの要約はデータのそれぞれ対応する部分より少ないレコードを含む。コンピュータプログラムは第１のデータソースを表す第２のコンポーネントも含むことができ、第２のコンポーネントは、実行された時に、第１のシステムによる実行のために命令を送信させる。この命令は、第２の集約操作に対応するコマンドを含むＳＱＬ文を含むことができる。さらに、この命令は、第１のシステムがコンピュータプログラムを実行するシステムにデータを送信させる前に遂行される。
【００７８】
この例では、第２のコンポーネントの出力は、第１のデータソースからのデータの第１の部分の要約を含むことができる。また、コンピュータプログラムは、第２のデータソースを表す第３のコンポーネントと、第３の集約操作を表す第４のコンポーネントも含むことができ、第３のコンポーネントの出力は第４のコンポーネントに流れ、第４のコンポーネントの出力は第１のコンポーネントに流れる。例えば、第３の集約操作は、図６に示されているコンポーネント３０５によって表すことができる。さらに、第１のコンポーネントの出力は、例えば、図６に示されているコンポーネント３０８によって表されるように、他の集約操作に流れる場合もある。
【００７９】
いくつかの実施形態では、コンピュータプログラムは、第２のデータセットからのデータの一部分について第２の集約操作を実行するよう第３のシステムに指示する命令も送信し、データの第２の部分の要約である特定のデータセットを第３のシステムから受信する。これは、例えば、第２のデータソースを管理するシステムが第２の集約操作を実行できるという判断が行われた時に行うことができる。
【００８０】
図８は、ＳＱＬクエリの実行に関する操作を実行するための手順５００を表すフローチャートを示している。手順５００は、例えば、図１に示されているデータ処理システム１００のコンポーネントなどの第１のシステムによって遂行することができる。例えば、手順５００は、実行エンジン１５０がＳＱＬクエリから生成されたコンピュータプログラムの少なくとも一部を実行する時に、図２に示されている実行エンジン１５０によって遂行することができる。コンピュータプログラムは、図１〜図２に示されているコンピュータプログラム１０８及び図７の４１０で生成されたコンピュータプログラムにすることができる。さらに、ＳＱＬクエリは図１及び図２に示されているクエリ１０２にすることができる。
【００８１】
この手順は５０２で、第１のデータセットからのデータの一部分について第２の集約操作を実行するよう第２のシステムに指示する命令を送信する。例えば、第２のシステムは、図１に示されているシステム１１２、１２２のうちの１つにすることができる。命令はＳＱＬ文の形にすることができる。例えば、命令は図１に示されている命令１１４、１２４にすることができる。
【００８２】
この手順は５０４で、データの第１の部分の要約である特定のデータセットを第２のシステムから受信する。例えば、このデータの一部分は、コンピュータプログラムが生成されたＳＱＬクエリで参照されたデータの一部分にすることができる。
【００８３】
この手順は５０６で、特定のデータセット及び第２のデータセットからのデータの一部分の要約について第２の和結合型操作を実行する。例えば、データの第２の部分は、コンピュータプログラムが生成されたＳＱＬクエリで参照されたデータの他の一部分にすることができる。いくつかの実施形態では、第２の和結合型操作は第１の和結合型操作と同じタイプのものである。上記のように、１つのタイプの和結合型操作は「ｕｎｉｏｎ」であり、もう１つは「ｕｎｉｏｎ  ａｌｌ」である。例えば、第１の和結合型操作が「ｕｎｉｏｎ  ａｌｌ」操作であり、第２の和結合型操作も「ｕｎｉｏｎ  ａｌｌ」操作である場合、２つの操作は同じタイプのものである。
【００８４】
このようにして、コンピュータプログラムは、例えば、ＳＱＬクエリがリレーショナルデータベースシステム又はＳＱＬクエリを評価（例えば、実行）するその他のシステムである場合と同様に、ＳＱＬクエリの出力と同等の出力を生成する。しかしながら、操作はデータソースに「プッシュダウン」されるので、コンピュータプログラムは、その操作がコンピュータプログラムそのものによって遂行された場合より効率的に動作することができる。
【００８５】
図２に示されているクエリプランナ１３０、生成エンジン１４０、及び／又は実行エンジン１５０は、例えば、ＵＮＩＸ（登録商標）オペレーティングシステムのあるバージョンなど、適切なオペレーティングシステムの制御下にある１つ以上の汎用コンピュータ上で処理される。例えば、これは、ローカル（例えば、対称型マルチプロセッシング（ＳＭＰ）コンピュータなどのマルチプロセッサシステム）又はローカル分散型（例えば、クラスタとして結合された複数プロセッサ又は超並列処理（ＭＰＰ）システム）あるいはリモート又はリモート分散型（例えば、ローカルエリアネットワーク（ＬＡＮ）及び／又は広域ネットワーク（ＷＡＮ）を介して結合された複数プロセッサ）あるいはこれらの任意の組み合わせなど、複数の中央演算処理装置（ＣＰＵ）又はプロセッサコアを使用するコンピュータシステムの構成を含む複数ノードの並列コンピューティング環境を含むことができる。
【００８６】
図５及び図６に示されているコンピュータプログラム３００、３００ａは開発環境において表示される場合がある。開発環境は、いくつかの実施形態では、データフローグラフとしてアプリケーションを開発するためのシステムである。このシステムにより作成されるデータフローグラフは、グラフコンポーネントによって表される個々のプロセス内に及び個々のプロセスから情報を取得するため、プロセス間で情報を移動するため、及びプロセスの実行順序を定義するための方法を提供する。このシステムは、任意の使用可能な方法からプロセス間通信方法を選択するアルゴリズムを含む（例えば、グラフのリンクに応じた通信経路は、ＴＣＰ／ＩＰ又はＵＮＩＸドメインソケットを使用するかあるいはプロセス間でデータを渡すために共有メモリを使用することができる）。
【００８７】
上記の技法は、適切なソフトウェアを実行するコンピューティングシステムを使用して実現することができる。例えば、ソフトウェアは、それぞれが少なくとも１つのプロセッサと少なくとも１つのデータ記憶システム（揮発性及び／又は不揮発性メモリ及び／又は記憶素子を含む）と少なくとも１つのユーザインターフェース（少なくとも１つの入力装置又はポートを使用して入力を受け取り、少なくとも１つの出力装置又はポートを使用して出力を提供するためのもの）とを含む、１つ以上のプログラム式又はプログラム可能コンピューティングシステム（分散、クライアント／サーバ、又はグリッドなどの様々なアーキテクチャのものにすることができる）上で実行される１つ以上のコンピュータプログラムに手順を含むことができる。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関するサービスを提供する、より大きいプログラムの１つ以上のモジュールを含むことができる。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されているデータモデルに適合するデータ構造又はその他の編成済みデータとして実現することができる。
【００８８】
ソフトウェアは、ＣＤ−ＲＯＭ又はその他のコンピュータ可読媒体などの有形で非一時的な媒体（例えば、汎用又は専用コンピューティングシステム又は装置によって読み取り可能）上で提供するか、あるいは、ネットワークの通信媒体により、それが実行されるコンピューティングシステムの有形で非一時的な媒体に引き渡す（例えば、伝搬信号にコード化する）ことができる。処理の一部又は全部は、専用コンピュータ上で実行するか、あるいは、コプロセッサ又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ）又は専用の特定用途向け集積回路（ＡＳＩＣ）などの専用ハードウェアを使用して実行することができる。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行されるという分散方式で実現することができる。このようなコンピュータプログラムはそれぞれ、好ましくは、本明細書に記載されている処理を実行するためにコンピュータによって記憶装置媒体が読み取られた時にコンピュータを構成し操作するために、汎用又は専用プログラマブルコンピュータによってアクセス可能な記憶装置のコンピュータ可読記憶媒体（例えば、ソリッドステートメモリ又はメディアあるいは磁気又は光メディア）上に記憶されるか又はそれにダウンロードされる。また、本発明のシステムは、コンピュータプログラムで構成された有形で非一時的な媒体として実現されるものと見なすこともでき、このように構成された媒体は、本明細書に記載されている処理ステップのうちの１つ以上を実行するために特定の定義済み方式でコンピュータを動作させる。
【００８９】
本発明のいくつかの実施形態について説明してきた。それにもかかわらず、上記の説明は、例証するためのものであり、以下の特許請求の範囲の範囲によって定義されている本発明の範囲を制限するためのものではないことを理解するべきである。従って、その他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、本発明の範囲を逸脱せずに様々な変更を行うことができる。さらに、上記のステップのいくつかは順序に依存しない可能性があり、従って、記載されているものとは異なる順序で実行することができる。
【図１】
0006787889.tif 000002
【図２】
0006787889.tif 000003
【図３】
0006787889.tif 000004
【図４】
0006787889.tif 000005
【図５】
0006787889.tif 000006
【図６】
0006787889.tif 000007
【図７】
0006787889.tif 000008
【図８】
0006787889.tif 000009