(57)【要約】  少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含む、生成することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
2021525925.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第１のコンピュータシステムプロセスを用いて前記第１のデータ処理動作を実行し、及び前記第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、前記第２のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項２】
前記プロセッサ実行可能命令が、前記少なくとも１つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせる、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３】
前記更新されたデータフローグラフを実行することが、前記割り当てられた１つ又は複数の処理レイアウトに従って行われる、請求項２に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項４】
前記第２の複数のノードが、前記第１の複数のノードよりも少ない数のノードを有する、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項５】
前記第２の複数のリンクが、前記第１の複数のリンクよりも少ない数のリンクを有する、請求項４に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項６】
前記更新されたデータフローグラフを生成することが、
第１の最適化ルールを選択することと、
前記第１の最適化ルールを適用する前記初期データフローグラフの第１の部分を識別することと、
前記第１の最適化ルールを前記初期データフローグラフの前記第１の部分に適用することと、
を含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項７】
前記更新されたデータフローグラフを生成することが、
前記第１の最適化ルールとは異なる第２の最適化ルールを選択することと、
前記第２の最適化ルールを適用する前記初期データフローグラフの第２の部分を識別することと、
前記第２の最適化ルールを前記初期データフローグラフの前記第２の部分に適用することと、
をさらに含む、請求項６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項８】
前記初期データフローグラフの前記第１の部分を識別することが、データフロー部分グラフパターンマッチング言語を用いて行われる、請求項６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項９】
前記初期データフローグラフの前記第１の部分を識別することが、第１のノードに接続される第２のノードによって表される第２のデータ処理動作と交換する第１のデータ処理動作を表す前記第１のノードを識別することを含む、請求項６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１０】
前記第１の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１１】
更新されたデータフローグラフを生成することが、冗長動作を表す第１のノードを識別することと、前記第１のノードを前記初期データフローグラフから除去することと、を含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１２】
更新されたデータフローグラフを生成することが、それぞれのソートデータ処理動作を表す、前記初期データフローグラフにおける２つのノードを識別することと、前記２つのノードを、ソートデータ処理動作を表す単一のノードに置換することと、を含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１３】
前記２つのノードが、前記初期データフローグラフにおいて、互いに隣接していない、請求項１２に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１４】
更新されたデータフローグラフを生成することが、第１のデータ処理動作を表す第１のノードを、前記第１のデータ処理動作よりも弱いタイプの第２のデータ処理動作を表す第２のノードに置換することを含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１５】
更新されたデータフローグラフを生成することが、それぞれの結合データ処理動作を表す、前記初期データフローグラフにおける２つのノードを識別することと、前記２つのノードを、結合データ処理動作を表す単一のノードに置換することと、を含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１６】
前記自動的に生成された初期データフローグラフを取得することが、前記初期データフローグラフを自動的に生成することを含む、請求項１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１７】
前記初期データフローグラフを自動的に生成することが、
構造化照会言語（ＳＱＬ）クエリーを取得することと、
前記ＳＱＬクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
を含む、請求項１６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項１８】
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第１のコンピュータシステムプロセスを用いて前記第１のデータ処理動作を実行し、及び前記第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、前記第２のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行うために、少なくとも１つのコンピュータハードウェアプロセッサを使用することを含む、方法。
【請求項１９】
前記更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当てることをさらに含み、
前記実行することが、前記割り当てられた１つ又は複数の処理レイアウトに従って行われる、請求項１８に記載の方法。
【請求項２０】
前記更新されたデータフローグラフを生成することが、
第１の最適化ルールを選択することと、
前記第１の最適化ルールを適用する前記初期データフローグラフの第１の部分を識別することと、
前記第１の最適化ルールを前記初期データフローグラフの前記第１の部分に適用することと、
を含む、請求項１８に記載の方法。
【請求項２１】
前記初期データフローグラフの前記第１の部分を識別することが、第１のノードに接続される第２のノードによって表される第２のデータ処理動作と交換する第１のデータ処理動作を表す前記第１のノードを識別することを含む、請求項２０に記載の方法。
【請求項２２】
前記第１の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項２０に記載の方法。
【請求項２３】
構造化照会言語（ＳＱＬ）クエリーを取得することと、
前記ＳＱＬクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに含む、請求項１８に記載の方法。
【請求項２４】
少なくとも１つのコンピュータハードウェアプロセッサと、
前記少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第１のコンピュータシステムプロセスを用いて前記第１のデータ処理動作を実行し、及び前記第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、前記第２のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体と、
を含む、データ処理システム。
【請求項２５】
前記プロセッサ実行可能命令が、前記少なくとも１つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当てることをさらに行わせ、
前記実行することが、前記割り当てられた１つ又は複数の処理レイアウトに従って行われる、請求項２４に記載のデータ処理システム。
【請求項２６】
前記更新されたデータフローグラフを生成することが、
第１の最適化ルールを選択することと、
前記第１の最適化ルールを適用する前記初期データフローグラフの第１の部分を識別することと、
前記第１の最適化ルールを前記初期データフローグラフの前記第１の部分に適用することと、
を含む、請求項２４に記載のデータ処理システム。
【請求項２７】
前記初期データフローグラフの前記第１の部分を識別することが、第１のノードに接続される第２のノードによって表される第２のデータ処理動作と交換する第１のデータ処理動作を表す前記第１のノードを識別することを含む、請求項２６に記載のデータ処理システム。
【請求項２８】
前記第１の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項２７に記載のデータ処理システム。
【請求項２９】
前記プロセッサ実行可能命令が、前記少なくとも１つのコンピュータハードウェアプロセッサに、
構造化照会言語（ＳＱＬ）クエリーを取得することと、
前記ＳＱＬクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項２４に記載のデータ処理システム。
【請求項３０】
自動的に生成された初期データフローグラフを取得するための手段であって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、自動的に生成された初期データフローグラフを取得するための手段と、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成するための手段であって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含する、更新されたデータフローグラフを生成するための手段と、
少なくとも部分的に、第１のコンピュータシステムプロセスを用いて前記第１のデータ処理動作を実行し、及び前記第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、前記第２のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行するための手段と、
を含む、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３１】
少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含し、前記生成することが、
少なくとも部分的に、第１のノードに接続される第２のノードによって表される第２のデータ処理動作と交換する第１のデータ処理動作を表す前記第１のノードを識別することによって、第１の最適化ルールを適用する前記初期データフローグラフの第１の部分を識別することと、
前記第１の最適化ルールを前記初期データフローグラフの前記第１の部分に適用することと、
を含む、生成することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３２】
前記プロセッサ実行可能命令が、前記少なくとも１つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせ、
前記実行することが、前記割り当てられた１つ又は複数の処理レイアウトに従って行われる、請求項３１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３３】
前記第１のデータ処理動作がソート動作である、請求項３１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３４】
前記第１の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項３１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３５】
前記プロセッサ実行可能命令が、少なくとも１つのコンピュータハードウェアプロセッサに、
構造化照会言語（ＳＱＬ）クエリーを取得することと、
前記ＳＱＬクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項３１に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３６】
少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも１つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、前記第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、前記第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、前記第２の複数のノードが、第１のデータ処理動作を表すノードと、前記第２のデータ処理動作を表す別のノードと、を包含し、前記生成することが、
冗長データ処理動作の除去、強度低下最適化、幅減少最適化、及び重複排除最適化の中から、前記初期データフローグラフの第１の部分に適用する第１の最適化ルールを選択することと、
前記第１の最適化ルールを前記初期データフローグラフの前記第１の部分に適用することと、
を含む、生成することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３７】
前記プロセッサ実行可能命令が、前記少なくとも１つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせ、
前記実行することが、前記割り当てられた１つ又は複数の処理レイアウトに従って行われる、請求項３６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【請求項３８】
前記プロセッサ実行可能命令が、少なくとも１つのコンピュータハードウェアプロセッサに、
構造化照会言語（ＳＱＬ）クエリーを取得することと、
前記ＳＱＬクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項３６に記載の少なくとも１つの非一時的コンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データフローグラフ最適化のシステム及び方法に関する。
【背景技術】
【０００２】
データ処理システムは、１つ又は複数のコンピュータプログラムを使用して、データを処理し得る。データ処理システムによって利用されるコンピュータプログラムの１つ又は複数は、データフローグラフとして展開され得る。データフローグラフは、入力データに対して行われるデータ処理動作、及びデータのフローを表すコンポーネント間のリンクを表す、「ノード」又は「節点」と呼ばれるコンポーネントを包含し得る。データフローグラフのノードは、各入力データセットを表す１つ又は複数の入力ノード、各出力データセットを表す１つ又は複数の出力ノード、及びデータに対して行われるデータ処理動作を表す１つ又は複数のノードを包含し得る。データフローグラフによってエンコードされる計算を実行するための技術が、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行（Ｅｘｅｃｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎｓ  Ｅｘｐｒｅｓｓｅｄ  ａｓ  Ｇｒａｐｈｓ）」というタイトルの米国特許第５，９６６，０７２号明細書、及び「グラフベース計算のパラメータ管理（Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ｃｏｍｐｕｔａｔｉｏｎｓ）」というタイトルの米国特許第７，７１６，６３０号明細書に記載されている。
【発明の概要】
【課題を解決するための手段】
【０００３】
幾つかの実施形態は、少なくとも１つのコンピュータハードウェアプロセッサと、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、第２の複数のノードが、第１のデータ処理動作を表すノードと、第２のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第１のコンピュータシステムプロセスを用いて第１のデータ処理動作を実行し、及び第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、第２のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体と、を含む、データ処理システムに向けられる。
【０００４】
幾つかの実施形態は、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、第２の複数のノードが、第１のデータ処理動作を表すノードと、第２のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第１のコンピュータシステムプロセスを用いて第１のデータ処理動作を実行し、及び第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、第２のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行うために、少なくとも１つのコンピュータハードウェアプロセッサを使用することを含む、方法に向けられる。
【０００５】
幾つかの実施形態は、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、第２の複数のノードが、第１のデータ処理動作を表すノードと、第２のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第１のコンピュータシステムプロセスを用いて第１のデータ処理動作を実行し、及び第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、第２のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【０００６】
幾つかの実施形態は、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体であって、プロセッサ実行可能命令が、自動的に生成された初期データフローグラフを取得するための手段であって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードと、第１の複数のノードのノード間のデータのフローを表す第１の複数のリンクと、を含む、自動的に生成された初期データフローグラフを取得するための手段と、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成するための手段であって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードと、第２の複数のノードのノード間のデータのフローを表す第２の複数のリンクと、を含み、第２の複数のノードが、第１のデータ処理動作を表すノードと、第２のデータ処理動作を表す別のノードと、を包含する、更新されたデータフローグラフを生成するための手段と、少なくとも部分的に、第１のコンピュータシステムプロセスを用いて第１のデータ処理動作を実行し、及び第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスを用いて、第２のデータ処理動作を実行することにより、更新されたデータフローグラフを実行するための手段と、を含む、少なくとも１つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【０００７】
幾つかの実施形態は、少なくとも１つのコンピュータハードウェアプロセッサと、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、構造化照会言語（ＳＱＬ）クエリーを取得することと、ＳＱＬクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも１つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードを含む、更新されたデータフローグラフを生成することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体と、を含む、データ処理システムに向けられる。
【０００８】
幾つかの実施形態は、構造化照会言語（ＳＱＬ）クエリーを取得することと、ＳＱＬクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも１つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードを含む、更新されたデータフローグラフを生成することと、を行うために、少なくとも１つのコンピュータハードウェアプロセッサを使用することを含む、方法に向けられる。
【０００９】
幾つかの実施形態は、少なくとも１つのコンピュータハードウェアプロセッサによって実行されると、少なくとも１つのコンピュータハードウェアプロセッサに、構造化照会言語（ＳＱＬ）クエリーを取得することと、ＳＱＬクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも１つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードを含む、更新されたデータフローグラフを生成することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【００１０】
幾つかの実施形態は、プロセッサ実行可能命令を保存した、少なくとも１つの非一時的コンピュータ可読ストレージ媒体であって、プロセッサ実行可能命令が、構造化照会言語（ＳＱＬ）クエリーを取得するための手段と、ＳＱＬクエリーのクエリープランを生成するための手段と、クエリープランを使用して、初期データフローグラフを生成する手段であって、初期データフローグラフが、第１の複数のデータ処理動作を表す第１の複数のノードを含む、初期データフローグラフを生成するための手段と、初期データフローグラフを更新するために、少なくとも１つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成するための手段であって、更新されたデータフローグラフが、第２の複数のデータ処理動作を表す第２の複数のノードを含む、更新されたデータフローグラフを生成するための手段と、を含む、少なくとも１つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【００１１】
上記は、添付の特許請求の範囲によって定義される本発明の非限定的概要である。
【００１２】
以下の図面を参照して、様々な態様及び実施形態を説明する。これらの図面は、必ずしも一定の縮尺で描かれていないことが理解されるものとする。複数の図面に現れるアイテムは、それらが現れる全ての図面において、同じ又は類似の参照番号で示される。
【図面の簡単な説明】
【００１３】
【図１Ａ】本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境のブロック図である。
【図１Ｂ】本明細書に記載する技術の幾つかの実施形態による、入力構造化照会言語（ＳＱＬ）クエリーからデータフローグラフを自動的に生成する、説明のためのプロセスのフローチャートである。
【図２】本明細書に記載する技術の幾つかの実施形態による、入力ＳＱＬクエリーからデータフローグラフを自動的に生成する、説明のためのプロセス２００のフローチャートである。
【図３Ａ】本明細書に記載する技術の幾つかの実施形態による、１つ又は複数の冗長データ処理動作を除去するために、最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図３Ｂ】本明細書に記載する技術の幾つかの実施形態による、最適化ルールを別の説明のためのデータフローグラフに適用することを容易にするために、交換データ処理動作の順序を変えることを示す。
【図３Ｃ】本明細書に記載する技術の幾つかの実施形態による、１つ又は複数の冗長データ処理動作を除去するために最適化ルールを別の説明のためのデータフローグラフに適用することを示す。
【図３Ｄ】本明細書に記載する技術の幾つかの実施形態による、１つ又は複数の冗長データ処理動作を除去するために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【図４Ａ】本明細書に記載する技術の幾つかの実施形態による、強度低下最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図４Ｂ】本明細書に記載する技術の幾つかの実施形態による、別の強度低下最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図５Ａ】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図５Ｂ】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフに適用することを示す。
【図５Ｃ】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【図５Ｄ】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【図６】本明細書に記載する技術の幾つかの実施形態による、参照されないデータ処理動作を除去するために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図７】本明細書に記載する技術の幾つかの実施形態による、幅減少最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図８Ａ】本明細書に記載する技術の幾つかの実施形態による、重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図８Ｂ】本明細書に記載する技術の幾つかの実施形態による、ジッパリング（ｚｉｐｐｅｒｉｎｇ）を用いて重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図９】本明細書に記載する技術の幾つかの実施形態による、順次−並列最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【図１０Ａ】本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフを示す。
【図１０Ｂ】本明細書に記載する技術の幾つかの実施形態による、図１０Ａに示される初期データフローグラフに最適化ルールを反復的に適用することによって取得された、更新されたデータフローグラフを示す。
【図１０Ｃ】本明細書に記載する技術の幾つかの実施形態による、図１０Ａの初期データフローグラフの別の表示を示す。
【図１０Ｄ】本明細書に記載する技術の幾つかの実施形態による、図１０Ｂの更新されたデータフローグラフの別の表示を示す。
【図１１】本明細書に記載する技術の幾つかの実施形態の実施に使用することができる、説明のためのコンピューティングシステム環境のブロック図である。
【発明を実施するための形態】
【００１４】
本明細書に記載する技術の局面は、データフローグラフを用いてデータ処理動作を行うための従来の技術を改良することによって、データ処理システムの速度、スループット、及び正確さを向上させることに関係する。
【００１５】
一部のデータ処理システムは、データフローグラフを使用してデータを処理する。多くの場合、データフローグラフは、手作業で指定されるのではなく、自動的に生成される。例えば、一部のデータ処理システムは、構造化照会言語（ＳＱＬ）クエリーからデータフローグラフを自動的に生成し得る。このような場合、ユーザ又はコンピュータプログラムが、入力ＳＱＬクエリーをデータ処理システムに提供することができ、データ処理システムは、ＳＱＬクエリーからデータフローグラフを生成し、及び生成されたデータフローグラフを実行することによって、ＳＱＬクエリーを実行することができる。別の例として、データ処理システムは、ユーザ又はコンピュータプログラムから、入力クエリーの表現（この表現は、ＳＱＬクエリーではない）を受信し、クエリーの表現からデータフローグラフを自動的に生成し得る。さらに別の例として、データ処理システムは、別のデータ処理システムから入力データフローグラフを受信し得る。入力データフローグラフは、（この入力データフローグラフが他のデータ処理システムにおいて実行に適し得る場合であっても）このデータ処理システムにおいて実行に適さない場合がある。従って、データ処理システムは、入力データフローグラフから、そのデータ処理システムでの実行に適した新しいデータフローグラフを生成する。
【００１６】
本発明者らは、データフローグラフを（例えば、上述のようなＳＱＬクエリー、他のクエリー表現、又は入力データフローグラフから）自動的に生成する従来の技術が改良され得ることを認識した。自動的に生成されたデータフローグラフは、データ処理システムで実行され得るが、データフローグラフを自動的に生成する従来の技術は、その実行が多大な計算資源（例えば、プロセッサ資源、メモリ資源、ネットワーク資源など）及びかなりの時間を必要とするデータフローグラフを生じさせる。例えば、自動的に生成されたデータフローグラフは、（１）冗長データ処理動作を表すノードを包含する場合があり、（２）結果が後に使用されないデータ処理動作を行うことを必要とする場合があり、（３）並列処理が可能である場合に順次処理を無用に行うことを必要とする場合があり、（４）所望の結果を取得するために必要とされるよりも多くのデータにデータ処理動作を適用する場合があり、（５）複数のノードにわたり計算を発生させる場合があり、これは、各データフローグラフノードのデータ処理が、コンピュータプログラム中の専用スレッド、専用コンピュータプログラム（例えば、オペレーティングシステムにおけるプロセス）、及び／又は専用コンピューティングデバイスによって行われる状況において計算を行う計算コストを大幅に増加させ、（６）より少ない計算を必要とする、より弱いタイプのデータ処理動作（例えば、グループ内ソート（ｓｏｒｔ−ｗｉｔｈｉｎ−ｇｒｏｕｐｓ）動作、グループ内ロールアップ（ｒｏｌｌｕｐ−ｗｉｔｈｉｎ−ｇｒｏｕｐｓ）動作など）で十分であるときに、より多くの計算を必要とするより強いタイプのデータ処理動作（例えば、ソート動作、ロールアップ動作など）を行うことを必要とする場合があり、及び／又は（７）処理成果の複製を必要とする場合がある。
【００１７】
本発明者らは、データフローグラフを生成する従来の自動化技術が、仮にデータフローグラフの生成プロセスの一部として幾つかの従来の最適化技術が使用されるとしても、実行に多大な計算資源及びかなりの時間を必要とするデータフローグラフを生じさせ得ることをさらに認識した。例えば、データフローグラフは、ＳＱＬクエリーからクエリープランを生成し、及び生成されたクエリープランからデータフローグラフを生成することによって、ＳＱＬクエリーから生成され得る。しかし、仮にクエリープランの生成が特定の最適化を行うことに関与するとしても、その結果生じる（クエリープランから生成された）データフローグラフは、依然として、多大な計算資源の消費を必要とし得る。実際に、クエリープランからデータフローグラフを生成する従来の技術は、非効率性の導入をもたらすことが多く、計算的に効率的なやり方で実行することができるデータフローグラフを生じさせるには十分に洗練されたものではない場合がある。
【００１８】
本発明者らは、生成されたデータフローグラフの実行に使用される計算資源の量を減らすために、仮に自動的に生成されたデータフローグラフがさらに処理され、最適化されれば、データ処理システムの性能が向上することを認識した。本出願に記載するデータフローグラフ最適化技術の幾つかは、このために本発明者らによって開発されたものである。本明細書に記載するデータフローグラフ最適化技術は、少なくとも部分的にデータフローグラフ最適化技術を用いることによって生成されたデータフローグラフを実行するために使用される計算資源（例えば、プロセッサ資源、メモリ資源、ネットワーク資源など）の量を減らすことによって、データ処理システムの性能（例えば、スループット、速度、精度など）を向上させる。
【００１９】
本明細書に記載するデータフローグラフ最適化技術の別の利点は、データ処理システムの一部としてのデータフローグラフオプティマイザの存在により、他のデータ処理システムコンポーネントの開発者及び／又はデータ処理システムのユーザが、自身の仕事の一部としてその場しのぎの最適化を試みるのではなく、データフローグラフオプティマイザに頼ることが可能となる。このことは、このような開発者及び／又はユーザによって行われなければならない仕事を減らすことに役立つだけでなく、彼らが意図的ではなくデータ処理システムにエラーを導入することも防止し、このことはまた、もちろん、エラーの数を減らすことによってデータ処理システムを向上させる。
【００２０】
本明細書に記載するデータフローグラフ最適化技術が、ある意味では「最適な」データフローグラフを生じさせ得る（ただし、必ずではない）ことを理解されたい。より正確に言えば、最適化技術は、一般に、データフローグラフを実行する際に、それの実行の計算効率を向上させるために、それが実行される前にデータフローグラフを修正することによって、データ処理システムの性能を向上させようと試みる。
【００２１】
本明細書に記載の実施形態の幾つかは、データフローグラフを自動的に生成する従来の技術に関して本発明者らが認識した上記の課題の全てに対処する。しかし、本明細書に記載の全ての実施形態が、これらの課題の１つ１つに対処するわけではなく、幾つかの実施形態は、これらの何れにも対処しない場合がある。そのため、本明細書に記載の技術の実施形態は、データフローグラフを自動的に生成する従来の技術の上述の課題の全て又は何れかに対処することに限定されないことが理解されるものとする。例えば、本明細書に記載する技術の幾つかの実施形態は、手作業で指定されるデータフローグラフを最適化することに適用することができる（このようなデータフローグラフも、非効率性を包含し、必要とされるよりも多くのコンピューティング資源を要求し得るため）。
【００２２】
従って、幾つかの実施形態は、ＳＱＬクエリー及び／又は他の入力からデータフローグラフを自動的に生成する新規の技術を提供する。このような他の入力の例は、本明細書で提供される。幾つかの実施形態では、データ処理システムは、（１）構造化照会言語（ＳＱＬ）クエリーを取得し、（２）ＳＱＬクエリーのクエリープランを生成し、（３）クエリープランを使用して初期データフローグラフを生成し、及び（４）初期データフローグラフを更新するために、少なくとも１つのデータフローグラフ最適化ルールを使用して、更新されたデータフローグラフを生成し得る。
【００２３】
幾つかの実施形態では、更新されたデータフローグラフは、後の使用のために、（例えば不揮発性メモリに）セーブされ得る。追加的又は代替的に、幾つかの実施形態では、更新されたデータフローグラフは、データ処理システムによって実行され得る。実行に先立って、データ処理システムは、更新されたデータフローグラフの１つ又は複数のノードのそれぞれに処理レイアウトを割り当て得る。
【００２４】
幾つかの実施形態では、初期データフローグラフは、仮に初期データフローグラフがデータ処理システムによって実行されるとして行われるであろうそれぞれの複数のデータ処理動作を表す第１の複数のノードを包含し得る。更新されたデータフローグラフは、仮に更新されたデータフローグラフがデータ処理システムによって実行されるとして行われるであろうそれぞれの複数のデータ処理動作を表す第２の複数のノードを包含し得る。幾つかの実施形態では、第２の複数のノードは、第１の複数のノードよりも少ない数のノードを有する。このような実施形態では、更新されたデータフローグラフのノードの数は、初期データフローグラフのノードの数よりも少ない。グラフにおけるノード数の減少は、仮に初期データフローグラフが代わりに実行されるとしてデータ処理システムによって使用されたであろう計算資源と比べて、更新されたデータフローグラフを実行するために必要とされる計算資源の量を減少させることができる。
【００２５】
幾つかの実施形態では、データ処理システムは、１つ又は複数のデータフローグラフ最適化ルール（これらの例は、本明細書において提供される）を初期データフローグラフの１つ又は複数の部分に適用することによって、初期データフローグラフから更新されたデータフローグラフを生成し得る。最適化ルールは、反復的に適用されてもよい。例えば、幾つかの実施形態では、データ処理システムは、（１）第１の最適化ルールを選択し、（２）第１の最適化ルールを適用する初期データフローグラフの第１の部分を識別し、及び（３）第１の最適化ルールを初期データフローグラフの第１の部分に適用することによって、初期データフローグラフを更新し得る。後に、データ処理システムは、（１）第１の最適化ルールとは異なる第２の最適化ルールを選択し、（２）第２の最適化ルールを適用する初期データフローグラフの第２の部分を識別し、及び（３）第２の最適化ルールを初期データフローグラフの第２の部分に適用することによって、初期データフローグラフの更新を継続し得る。
【００２６】
更新されている初期データフローグラフに対する最適化ルールの適用が考慮され得る幾つかのやり方がある。例えば、幾つかの実施形態では、特定の最適化ルールごとに、データ処理システムは、特定の最適化ルールが適用可能なデータフローグラフの部分を識別し、最適化ルールを識別された部分に適用し得る。別の例として、幾つかの実施形態では、データフローグラフの特定の部分ごとに、データ処理システムは、特定の部分に適用され得る最適化ルールを識別し、識別された最適化ルールを特定の部分に適用し得る。このような実施形態では、初期データフローグラフは、位相的にソートされてもよく、位相的にソートされたグラフは、最適化ルールが適用され得る特定の部分を識別するために（例えば、左から右へ）横断され得る。
【００２７】
幾つかの実施形態では、データ処理システムは、１つ又は複数の最適化ルールを適用する初期データフローグラフの１つ又は複数の部分を識別するために、データフロー部分グラフパターンマッチング言語を用い得る。データフロー部分グラフパターンマッチング言語は、データフローグラフで識別されるそれぞれのパターンを表す１つ又は複数の式を包含し得る。このような式の例は、本明細書で提供される。
【００２８】
幾つかの実施形態では、ある特定の最適化ルールを適用する初期データフローグラフの部分を識別するために、データ処理システムは、１つ又は複数のノードを１つ又は複数の他のノードと交換するか否かを決定し得る。つまり、データ処理システムは、データフローグラフにおける１つ又は複数のノードの出現順序が処理結果を変えることなく変更され得るか否かを決定し得る。これは、複数の交換ノードが存在する場合に、交換ノードの少なくとも幾つかの順序を変えることによって、最適化ルールが、そうでなければそのルールが適用可能ではなかったグラフの一部に適用可能となることができるため、有益な特徴である。
【００２９】
例えば、最適化ルールは、第１の動作が取り下げられるべきであるように第２のソート動作が第１の動作の効果を無効化した状態にある、それぞれのソート動作を表す、初期データフローグラフの２つの隣接するノードを識別することに関与し得る（例えば、図３Ｂ及び３Ｃに示す例を参照）。定義上、このような最適化ルールは、ソート動作を表す隣接するノードを持たないデータフローグラフには適用されない。しかし、仮に第１のソート動作を表す第１のノードを１つ又は複数の他のノードと交換するとすれば、第１のソート動作を表す第１のノードが第２のソート動作を表す第２のノードと隣接して配置されるように、１つ又は複数の他のノードの少なくとも１つと第１のノードの順序を変えることが可能となり得る。このようにしてノードを交換した結果、冗長な第１のソート動作を除去する最適化ルールが、データフローグラフに適用され得る。従って、幾つかの実施形態では、初期データフローグラフの第１の部分を識別することは、第１のノードに接続された第２のノードによって表されるデータ処理動作と交換するソートデータ処理動作を表す第１のノードを識別することを含み得る。
【００３０】
幾つかの実施形態では、初期データフローグラフから更新されたデータフローグラフを生成する際に、多数のタイプの最適化ルールの何れか１つ又は複数が適用され得る。限定ではなく、例として、最適化ルールを初期データフローグラフに適用することは、１つ又は複数の冗長データ処理動作を除去し、１つ又は複数の参照されないデータ処理動作を除去し、１つ又は複数の強度低下最適化を行い、１つ又は複数の統合動作最適化を行い、１つ又は複数の幅減少最適化を行い、及び／又は１つ又は複数の重複排除最適化を行うことに関与し得る。
【００３１】
幾つかの実施形態では、最適化ルールは、実行されると、データフローグラフに対して対応する最適化が行われるようにするプログラムコードにおいて具現化され得る。例えば、冗長性を除去するための最適化ルールは、実行されると、冗長であると決定されたデータ処理動作を表す少なくとも１つのノードの（ルールが適用されるデータフローグラフからの）除去を生じさせるプログラムコードにおいて具現化され得る。プログラムコードは、任意のプログラミング言語で書くことができる（本明細書に記載する技術の局面は、この点において限定されない）。
【００３２】
さらに別の例として、１つ又は複数の参照されないデータ処理動作を除去する最適化ルールは、実行されると、結果が参照されない、及び／又は使用されないデータ処理動作（例えば、ソーティングによって生じた順序が、後続の処理で必要とされない、又は依拠されないため、参照されないソートデータ処理動作）を表す少なくとも１つのノードの（ルールが適用されるデータフローグラフからの）除去を生じさせるプログラムコードにおいて具現化され得る。
【００３３】
さらに別の例として、強度低下を行う最適化ルールは、実行されると、（ルールが適用されるデータフローグラフにおいて）第１のデータ処理動作を表す第１のノード（例えば、ソートデータ処理動作を表すノード）を第１のデータ処理動作よりも弱いタイプの第２のデータ処理動作を表す第２のノード（例えば、グループ内ソートデータ処理動作を表すノード）と置換することを生じさせるプログラムコードにおいて具現化され得る。
【００３４】
さらに別の例として、統合動作最適化を行う最適化ルールは、実行されると、（ルールが適用されるデータフローグラフにおいて）複数の動作を表す複数のノードを、これらの複数の動作の統合を表す単一ノードと置換することを生じさせるプログラムコードにおいて具現化され得る。
【００３５】
さらに別の例として、幅減少最適化を行う最適化ルールは、実行されると、後続の動作の実施に先立って、グラフ内のある特定の部分における一部のデータ（例えば、１つ又は複数のデータ列）の削除を、そのデータ（すなわち、削除されるデータ）が後続の動作で使用されず、処理の一部として伝播される必要がないため、生じさせるプログラムコードにおいて具現化され得る。さらに別の例として、データフローグラフのノードは、幾つかの計算を行うように構成され、これらの計算の幾つかの結果は、使用されない場合がある。従って、幾つかの実施形態では、幅減少最適化を行う最適化ルールは、実行されると、特定のノードが、結果が使用される計算のみを行うように構成された別のノードと置換されることを生じさせるプログラムコードにおいて具現化することができ、不必要な計算は、もはや行われない。
【００３６】
さらに別の例として、重複排除最適化を行う最適化ルールは、実行されると、ルールが適用されるデータフローグラフの複数の異なるブランチがマージされることを生じさせるプログラムコードにおいて具現化され得る。
【００３７】
上記で紹介し、及び下記でさらに詳細に述べる技術は、多数のやり方の何れかで実施され得ることを理解されたい（これらの技術は、実施態様の何れの特定のやり方にも限定されない）。実施態様の詳細の例は、単に説明目的で本明細書において提供される。さらに、本明細書に開示する複数の技術は、個々に、又は任意の適宜の組み合わせで使用することができる（本明細書に記載する技術の局面は、何れの特定の技術又は複数の技術の組み合わせの使用にも限定されない）。
【００３８】
図１Ａは、本明細書に記載する技術の幾つかの実施形態による、説明のためのデータ処理システム１００の図である。図１Ａに示されるように、データ処理システム１００は、クエリー入力モジュール１０４、クエリープランジェネレータ１０６、データフローグラフジェネレータ１０８、グラフオプティマイザ１１０、レイアウト割り当てモジュール１１２、及びグラフ実行エンジン１１５を包含する。
【００３９】
データ処理システム１００は、データ記憶装置１０２−１、１０２−２、．．．及び１０２−ｎにアクセスする（例えば、データを読み取る、及び／又はデータを書き込む）ように構成される。データ記憶装置１０２−１、１０２−２、．．．及び１０２−ｎのそれぞれは、１つ又は複数のデータセットを保存し得る。データ記憶装置は、任意の適宜のやり方で、任意の適宜のタイプのデータを保存し得る。データ記憶装置は、フラットテキストファイルとして、スプレッドシートとして、データベースシステム（例えば、リレーショナルデータベースシステム）を使用して、又はその他の適宜のやり方で、データを保存し得る。場合によっては、データ記憶装置は、トランザクションデータを保存し得る。例えば、データ記憶装置は、クレジットカード決済、通話記録データ、又は銀行取引データを保存し得る。データ処理システム１００は、任意の適宜のタイプの、任意の適宜の数のデータ記憶装置にアクセスするように構成され得ることを理解されたい（本明細書に記載する技術の局面は、この点において限定されない）。データ処理システム１００がそれからデータを読み取るように構成され得るデータ記憶装置は、データソースと呼ばれる場合がある。データ処理システム１００がそれにデータを書き込むように構成され得るデータ記憶装置は、データシンクと呼ばれる場合がある。
【００４０】
幾つかの実施形態では、データ記憶装置１０２−１、１０２−２、．．．１０２−ｎは、同じタイプのもの（例えば、全てリレーショナルデータベースでもよい）、又は異なるタイプのもの（例えば、１つは、リレーショナルデータベースであるが、別のものは、データをフラットファイルに保存するデータ記憶装置でもよいでもよい。データ記憶装置は、ＳＱＬサーバデータ記憶装置、ＯＲＡＣＬＥデータ記憶装置、ＴＥＲＡＤＡＴＡデータ記憶装置、フラットファイルデータ記憶装置、マルチファイルデータ記憶装置、ＨＡＤＯＯＰデータ記憶装置、ＤＢ２データ記憶装置、Ｍｉｃｒｏｓｏｆｔ  ＳＱＬ  ＳＥＲＶＥＲデータ記憶装置、ＩＮＦＯＲＭＩＸデータ記憶装置、ＳＡＰデータ記憶装置、ＭｏｎｇｏＤＢデータ記憶装置、メタデータデータストア、及び／又はその他の適宜のタイプのデータ記憶装置でもよい（本明細書に記載する技術の局面は、この点において限定されない）。
【００４１】
幾つかの実施形態では、クエリー入力モジュール１０４は、入力ＳＱＬクエリーを受信するように構成され得る。幾つかの実施形態では、クエリー入力モジュール１０４は、ユーザから入力ＳＱＬクエリーを受信するように構成され得る。例えば、クエリー入力モジュール１０４は、それを用いてユーザがＳＱＬクエリーを入力し得るグラフィカルユーザインタフェースを生成するように構成され得る。別の例として、クエリー入力モジュール１０４は、グラフィカルユーザインタフェースを用いてユーザによって提供される情報（クエリー入力モジュール１０４自体によって必ずしも生成されなかった情報）を受信するように構成され得る。幾つかの実施形態では、クエリー入力モジュール１０４は、入力ＳＱＬクエリーを別のコンピュータプログラムから受信するように構成され得る。例えば、クエリー入力モジュール１０４は、それを用いて入力ＳＱＬクエリーが提供され得るアプリケーションプログラミングインタフェース（ＡＰＩ）（例えば、オープンデータベースコネクティビティ（ＯＤＢＣ）ＡＰＩ及びジャバデータベースコネクティビティ（ＪＤＢＣ）ＡＰＩ）を公開し、ＳＱＬクエリーがアクセスされるべきという通知に応答してＳＱＬクエリーにアクセスし、又はその他の適宜のやり方で、他のコンピュータプログラムから入力ＳＱＬクエリーを受信し得る。
【００４２】
クエリー入力モジュール１０４によって受信されるＳＱＬクエリーは、単一のデータ記憶装置からデータを読み取ること、及び／又は単一のデータ記憶装置にデータを書き込むことに関与し得る。代替的に、クエリー入力モジュール１０４によって受信されるＳＱＬクエリーは、複数のデータ記憶装置からデータを読み取ること、及び／又は複数のデータ記憶装置にデータを書き込むことに関与し得る。複数のデータ記憶装置が異なるタイプのものである場合には、ＳＱＬクエリーは、連合ＳＱＬクエリーと呼ばれる場合がある。幾つかの実施形態では、ＳＱＬクエリーは、連合データベースからデータを読み取ること、及び／又は連合データベースにデータを書き込むことに関与し得る。
【００４３】
幾つかの実施形態では、クエリープランジェネレータ１０６は、クエリー入力モジュール１０４によって受信されたＳＱＬクエリーからクエリープランを生成するように構成される。生成されたクエリープランは、仮にＳＱＬクエリーが実行された場合に行われるべき１つ又は複数のデータ処理動作を識別し得る。生成されたクエリープランはさらに、識別されたデータ処理動作が実行されるべき順序を指定し得る。そのため、生成されたクエリープランは、クエリー入力モジュール１０４によって受信されたＳＱＬクエリーを実行するために行うべきデータ処理動作のシーケンスを表し得る。クエリープランジェネレータ１０６は、任意の適宜のやり方でクエリープランを生成するように構成され得る。例えば、幾つかの実施形態では、クエリープランジェネレータ１０６は、本明細書に全体として援用される、「データクエリー管理（Ｍａｎａｇｉｎｇ  Ｄａｔａ  Ｑｕｅｒｉｅｓ）」というタイトルの米国特許第９，１１６，９５５号明細書に記載される、クエリープランを生成する技術の何れかを実施し得る。
【００４４】
幾つかの実施形態では、データフローグラフジェネレータ１０８は、クエリープランジェネレータ１０６によって生成されたクエリープランから初期データフローグラフを生成するように構成される。データフローグラフジェネレータ１０８は、任意の適宜のやり方で、クエリープランから初期データフローグラフを生成するように構成され得る。例えば、幾つかの実施形態では、データフローグラフジェネレータ１０８は、本明細書に全体として援用される、「データクエリー管理（Ｍａｎａｇｉｎｇ  Ｄａｔａ  Ｑｕｅｒｉｅｓ）」というタイトルの米国特許第９，１１６，９５５号明細書に記載される、クエリープランを生成する技術の何れかを実施し得る。
【００４５】
幾つかの実施形態では、データフローグラフは、入力データに対して行われるべきデータ処理動作を表す「ノード」又は「節点」と呼ばれるコンポーネント、及びデータのフローを表すコンポーネント間のリンクを包含し得る。データフローグラフのノードは、それぞれの入力データセットを表す１つ又は複数の入力ノード、それぞれの出力データセットを表す１つ又は複数の出力ノード、及びデータに対して行われるべきデータ処理動作を表す１つ又は複数のノードを包含し得る。幾つかの実施形態では、入力ノードは、連合データベース又はその他のタイプのデータベースを表し得る。同様に、幾つかの実施形態では、出力ノードは、連合データベース又はその他のタイプのデータベースを表し得る。
【００４６】
幾つかの実施形態では、データフローグラフにおいて複数の異なるノードによって表される複数の異なるデータ処理動作は、異なるそれぞれのコンピュータシステムプロセスを用いて実行され得る。例えば、データフローグラフは、第１のデータ処理動作（例えば、「ソート（ｓｏｒｔ）」動作）を表す第１のノードと、第１のデータ処理動作とは異なる第２のデータ処理動作（例えば、「結合（ｊｏｉｎ）」動作）を表す第２のノードとを包含する場合があり、幾つかの実施形態では、第１のデータ処理動作を実行するために第１のコンピュータシステムプロセスが使用されてもよく、第２のデータ処理動作を実行するために、第１のコンピュータシステムプロセスとは異なる第２のコンピュータシステムプロセスが使用されてもよい。幾つかの実施形態では、第１及び第２のコンピュータシステムプロセスは、同じコンピューティングデバイスで実行されてもよく、例えば、同じオペレーティングシステムによって管理されてもよい。他の実施形態では、第１及び第２のコンピュータシステムプロセスは、異なるコンピューティングデバイスで実行されてもよい。
【００４７】
幾つかの実施形態では、データフローグラフにおけるノードによって表されるデータ処理動作を実行するために使用されるコンピュータシステムプロセスは、データ処理動作をエンコードするプロセッサ実行可能命令を実行するように構成されたコンピュータプログラムのインスタンスでもよい。コンピュータシステムプロセスは、シングルスレッドのプロセス又はマルチスレッドのプロセスでもよい。コンピュータシステムプロセスは、限定ではなく例として、データ処理動作をエンコードすることを表すプロセッサ実行可能命令、メモリ（例えば、実行可能コード、プロセス特有の入力及び／又は出力データ、呼び出しスタック、計算ヒープ、及び／又は他のデータを保持する物理メモリ及び／又は仮想メモリの領域）、（例えば、コンピュータシステムプロセスを識別するためにオペレーティングシステムによって使用される）プロセス識別子、セキュリティ属性（例えば、コンピュータシステムプロセスが行うことを許されたプロセス及び／又は動作の１人又は複数の所有者を示す許可）、及び／又はコンピュータシステムプロセスの状態を指定する情報を包含する１つ又は複数のコンピュータシステム資源に関連付けられ得る。
【００４８】
幾つかの実施形態では、初期データフローグラフは、少なくとも部分的に、クエリープランにおいて識別されたデータ処理動作の少なくともサブセット（例えば、一部又は全て）のそれぞれのノードを包含する初期データフローグラフを生成することによって、クエリープランから生成され得る。続いて、クエリープランで指定されたデータ処理動作の順序を使用して、初期データフローグラフにおけるノードを結び付けるリンクが生成され得る。例えば、生成されたクエリープランが、第２のデータ処理動作の前に、第１のデータ処理動作が行われることを示す場合、生成された初期データフローグラフは、第１のノード（第１のデータ処理動作を表す）及び第２のノード（第２のデータ処理動作を表す）と、第１のノードから第２のノードへの経路を指定する１つ又は複数のリンクとを有し得る。
【００４９】
幾つかの実施形態では、クエリープランから初期データフローグラフを生成することは、グラフに対して、入力及び／又は出力データソースを表す１つ又は複数のノードを追加することを含む。例えば、初期データフローグラフの生成は、ＳＱＬクエリーの実行中にデータレコードが読み取られるべきデータソースのそれぞれに対して入力ノードを追加することを含み得る。各入力ノードは、それぞれのデータソースと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データソース中のデータレコードにアクセスする方法を示し得る。別の例として、初期データフローグラフの生成は、ＳＱＬクエリーの実行中にデータレコードが書き込まれるべきデータシンクのそれぞれに対して出力ノードを追加することを含み得る。各出力ノードは、それぞれのデータシンクと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データレコードをデータソースに書き込む方法を示し得る。幾つかの実施形態では、初期データフローグラフは、グラフ実行エンジンによって走行可能となり得る。他の実施形態では、初期データフローグラフは、グラフ実行エンジンによって走行可能ではない場合がある。
【００５０】
幾つかの実施形態では、グラフオプティマイザ１１０は、データフローグラフジェネレータ１０８によって生成された初期データフローグラフを更新するために、１つ又は複数のデータフローグラフ最適化ルールを使用して、更新されたデータフローグラフを生成するように構成される。グラフオプティマイザ１１０は、本明細書に記載する多数のタイプの最適化ルールの１つ又は複数を初期データフローグラフに適用するように構成され得る。例えば、グラフオプティマイザ１１０は、１つ又は複数の冗長データ処理動作を除去し、１つ又は複数の参照されないデータ処理動作を除去し、１つ又は複数の強度低下最適化を行い、１つ又は複数の統合動作最適化を行い、１つ又は複数の幅減少最適化を行い、及び／又は１つ又は複数の重複排除最適化を行うことによって、初期データフローグラフを更新するように構成され得る。グラフオプティマイザ１１０は、任意の適宜のやり方で動作するように構成することができ、例えば、図２を参照して記載される説明のためのプロセス２００又はそれの１つ又は複数の別形態に従って動作するように構成され得る。
【００５１】
幾つかの実施形態では、レイアウト割り当てモジュール１１２は、グラフオプティマイザ１１０によって生成された、更新されたデータフローグラフにおける各ノードによって表される１つ又は複数のデータ処理動作のそれぞれの処理レイアウトを決定し得る。データ処理動作の処理レイアウトは、データ処理動作を行うために何個のコンピューティングデバイスが使用されるべきかを指定することができ、及びデータ処理動作を行うために使用されるべき特定のコンピューティングデバイスを識別することができる。従って、幾つかの実施形態では、レイアウト割り当てモジュール１１２は、更新されたデータフローグラフにおける１つ又は複数のノードのそれぞれに関して、データ処理動作が、単一のデバイス（例えば、単一のプロセッサ、単一の仮想マシンなど）、或いは複数のデバイス（例えば、複数のプロセッサ、複数の仮想マシンなど）を用いて行われるべきか、及びどのデバイスが使用されるべきかを決定し得る。幾つかの実施形態では、レイアウト割り当てモジュールは、更新されたデータフローグラフにおける複数の異なるノードに異なる度合いの並列性を割り当て得る。そのため、グラフオプティマイザ１１０によって生成された、更新されたデータフローグラフの実行中に行われる複数の異なるデータ処理動作に異なる処理レイアウトが割り当てられ得ることを理解されたい。
【００５２】
幾つかの実施形態では、更新されたデータフローグラフは、複数の異なるデータ処理動作を表す複数の（例えば、２つ以上の）ノードを包含してもよく、これらのデータ処理動作を実行するために、複数の異なるプロセスが使用されてもよい。例えば、第１のノードによって表されるデータ処理動作を実行するために、１つ又は複数のコンピュータシステムプロセスが使用されてもよく（例えば、データ処理動作が並列化される場合に、複数のコンピュータシステムプロセスが使用されてもよい）、第１のノードとは異なる、更新されたデータフローグラフにおける第２のノードによって表されるデータ処理動作を実行するために、１つ又は複数の他のコンピュータシステムプロセスが使用されてもよい。
【００５３】
幾つかの実施形態では、グラフ実行エンジン１１５は、１つ又は複数のデータフローグラフを実行するように構成される。例えば、初期データフローグラフが走行可能な幾つかの実施形態では、グラフ実行エンジン１１５は、データフローグラフジェネレータ１０８によって生成されたあらゆる初期データフローグラフを実行するように構成され得る。別の例として、グラフ実行エンジン１１５は、グラフオプティマイザ１１０によって生成された、あらゆる更新されたデータフローグラフを実行するように構成され得る。グラフ実行エンジンは、共働システム、又はその他の適宜の、データフローグラフを実行するための実行環境を含み得る。データフローグラフを開発及び実行するための環境の局面は、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行（Ｅｘｅｃｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎｓ  Ｅｘｐｒｅｓｓｅｄ  ａｓ  Ｇｒａｐｈｓ）」というタイトルの米国特許第５，９６６，０７２号明細書、及び「グラフベース計算のパラメータ管理（Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ｃｏｍｐｕｔａｔｉｏｎｓ）」というタイトルの米国特許第７，７１６，６３０号明細書に記載されている。
【００５４】
図１Ｂは、本明細書に記載する技術の幾つかの実施形態による、入力構造化照会言語（ＳＱＬ）クエリーからデータフローグラフを自動的に生成する、説明のためのプロセス１２０のフローチャートである。プロセス１２０は、任意の適宜のデータ処理システムによって行うことができ、例えば、図１Ａを参照して記載されるデータ処理システム１００によって行うことができる。
【００５５】
プロセス１２０は、ＳＱＬクエリーが受信されるアクト１２２で開始される。ＳＱＬクエリーは、クエリー入力モジュール１０４を用いて受信され得る。これは、プロセス２００のアクト２０２を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【００５６】
次に、プロセス１２０は、クエリープランがアクト１２２で受信されたＳＱＬクエリーから生成されるアクト１２４に進む。クエリープランは、クエリープランジェネレータ１０６を使用して生成され得る。これは、プロセス２００のアクト２０４を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【００５７】
次に、プロセス１２０は、アクト１２４で取得されたクエリープランから初期データフローグラフが生成されるアクト１２６に進む。初期クエリープランは、データフローグラフジェネレータ１０８によって生成され得る。これは、プロセス２００のアクト２０６を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【００５８】
次に、プロセス１２０は、１つ又は複数の最適化ルールを初期データフローグラフに適用することによって、更新されたデータフローグラフが初期データフローグラフから生成されるアクト１２８に進む。更新されたデータフローグラフは、グラフオプティマイザ１１０によって生成され得る。これは、プロセス２００のアクト２０７を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【００５９】
更新されたデータフローグラフは、後の使用のために保存されてもよく、又はデータ処理システムによって実行されてもよい。実行に先立って、処理レイアウトが、更新されたデータフローグラフにおけるノードによって表される１つ又は複数のデータ処理動作に割り当てられ得る。処理レイアウトは、レイアウト割り当てモジュール１１２によってデータ処理動作に割り当てられ得る。
【００６０】
図２は、本明細書に記載する技術の幾つかの実施形態による、入力ＳＱＬクエリーからデータフローグラフを自動的に生成する、説明のためのプロセス２００のフローチャートである。プロセス２００は、例えば、図１Ａを参照して記載されるデータ処理システム１００を含む、任意の適宜のデータ処理システムを使用して実行され得る。
【００６１】
プロセス２００は、ＳＱＬクエリーが受信されるアクト２０２で開始される。幾つかの実施形態では、ＳＱＬクエリーは、ユーザが、データ処理システムへの入力としてＳＱＬクエリーを提供した結果、プロセス２００を実行するデータ処理システムによって受信され得る。ユーザは、グラフィカルユーザインタフェース、又はその他の適宜のタイプのインタフェースを用いて、ＳＱＬクエリーを入力し得る。他の実施形態では、ＳＱＬクエリーは、別のコンピュータプログラムによって、データ処理システムに提供され得る。例えば、ＳＱＬクエリーは、データ処理システムに１つ又は複数のＳＱＬクエリー（各ＳＱＬクエリーは、ユーザによって指定されている場合、又は自動生成されている場合がある）を実行させるように構成されたコンピュータプログラムによって提供され得る。ＳＱＬクエリーは、任意の適宜のタイプのものでよく、及び任意の適宜のフォーマットで提供され得る（本明細書に記載の技術の局面は、この点において限定されない）。
【００６２】
次に、プロセス２００は、アクト２０２で受信されたＳＱＬクエリーからクエリープランが生成されるアクト２０４へと進む。生成されたクエリープランは、ＳＱＬクエリーが実行された場合に行われる１つ又は複数のデータ処理動作を識別し得る。生成されたクエリープランはさらに、識別されたデータ処理動作が実行される順序を指定し得る。そのため、生成されたクエリープランは、アクト２０２で受信されたＳＱＬクエリーを実行するために行うデータ処理動作のシーケンスを表し得る。生成されたクエリープランは、任意の適宜のタイプのクエリープランジェネレータ（例えば、クエリープランジェネレータ１０６）を用いて生成され得る。クエリープランを生成するための幾つかの例示的技術が、本明細書に全体として援用される、「データクエリー管理」というタイトルの米国特許第９，１１６，９５５号明細書に記載されている。
【００６３】
次に、プロセス２００は、アクト２０６へと進む。初期データフローグラフが、アクト２０２で受信されたＳＱＬクエリーを用いて、アクト２０４で生成されたクエリープランから生成される。幾つかの実施形態では、初期データフローグラフは、少なくとも部分的に、クエリープランにおいて識別されたデータ処理動作の少なくともサブセット（例えば、一部又は全て）のそれぞれのノードを包含するように初期データフローグラフを生成することによって、クエリープランから生成され得る。幾つかの実施形態では、クエリープランにおける単一のノードは、初期データフローグラフにおける複数のノードの包含をもたらし得る。続いて、クエリープランで指定されたデータ処理動作の順序を使用して、初期データフローグラフにおけるノードを結び付けるリンクを生成し得る。例えば、生成されたクエリープランが、第２のデータ処理動作の前に、第１のデータ処理動作が行われることを示す場合、生成された初期データフローグラフは、第１のノード（第１のデータ処理動作を表す）及び第２のノード（第２のデータ処理動作を表す）と、第１のノードから第２のノードへの経路を指定する１つ又は複数のリンクとを有し得る。
【００６４】
幾つかの実施形態では、クエリープランから初期データフローグラフを生成することは、入力及び／又は出力データソースを表すグラフに対して、１つ又は複数のノードを追加することを含む。例えば、初期データフローグラフの生成は、ＳＱＬクエリーの実行中にデータレコードが読み取られるデータソースのそれぞれに対して入力ノードを追加することを含み得る。各入力ノードは、それぞれのデータソースと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データソース中のデータレコードにアクセスする方法を示し得る。別の例として、初期データフローグラフの生成は、ＳＱＬクエリーの実行中にデータレコードが書き込まれるデータシンクのそれぞれに対して出力ノードを追加することを含み得る。各出力ノードは、それぞれのデータシンクと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データレコードをデータソースに書き込む方法を示し得る。
【００６５】
アクト２０６で生成された初期データフローグラフは、アクト２０４で生成されたクエリープランとは異なることを認識されたい。データフローグラフが、グラフ実行エンジン（例えば、グラフ実行エンジン１１５）によって実行され得る一方で、クエリープランは、グラフ実行エンジンによって実行することができない（それは、データフローグラフの生成に使用される中間表現であり、このデータフローグラフは、ＳＱＬクエリーを実行するために、グラフ実行エンジンによって実行される）。クエリープランは、実行可能ではなく、リレーショナルデータベース管理システムの状況下でさえ、実行戦略を生成するために、さらに処理される必要がある。これに対して、データフローグラフは、ＳＱＬクエリーを実行するために、グラフ実行エンジンによって実行可能である。加えて、リレーショナルデータベースシステムによるさらなる処理後でさえ、結果として生じる実行戦略は、他のタイプのデータソース及び／又はデータシンクに対する、データの読み取り及び／又は書き込みを可能にしないが、データフローグラフは、この点において限定されない。
【００６６】
幾つかの実施形態では、アクト２０６で生成された初期データフローグラフは、アクト２０４で生成されたクエリープランに存在しないデータ処理動作を表すノードを含有し得る。逆に、幾つかの実施形態では、アクト２０６で生成された初期データフローグラフは、アクト２０４で生成されたクエリープランに存在するデータ処理動作を表すノードを含有しない場合がある。このような状況は、クエリープランからデータフローグラフを生成するプロセス中に行われ得る様々な最適化により生じ得る。幾つかの実施形態では、アクト２０６で生成された初期データフローグラフは、データベースコンピュータシステム（例えば、リレーショナルデータベース管理システム）に対して行われるデータベース動作以外のデータ処理動作を表すノードを含有し得る。
【００６７】
幾つかの実施形態では、クエリープラン及びデータフローグラフは、異なるタイプのデータ構造で具現化され得る。例えば、幾つかの実施形態では、クエリープランは、各ノードが単一の親ノードを有する有向グラフ（例えば、例えば二分木などの木）で具現化されてもよく、一方、データフローグラフは、複数の親ノードを有する少なくとも１つのノードを有し得る有向非巡回グラフで具現化され得る。
【００６８】
次に、プロセス２００は、更新されたデータフローグラフを取得するために、初期データフローグラフが更新されるアクト２０７に進む。これは、多数のやり方の何れかで行われ得る。例えば、図示した実施形態では、データフローグラフ最適化ルールは、アクト２０８で選択される。次に、プロセス２００を実行するデータ処理システムは、アクト２０８で識別された最適化ルールを適用する初期データフローグラフの部分を識別する。アクト２１２では、選択された最適化ルールは、グラフの識別された部分に適用される。次に、プロセス２００は、データフローグラフの少なくとももう１つの部分に適用される最適化ルールが存在するか否かが決定される決定ブロック２１４に進む。グラフの少なくとももう１つの部分に適用される最適化ルールが存在することが決定されると（例えば、アクト２０８で選択された最適化ルールが、アクト２１０で識別された部分とは異なるグラフの別の部分に適用されてもよく、異なる最適化ルールが、全体で選択されてもよいなど）、プロセス２００は、アクト２０８に戻る。そうでなければ、プロセス２００は、アクト２１６に進む。
【００６９】
幾つかの実施形態では、アクト２０８で選択された特定の最適化ルールごとに、データ処理システムは、選択された最適化ルールが適用可能なデータフローグラフの部分を識別し、識別された部分に最適化ルールを適用し得る。全てのこのような部分が識別されると、異なる最適化ルールが選択され得る。しかし、データフローグラフへの同じ最適化ルールの適用が複数回考慮され得るように、以前に適用された最適化ルールも選択され得る（これは、最適化ルールが貪欲に選択され、一度適用された後には使用されない手法と比べて、より最適化されたデータフローグラフをもたらし得る）。最適化ルールは、任意の適宜の順序で選択され得る（本明細書に記載する技術の局面は、この点において限定されない）。一例として、重複排除最適化を行った後に、冗長動作を表すあらゆるノードを除去することができ、あらゆる空のノードを除去することができる。空のノードを除去した後に、幅減少最適化などが行われ得る。
【００７０】
幾つかの実施形態では、アクト２０８及び２１０の順序が、変更されてもよい。このような実施形態では、データ処理システムは、まず、データフローグラフの一部分を識別し、次に、識別されたデータフローグラフの部分に適用され得る最適化ルールを選択し得る。このような実施形態では、初期データフローグラフは、位相的にソートされてもよく、位相的にソートされたグラフは、最適化ルールが適用され得る特定の部分を識別するために（例えば、左から右へ）横断され得る。
【００７１】
幾つかの実施形態では、データ処理システムは、１つ又は複数の最適化ルールを適用する、初期データフローグラフの１つ又は複数の部分を識別するために、データフロー部分グラフパターンマッチング言語を用い得る。データフロー部分グラフパターンマッチング言語は、データフローグラフにおいて特定のタイプの部分グラフを識別するための１つ又は複数の式を包含し得る。幾つかの実施形態では、プロセス２００を実行するデータ処理システムは、１つ又は複数の最適化ルールを適用する、データフローグラフの部分を識別するために、部分グラフパターンマッチング言語の式を使用するように構成され得る。ある特定の式は、特定の１つ又は複数の最適化ルールを適用するための１つ又は複数の部分を識別することを容易にし得る。幾つかの実施形態では、データフローグラフオプティマイザ（例えば、グラフオプティマイザ１１０）が、１つ又は複数の新しい最適化ルールを用いて構成される場合、グラフオプティマイザは、新しい最適化ルールが適用され得るデータフローグラフの部分を識別することを容易にするために、部分グラフパターンマッチング言語で書かれた１つ又は複数の新しい式を用いて構成され得る。
【００７２】
例えば、パターンマッチング言語は、統合動作最適化ルールを用いて、統合することができ、及びグラフ内で単一のノードによって表すことができる、それぞれの一連の計算を表す、少なくとも閾値長さ（例えば、少なくとも２、３、４、５など）の一連のノードを識別するための式を包含し得る。このようなパターンを識別することは、図５Ａ〜５Ｄの参照を包含して下記にさらに説明する統合動作最適化ルールの適用を容易にし得る。このような式の１つの非限定例は、「Ａ→Ｂ→Ｃ→Ｄ」であり、これは、統合され得る、一連の４つの連続するデータ処理動作を識別することに役立ち得る。
【００７３】
別の例として、パターンマッチング言語は、特定のタイプのノードが他のノードと交換可能なデータフローグラフの部分を識別するための式を包含し得る。これは、複数の異なるタイプの最適化ルールをデータフローグラフに適用することを容易にし得る。処理結果を変えることなく、データフローグラフにおける１つ又は複数のノードの順序が変更され得ることをデータ処理システムが決定すると、これは、最適化ルールが適用され得る部分を識別するために、（交換動作によって得られる自由度により許容される）データフローグラフの構造に対する変更をデータ処理システムが考慮することを可能にする。交換に基づく変更を考慮した結果、１つ又は複数の最適化ルールが、そうでなければこれらのルールが適用可能ではなかったグラフの部分に適用可能となり得る。
【００７４】
例えば、最適化ルールは、第１の動作が取り下げられるべきであるように第２のソート動作が第１の動作の効果を無効化した状態にある、それぞれのソート動作を表す、初期データフローグラフの２つの隣接するノードを識別することに関与し得る（例えば、図３Ｂ及び３Ｃに示す例を参照）。定義上、このような最適化ルールは、ソート動作を表す隣接するノードを持たないデータフローグラフには適用されない。しかし、仮に第１のソート動作を表す第１のノードを１つ又は複数の他のノードと交換するとすれば、第１のソート動作を表す第１のノードが第２のソート動作を表す第２のノードと隣接して配置されるように、１つ又は複数の他のノードの少なくとも１つと第１のノードの順序を変えることが可能となり得る。このようにしてノードを交換した結果、冗長な第１のソート動作を除去する最適化ルールが、データフローグラフに適用され得る。
【００７５】
従って、幾つかの実施形態では、部分グラフマッチング言語は、データフローグラフにおけるノードの順序が変更され得る状況下で、データフローグラフの部分グラフを識別するための１つ又は複数の式を包含し得る。一例として、ノード「Ａ」（すなわち、動作「Ａ」を表すノード）及びノードＢ（動作Ｂを表す）と、ノードＡと交換される、ノードＡとノードＢとの間の１つ又は複数のノード（例えば、ノードの順序が変えられた場合、これらのノードによって行われる処理の結果は変わらない）とを有するデータフローグラフの部分を見つけるために、式「Ａ＊→（．．．）→Ｂ」（Ａ及びＢのそれぞれは、ソート、マージなどの任意の適宜のデータ処理動作となり得る）が使用され得る。このような部分が識別されると、データフローグラフは、部分「ＡＢ」を取得するために、ノードＢに隣接するようにノードＡを移動させることによって変えられ得る。ある特定の例として、仮にデータフローグラフがノードＡＣＤＢを有するとし、且つ仮に動作Ａが動作Ｃ及びＤと交換されるとすれば、データフローグラフは、「ＣＤＡＢ」となるように変更され得る。そして、データ処理システムは、最適化ルールが部分「ＡＢ」に適用されるか否かを考慮し得る。例えば、仮に動作Ａがソートであり、且つ動作Ｂがソートであるとすれば、データ処理システムは、図５Ｂの例の場合のように、これらの２つのソートが単一のソートと置換され得るか否かを決定しようと試みることができる。
【００７６】
別の例として、ノードＡと、第２のノードＢと、ノードＢと交換される、これらのノード間の１つ又は複数のノードとを有するデータフローグラフの部分を見つけるために、式「Ａ→（．．．）→Ｂ＊」が使用され得る。ある特定の例として、仮にデータフローグラフがノードＡＣＤＢを有するとし、且つ仮に動作Ｂが動作Ｃ及びＤと交換されるとすれば、データフローグラフは、「ＡＢＣＤ」となるように変更され得る。そして、データ処理システムは、最適化ルールが部分「ＡＢ」に適用されるか否かを考慮し得る。
【００７７】
別の例として、ノードＡと、ノードＢと、ノードＢと交換されない、ノードＡとノードＢとの間の１つ又は複数のノード（例えば、Ｃ及びＤ）とを有するデータフローグラフの部分を見つけるために、式「Ａ→（．．．）→Ｂ＊＊」が使用され得る。この場合、システムは、（可能であれば、ノードＣ及びＤが、ノードＡの左に送られる）「強引な」交換を行おうとし得る。ある特定の例として、仮にデータフローグラフがノードＡＣＥＤＢを有するとし、且つ仮に動作Ｂが、動作Ｅと交換されるが、動作Ｃ及びＤとは交換されないとすれば、データフローグラフは、「ＣＤＡＢＥ」となるように変更され得る（ＢがＥと交換されたが、Ｃ及びＤは、Ａの左に送られた）。
【００７８】
さらに別の例として、ノードＡと、ノードＢと、ノードＡと交換されない、ノードＡとノードＢとの間の１つ又は複数のノード（例えば、Ｃ及びＤ）とを有するデータフローグラフの部分を見つけるために、式「Ａ＊＊→（．．．）→Ｂ」が使用され得る。この場合、システムは、（可能であれば、ノードＣ及びＤが、ノードＢの右に送られる）「強引な」交換を行おうとし得る。ある特定の例として、仮にデータフローグラフがノードＡＣＥＤＢを有するとし、且つ仮に動作Ａが、動作Ｅと交換されるが、動作Ｃ及びＤとは交換されないとすれば、データフローグラフは、「ＥＡＢＣＤ」となるように変更され得る（ノードＡがＥと交換されたが、Ｃ及びＤは、Ｂの右に送られた）。
【００７９】
部分グラフマッチング言語の式の上記の例が説明のためのものであることを理解されたい。幾つかの実施形態では、１つ又は複数の他の式は、上記の例に加えて、又は上記の例の代わりに、部分グラフマッチング言語の一部でもよい。
【００８０】
幾つかの実施形態では、アクト２０７で初期データフローグラフから更新されたデータフローグラフを生成する際に、多数のタイプの最適化ルールの何れか１つ又は複数が適用され得る。例えば、最適化ルールを初期データフローグラフに適用することは、１つ又は複数の冗長データ処理動作を除去し、１つ又は複数の参照されないデータ処理動作を除去し、１つ又は複数の強度低下最適化を行い、１つ又は複数の統合動作最適化を行い、１つ又は複数の幅減少最適化を行い、及び／又は１つ又は複数の重複排除最適化を行うことに関与し得る。
【００８１】
幾つかの実施形態では、最適化ルールは、実行されると、データフローグラフに対して対応する最適化が行われるようにするプログラムコードにおいて具現化され得る。例えば、冗長性を除去するための最適化ルールは、実行されると、冗長であると決定されたデータ処理動作を表す少なくとも１つのノードの（ルールが適用されるデータフローグラフからの）除去を生じさせるプログラムコードにおいて具現化され得る。１つ又は複数の冗長データ処理動作を除去するために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、図３Ａ〜３Ｃに示される。
【００８２】
別の例として、強度低下を行うための最適化ルールは、実行されると、（ルールが適用されるデータフローグラフにおいて）第１のデータ処理動作を表す第１のノード（例えば、ソートデータ処理動作を表すノード）を第１のデータ処理動作よりも弱いタイプの第２のデータ処理動作を表す第２のノード（例えば、グループ内ソートデータ処理動作を表すノード）と置換することを生じさせるプログラムコードにおいて具現化され得る。強度低下最適化を行うために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、図４Ａ及び４Ｂに示される。
【００８３】
別の例として、統合動作最適化を行うための最適化ルールは、実行されると、（ルールが適用されるデータフローグラフにおいて）複数の動作を表す複数のノードを、これらの複数の動作の統合を表す単一ノードと置換することを生じさせるプログラムコードにおいて具現化され得る。統合動作最適化を行うために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、図５Ａ〜５Ｄに示される。
【００８４】
さらに別の例として、１つ又は複数の参照されないデータ処理動作を除去するための最適化ルールは、実行されると、結果が参照されない、及び／又は使用されないデータ処理動作（例えば、ソーティングによって生じた順序が、後続の処理で必要とされない、又は依拠されないため、参照されないソートデータ処理動作）を表す少なくとも１つのノードの（ルールが適用されるデータフローグラフからの）除去を生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、図６に示される。
【００８５】
別の例として、幅減少最適化を行うための最適化ルールは、実行されると、後続の動作の実施に先立って、グラフ内のある特定の部分における一部のデータ（例えば、１つ又は複数のデータ列、データ行など）の削除を、そのデータ（すなわち、削除されるデータ）が後続の動作で使用されず、処理の一部として伝播される必要がないため、生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、図７に示される。
【００８６】
別の例として、重複排除最適化を行うための最適化ルールは、実行されると、ルールが適用されるデータフローグラフの複数の異なるブランチがマージされることを生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する例は、下記により詳細に記載されるように、図８Ａ及び８Ｂに示される。
【００８７】
別の例として、順次−並列最適化を行うための最適化ルールは、実行されると、順次行われる処理を並列で行わせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、図９に示される。
【００８８】
上記の最適化ルール及び最適化は、説明のための非限定例であることを理解されたい。プロセス２００の一部として、上記の最適化ルール及び／又は最適化の代わりに、又はそれらに加えて、１つ又は複数の他の最適化ルール及び／又は最適化が、初期データフローグラフに適用され得る。
【００８９】
次に、プロセス２００は、更新されたデータフローグラフが出力されるアクト２１６に進む。幾つかの実施形態では、アクト２１６では、更新されたデータフローグラフが、後の使用のために（例えば不揮発性メモリに）保存され得る。
【００９０】
保存されることに加えて、又は保存されることの代わりに、更新されたデータフローグラフは、実行されてもよい。更新されたデータフローグラフが実行される幾つかの実施形態では、プロセス２００のアクト２１８において、処理レイアウトが、更新されたデータフローグラフの１つ又は複数のノードに割り当てられる。データ処理動作を表すノードの処理レイアウトは、そのデータ処理動作を行うために何個のコンピューティングデバイスが使用されるべきかを指定することができ、及びそのデータ処理動作を行うために使用されるべき特定のコンピューティングデバイスを識別することができる。これは、本明細書に全体として援用される、２０１８年３月２９日に出願された、「可変レベル並列性を用いたデータ処理動作を行うためのシステム及び方法（Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ  Ｏｐｅｒａｔｉｏｎｓ  Ｕｓｉｎｇ  Ｖａｒｉａｂｌｅ  Ｌｅｖｅｌ  Ｐａｒａｌｌｅｌｉｓｍ）」というタイトルの米国特許出願第１５／９３９，８２９号明細書に記載されるレイアウト割り当て技術の何れかを使用することを含む、任意の適宜のやり方で行われ得る。幾つかの実施形態では、ノードが、単一のコンピューティングデバイス、或いは複数のコンピューティングデバイスを用いて処理されるかの決定（例えば、並列処理が適用されるべきか否か、及びどのレベルの並列性が用いられるべきか）は、先に（例えば、アクト２０７中に）行われ得る（計算に使用される特定のコンピューティングデバイスは、アクト２１８で割り当てられる）。
【００９１】
アクト２１８で処理レイアウトが割り当てられた後に、更新されたデータフローグラフが実行され得る。例えば、プロセス２００がデータ処理システムによって行われる場合に、データ処理システム１００は、グラフ実行エンジン１１５を用いて、更新されたデータフローグラフを実行し得る。幾つかの実施形態では、アクト２０７で生成された、更新されたデータフローグラフは、生成され次第、且つユーザ入力なしに実行され得る。他の実施形態では、更新されたデータフローグラフは、アクト２０７で生成され得るが、その実行は、実行を行うコマンドに応答してのみ開始されることができ、このコマンドは、インタフェースを用いてユーザによって、又は（例えば、ＡＰＩ呼び出しを用いて）別のコンピュータプログラムによって提供され得る。
【００９２】
プロセス２００が説明のためのものであり、且つ複数のバリエーションが存在することを理解されたい。例えば、幾つかの実施形態では、オプションのアクト２１８及び２２０は、省略されてもよく、プロセス２００は、更新されたデータフローグラフが生成され、保存された後に完了してもよい。別の例として、プロセス２００は、図示した実施形態の場合のように、入力ＳＱＬクエリーから生成されたデータフローグラフではなく、別のソース（例えば、別のデータ処理システム）から提供されたデータフローグラフを最適化するために使用されてもよい。このような実施形態では、アクト２０２〜２０４は省略することができ、初期データフローグラフは、アクト２０６において、別のソースから提供されたデータフローグラフから生成され得る。このような生成は、受信したデータフローグラフを、プロセス２００を実行するデータ処理システム用に構成されたデータフローグラフに変換することに関与し得る。
【００９３】
図３Ａ〜９を参照して、最適化ルールをデータフローグラフに適用する、説明のための例を下記に提供する。これらの図に示される各データフローグラフは、（例えば、プロセス２００のアクト２０７の一部として）最適化されているより大きなデータフローグラフの部分グラフでもよい。例えば、これらの図に示されるデータフローグラフの１つ又は複数のそれぞれは、プロセス２００のアクト２０６で生成された初期データフローグラフの部分グラフ、及び／又はアクト２０７の一部として初期データフローグラフを変換することによって取得された１つ又は複数のデータフローグラフの部分グラフでもよい。
【００９４】
図３Ａは、１つ又は複数の冗長データ処理動作を除去するために、最適化ルールを説明のためのデータフローグラフ３００に適用することを示す。図３Ａに示すように、データフローグラフ３００は、（複数の異なるコンピューティングデバイスにおける並列処理のためにデータをパーティショニングする）再パーティションデータ処理動作を表すノード３０２と、その後に続く、（単一のコンピューティングデバイスによる順次処理のために全てのデータを統合するように動作する）シリアル化動作を表すノード３０４とを包含する。再パーティショニングの効果が後続のシリアル化コマンドによって無効化されるため、再パーティショニングデータ処理動作を行うことは必要ではない。従って、データフローグラフオプティマイザ（例えば、データ処理システム１００におけるグラフオプティマイザ１１０）は、再パーティショニング動作を表すノード３０２を除去し得る。その結果、データフローグラフの部分３００は、部分３０５に変換される。
【００９５】
図３Ｂは、本明細書に記載する技術の幾つかの実施形態による、最適化ルールを別の説明のためのデータフローグラフに適用することを容易にするために、交換データ処理動作の順序を変えることを示す。図３Ｂに示すように、データフローグラフ３１０は、ソートデータ処理動作（ソートがキーＡに関して行われる）を表すノード３１１と、その後に続く、１つ又は複数のノード（不図示）と、その後に続く、別のソートデータ処理動作（ソートがキーＢに関して行われる）を表すノード３１２とを包含する。この例では、ノード３１１によって表されるソート動作が、ノード３１１とノード３１２との間のノードによって表されるデータ処理動作と交換されるか否かを決定することは、１つ又は複数の最適化ルールをデータフローグラフ３１０に適用することを容易にし得る。例えば、ノード３１１によって表されるソート動作が、ノード３１１とノード３１２との間のノードによって表されるデータ処理動作と交換される場合には、ノードの順序の変更により、データフローグラフ３１３に示されるように、ノード３１１及びノード３１２を互いに隣接して配置することが可能となる。そして、これは、１つ又は複数の最適化ルールが、結果として生じたグラフ３１３に適用され得るか否かの考慮を可能にする（これらのルールは、ノード３１１によって表されるソート動作がグラフ内で出現する場所の順序を変える前は、データフローグラフ３１０に適用可能ではなかった場合がある）。例えば、この場合、キーＡに関するソーティング（ノード３１１）の効果は、後続のキーＢに関する再ソーティング（ノード３１２）によって無効化される。従って、ノード３１１によって表されるソート動作は不要であり、図３Ｃに示すように、このノードは除去することができ、データフローグラフ３１４がもたらされる。
【００９６】
図３Ｄは、冗長データ処理動作を除去するために最適化ルールを別の説明のためのデータフローグラフ３２０に適用することを示す。図３Ｄに示すように、データフローグラフ３２０は、キーＡに関するソート動作を表すノード３２２を包含する。しかし、データが同じキーに関して既にソートされている場合は、データフローグラフオプティマイザは、キーＡに関するソート動作を表すノード３２２を除去することができ、データフローグラフ３２３がもたらされる。図３Ａ〜３Ｄに示される例の全てにおいて、冗長ノードの除去は、その実行が、仮にこれらのノードが除去されないとした場合よりも少ないコンピューティング資源を消費するデータフローグラフをもたらす。
【００９７】
図４Ａは、強度低下最適化を行い、データフローグラフ４０２を取得するために最適化ルールを説明のためのデータフローグラフ４００に適用することを示す。図４Ａに示すように、データフローグラフ４００は、入ってくるデータを主要キーＡに関してソート（例えば、姓によるソート）し、その後、二次キーＢに関してソートする（例えば、同じ姓を持つ人々を名でソートする）ソート動作を表すノード４０１を含有する。しかし、ノード４０１に入ってくるデータが既にキーＡに関してソートされている（例えば、姓によって既にソートされている）ことをグラフオプティマイザが検出した場合、グラフオプティマイザは、このソート動作を（グラフ４０２のノード４０３によって表される）グループ内ソート動作に置換することによって、強度低下最適化を行い、それによって、ソーティング動作の強度は低下するが、同じ結果を取得し、且つ不要な計算を行うことを回避することができる。
【００９８】
図４Ｂは、別の強度低下最適化を行い、データフローグラフ４１２を取得するために最適化ルールを説明のためのデータフローグラフ４１０に適用することを示す。図４Ｂに示すように、データフローグラフ４１０は、主要キーＡ及び二次キーＢに関して行われるロールアップ動作を表すノード４１１を含有する。しかし、ノード４１１に入ってくるデータが既にキーＡに関してソートされていることをグラフオプティマイザが検出した場合、オプティマイザは、ロールアップ動作を（グラフ４１２のノード４１３によって表される）グループ化ロールアップ動作に置換することによって、強度低下最適化を行い、それによって、ロールアップ動作の強度は低下するが、同じ結果を取得し、且つ不要な計算を行うことを回避することができる。
【００９９】
図５Ａは、統合動作最適化を行うために最適化ルールを説明のためのデータフローグラフ５００に適用することを示す。図５Ａに示すように、データフローグラフ５００は、各々がそれぞれの計算を表すノード５０２、５０４、及び５０６のシーケンスを包含する。幾つかの実施形態では、データフローグラフの実行中に、別個のノードによって表されるデータ処理動作は、１つ又は複数のコンピューティングデバイスで走行している複数の異なるプロセスによって実行され得る。グラフオプティマイザは、全ての動作が、単一のコンピューティングデバイスで実行される単一のプロセスによって行われるように、３つのノードのシーケンスを単一のノード（例えば、データフローグラフ５０５のノード５０８）に置換することによって統合動作最適化を行うことができ、これは、プロセス間（及び潜在的にデバイス間）通信のオーバーヘッドを減少させる。
【０１００】
図５Ｂは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ５１０に適用することを示す。図５Ｂに示すように、データフローグラフ５１０は、キーＡ１及びＢ１を使用して、データセットＡ及びＢに関する結合動作を表すノード５１２と、その後に続く、キーＡ１及びＣ１を使用した、ノード５１２によって表される結合動作の出力及びデータセットＣに関する結合動作を表すノード５１４とを包含する。この例では、グラフオプティマイザは、それぞれの結合動作を表す２つの別個のノードを、データフローグラフ５１５のノード５１６を用いて示されるように、キーＡ１、Ｂ１、及びＣ１を使用したデータセットＡ、Ｂ、及びＣに関する結合動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、結合処理が、単一のコンピューティングデバイスで実行される単一のプロセスによって行われ、これは、プロセス間（及び潜在的にデバイス間）通信のオーバーヘッドを減少させる。
【０１０１】
図５Ｃは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ５２０に適用することを示す。図５Ｃに示すように、データフローグラフ５２０は、キーＡに関するフィルタリング動作を表すノード５２２と、その後に続く、キーＢに関する別のフィルタリング動作を表すノード５２４とを包含する。この例では、グラフオプティマイザは、それぞれのフィルタ動作を表す２つの別個のノード５２２及び５２４を、データフローグラフ５２５のノード５２６を用いて示されるように、キーＡ及びキーＢの両方に関してフィルタリングするフィルタ動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、フィルタリングが、単一のコンピューティングデバイスで実行される単一のプロセスによって行われ、これは、プロセス間（及び潜在的にデバイス間）通信のオーバーヘッドを減少させる。
【０１０２】
図５Ｄは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ５３０に適用することを示す。図５Ｄに示すように、データフローグラフ５３０は、キーＡに関するフィルタリング動作を表すノード５３２と、その後に続く、ロールアップ動作を表すノード５３４とを包含する。この例では、グラフオプティマイザは、２つの別個のノード５２２及び５２４を、データフローグラフ５３５のノード５３６を用いて示されるように、キーＡに関して選択された入力を処理するロールアップ動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、単一のデバイスで実行される単一のプロセスが、ロールアップ動作及びフィルタリング動作と同等のものを行うことができ、これは、プロセス間（及び潜在的にデバイス間）通信のオーバーヘッドを減少させる。
【０１０３】
図６は、不要なデータ処理動作を除去するために最適化ルールを説明のためのデータフローグラフ６００に適用することを示す。図６に示すように、データフローグラフ６００は、キーＡに関するソート動作を表すノード６０２と、その後に続く、再フォーマットコマンドを表すノード６０４と、その後に続く、無順序書き込みコマンドを表すノード６０６とを包含する。書き込みコマンドが無順序であり、従って、ノード６０２によって表されるソート動作によってデータに課される順序が、書き込み動作によって保持されない場合は、グラフオプティマイザは、ソート動作を表すノードを除去することができ、データフローグラフ６０５がもたらされる。
【０１０４】
図７は、本明細書に記載する技術の幾つかの実施形態による、幅減少最適化を行うために最適化ルールを説明のためのデータフローグラフ７００に適用することを示す。図７に示すように、データフローグラフ７００は、データ列Ａの値を列Ｂ及びＣに保存されたデータの論理「ｏｒ」として設定するノード７０２と、その後に続く、ノード７０２によって提供されたデータ列Ａに関するフィルタリング動作を表すノード７０４と、キーＤを使用したソーティング動作を表すノード７０６とを包含する。フィルタリング動作後に、データ列Ａは、下流の計算で使用されない場合がある。従って、幾つかの実施形態では、グラフオプティマイザは、データ列Ａのデータを、それがさらに伝播されないように、（例えば、データフローグラフ７０５のノード７０８を用いて示されるように、これらのデータをノード間のリンクに沿って移動するデータから削除するためのノードの導入により）除去することによって、幅減少最適化を行うことができる。これは、データフローグラフ７０５におけるノード７０４の下流の後続の計算を通してデータを運ぶために必要とされる計算資源の量を（例えば、利用されるネットワーク資源、メモリ資源、及び処理資源を減少させることによって）減少させる。
【０１０５】
図８Ａは、重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフ８００に適用することを示す。図８Ａに示すように、データフローグラフ８００は、共に同じ基礎ファイル（Ａ．ｄａｔ）からの読み取り動作を表すノード８０２及び８０４を包含する。グラフオプティマイザは、データが一度だけ読み取られるように、このような両ノードを（例えば、データフローグラフ８０５のノード８０６によって示されるような）単一のノードに置換することによって重複排除最適化を行うことができる。データが、後にデータフローグラフ８０５の複数の異なる部分で使用される場合であっても、同じデータにおいて二度読み取りを行わないことにより、データにアクセスするために使用されるコンピューティング資源の量が減少する。
【０１０６】
図８Ｂは、ジッパリングを用いて重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフ８１１に適用することを示す。図８Ｂに示すように、データフローグラフ８１１は、「Ａ．ｄａｔ」と呼ばれるファイルからデータを読み取るデータ処理動作を表すノード８１０を包含する。次いで、このデータは、２つの異なるブランチで処理される。第１のブランチは、（データ列「Ａ．ｆ」を取り出し、その列のデータに「１」を足す）ノード８１２と、（列「Ａ．ｋ」に関してデータをソートする）ノード８１４とを含有する。第２のブランチは、（データ列「Ａ．ｇ」を取り出し、その列のデータに「３」を掛ける）ノード８１６と、（列「Ａ．ｋ」に関してデータをソートする）ノード８１８とを含有する。図８Ａの例では、重複排除は、同一の処理（同じファイルから同じデータを読み取る）を行ったノードを除去することに関与するものであった。しかし、図８Ｂの例では、グラフ８１１の異なるブランチによって行われる処理は、同一ではない。しかし、これらの異なるブランチで行われる処理は、単一の経路へと折りたたむことが可能なほど十分に類似している。この折りたたみは、経路を左から右へ統合することによって行われ得る（ジッパーが両サイドを接続する様に似ている）。
【０１０７】
この例では、グラフオプティマイザは、ノード８１２及び８１６によって表される計算が、（並列ではなく）順次行われるように、グラフ８１１を変更し得る。その結果が、データフローグラフ８２１に示される。次に、グラフオプティマイザは、それぞれのソート動作を表すノード８２６及び８２８が、単一のノード８３６に統合されるように、グラフ８２１を変更し得る。その結果が、データフローグラフ８３１に示される。見て分かる通り、グラフ８３１のノードの数は、グラフ８１１と比較して減少しており、同じデータの処理を同じ場所で行うことができ、それによって、必要とされる計算資源が減少する。加えて、例えば、ノード８３２及び８３４によって表される動作を単一のノードに統合することによって、結果として生じたグラフ８３１にさらなる最適化を適用することができる。
【０１０８】
図９は、順次−並列最適化を行うために最適化ルールを説明のためのデータフローグラフ９００に適用することを示す。図９に示すように、データフローグラフ９００は、ｋ個の複数のコンピューティングデバイスにわたって以前に処理されたデータに適用されるシリアル化動作を表すノード９０２と、（キーＡに関する）ソーティングを表すノード９０４とを包含する。幾つかの実施形態では、データフローグラフオプティマイザは、シリアル化されたデータに適用される１つ又は複数の動作が、代わりに並列化された様式で適用されるように、データフローグラフを変更し得る。この例では、データフローグラフオプティマイザは、シリアル化動作を除去し、データフローグラフ９０５のノード９０６を用いて示されるように、ソーティングがｋに関して並列な形態で適用されることを可能にするように、グラフ９００を変更し得る。次いで、ｋ個の並列ソートの結果が、データフローグラフ９０５におけるノード９０８を用いて示されるように、マージ動作を使用して統合され得る。
【０１０９】
図１０Ａは、本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフ１０００を示す。図１０Ｂは、本明細書に記載する技術の幾つかの実施形態による、図１０Ａに示される初期データフローグラフに最適化ルールを反復的に適用することによって取得された、更新されたデータフローグラフ１０５０を示す。図１０Ａの初期データフローグラフ１０００及び図１０Ｂの更新されたデータフローグラフ１０５０を比較することによって分かるように、更新されたデータフローグラフは、初期データフローグラフよりも少ない数のノード及びリンクを有し、初期データフローグラフよりも、より効率的に実行され得る。本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフ１０００に適用される幾つかの最適化を以下に詳述する。
【０１１０】
図１０Ａ及び１０Ｂの説明のための例では、図１０Ｂの更新されたデータフローグラフ１０５０を生成するために、複数の統合動作最適化が、図１０Ａの初期データフローグラフ１０００に適用される。例えば、ノード１００２によって表されるデータ処理動作（「ｅｘｐｒ」−これは、ノード１００２を通って流れるデータに対して任意の適宜の計算を行うための式でもよく、この場合、出力のためにデータをフォーマットすることである）、及びノード１００４によって表される書き込みデータ処理動作（「ｗｒｉｔｅ＿ｆｉｌｅ」）が、これらのデータ処理動作の両方を行うように構成されたノード１０５４を含有する、更新されたデータフローグラフ１０５０の生成中に、統合動作最適化を用いて統合される。別の例として、ノード１００６によって表されるデータ処理動作（「ｅｘｐｒ」）及びノード１００８によって表されるフィルタデータ処理動作（「ｆｉｌｔｅｒ」）が、これらのデータ処理動作の両方を行うように構成されたノード１０５６を含有する、更新されたデータフローグラフ１０５０の生成中に、統合動作最適化を用いて統合される。さらに別の例として、ノード１０１０によって表されるデータ処理動作（「ｅｘｐｒ」）及びノード１０１２によって表される書き込みデータ処理動作（「ｗｒｉｔｅ＿ｆｉｌｅ」）が、これらのデータ処理動作の両方を行うように構成されたノード１０５８を含有する、更新されたデータフローグラフ１０５０の生成中に、統合動作最適化を用いて統合される。本明細書で述べた通り、幾つかの実施形態では、単一のデータフローグラフノードに関連付けられたデータ処理動作は、単一のコンピューティングデバイスで実行される単一のプロセスによって行われるため、ノードの統合は、プロセス間（及び潜在的にデバイス間）通信のオーバーヘッドを減少させ、このことは、データ処理システムの性能を向上させる。
【０１１１】
図１０Ａ及び１０Ｂの説明のための例では、図１０Ｂの更新されたデータフローグラフ１０５０を生成するために、冗長を減少させるための複数の最適化が、図１０Ａの初期データフローグラフ１０００に適用される。例えば、初期データフローグラフ１０００においてノード１０３０、１０３２、及び１０３４によって表されるソート動作は、更新されたデータフローグラフ１０５０では、除去され、同等のものを持たない。これらのソート動作は、これらのノードに入ってくるデータが、それぞれノード１０２２、１０２６、及び１０２８によって適用されたソーティング動作によって既にソートされているため、除去される。ノード１０２２、１０２６、及び１０２８における処理によって適用されたソートされた順序は、後続のデータ処理動作（例えば、ソートされたロールアップ動作）によって保持され、データのソートされた順序は、ノード１０３０、１０３２、及び１０３４におけるさらなるソーティングが不要となるように維持される。従って、ノード１０３０、１０３２、及び１０３４は、更新されたデータフローグラフ１０５０の生成中に除去される。一方、ノード１０２２、１０２６、及び１０２８によって表されるソーティング動作は保持される。例えば、初期データフローグラフ１０００におけるノード１０２２及び１０２６は、更新されたデータフローグラフ１０５０におけるノード１０７０及び１０７２に対応する。これに対して、ノード１０３６によって表されるソート動作は、それが、先行する完全な外部マージ結合動作がソートされた状態を保持しないため冗長ではないので、保持される（ノード１０７４は、更新されたデータフローグラフ１０５０における対応するノードである）。
【０１１２】
図１０Ａ及び１０Ｂは、不要なデータ処理動作を除去する別の例も示す。図１０Ａに示すように、初期データフローグラフ１０００は、最終的に無順序書き込みコマンドを表すノード１００４が後に続くソート動作を表すノード１０２４を包含する。書き込みコマンドが無順序であり、従って、ノード１０２４によって表されるソート動作によってデータに課される順序が、書き込み動作によって保持されない場合は、ソート動作を表すノード１０２４は、除去することができる。図１０Ｂから分かるように、ノード１０２４に対応するソート動作は存在しない（この動作は、除去されている）。
【０１１３】
不要なデータ処理動作を除去するさらに別の例として、初期データフローグラフ１０００は、ノード１０４０、１０４５、１０４６、及び１０４７によって表されるレイアウト及びパーティション動作を包含する（これらは、各々が、それぞれのレイアウト及びパーティションノードによって先行され、レイアウトがそうでなければ変化しないため、冗長である）。従って、これらのノードは、初期データフローグラフ１０００から除去される（対応するノードが、データフローグラフ１０５０に存在しない）。初期データフローグラフ１０００に適用される関連の最適化では、ノード１０４８によって表されるレイアウト及びパーティション動作は、ノード１０８８によって表される集約動作に置換される。これに対して、ノード１０４４によって表されるレイアウト及びパーティションデータ処理動作は、それが冗長ではないため保持され、これは、最終的なパーティショニング及びレイアウトを確立する責任を負っており、最終的なグラフ１０５０において、ノード１０８０（ｐａｒｔｉｔｉｏｎ＿ｂｙ＿ｋｅｙ）がもたらされる。
【０１１４】
図１０Ａ及び１０Ｂは、幅減少最適化の一例も示す。図１０Ｂの更新されたデータフローグラフ１０５０に示されるノード１０６４（「ｒｅｆｏｒｍａｔ＿ｉｍｐｌｉｃｉｔ」）の導入から分かるように、ノード１０１４によって表される読み取りデータ処理動作を用いて処理されるデータ列の数が減少する。この例では、読み取りデータの幾つかの列が、どの列が、ノード１０１２によって表される書き込み動作によって書き出されるかを決定することによって後に使用されないことをグラフオプティマイザが検出する。
【０１１５】
図１０Ｃは、本明細書に記載する技術の幾つかの実施形態による、図１０Ａの初期データフローグラフ１０００の別の表示を示す。この表示では、データフローグラフノードのラベルが、それらの頭字語に置き換えられている。同様に、図１０Ｄは、図１０Ｂの更新されたデータフローグラフの別の表示を示す（この表示では、データフローグラフノードのラベルが、それらの頭字語に置き換えられている）。
【０１１６】
図１１は、本明細書に記載される技術が実施され得る適宜のコンピューティングシステム環境１１００の一例を示す。コンピューティングシステム環境１１００は、適宜のコンピューティング環境の一例にすぎず、本明細書に記載する技術の使用又は機能性の範囲に関して何ら制限を示唆することを意図したものではない。コンピューティング環境１１００は、例示的動作環境１１００に図示されるコンポーネントの何れか１つ又は組み合わせに関する依存性又は要件を有すると解釈されるべきものでもない。
【０１１７】
本明細書に記載する技術は、多数の他の汎用又は専用コンピューティングシステムの環境又は構成と共に使用可能である。本明細書に記載する技術と共に使用するのに適し得る周知のコンピューティングシステム、環境、及び／又は構成の例には、限定されることはないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又はデバイスの何れかを包含する分散コンピューティング環境などが包含される。
【０１１８】
コンピューティング環境は、プログラムモジュールなどのコンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。本明細書に記載する技術は、通信ネットワークを通してリンクされるリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実行されてもよい。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを包含するローカル及びリモートコンピュータストレージ媒体の両方に位置していてもよい。
【０１１９】
図１１を参照して、本明細書に記載する技術を実施する例示的システムは、コンピュータ１１１０の形態の汎用コンピューティングデバイスを包含する。コンピュータ１１１０のコンポーネントは、限定されないが、処理装置１１２０、システムメモリ１１３０、及びシステムメモリを包含する様々なシステムコンポーネントを処理装置１１２０に結合するシステムバス１１２１を包含してもよい。システムバス１１２１は、様々なバスアーキテクチャの何れかを使用した、メモリバス又はメモリコントローラ、周辺バス、及びローカルバスを包含する幾つかのタイプのバス構造の何れかであってもよい。例として、及び限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）（ＶＥＳＡ）ローカルバス、及びメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスが包含される。
【０１２０】
コンピュータ１１１０は、一般的に、様々なコンピュータ可読媒体を包含する。コンピュータ可読媒体は、コンピュータ１１１０によってアクセスすることができる任意の入手可能な媒体でよく、及び揮発性及び不揮発性両方の媒体、リムーバブル及び非リムーバブル媒体を包含する。例として、及び限定ではなく、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報のストレージのための任意の方法又は技術で実施される、揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を包含する。コンピュータストレージ媒体には、限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）又は他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、又は所望の情報を保存するために使用することができ、且つコンピュータ１１１０によってアクセスすることができるその他の媒体が包含される。通信媒体は、一般的に、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを搬送波又は他のトランスポート機構などの変調データ信号で具現化し、及びあらゆる情報配信媒体を包含する。「変調データ信号」という用語は、それの特性集合の１つ又は複数を有する、又は信号の情報をエンコードするように変更された信号を意味する。例として、及び限定ではなく、通信媒体には、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、ＲＦ、赤外線、及び他の無線媒体などの無線媒体が包含される。上記の何れかの組み合わせも、コンピュータ可読媒体の範囲内に包含されるものとする。
【０１２１】
システムメモリ１１３０は、読み出し専用メモリ（ＲＯＭ）１１３１及びランダムアクセスメモリ（ＲＡＭ）１１３２などの揮発性及び／又は不揮発性メモリの形態のコンピュータストレージ媒体を包含する。起動時などに、コンピュータ１１１０内の素子間で情報を転送することを助ける基本ルーチンを含有した、基本入出力システム１１３３（ＢＩＯＳ）は、一般的に、ＲＯＭ１１３１内に保存される。ＲＡＭ１１３２は、一般的に、即座に利用できる、及び／又は処理装置１１２０によって現在操作されているデータ及び／又はプログラムモジュールを含有する。例として、及び限定ではなく、図１１は、オペレーティングシステム１１３４、アプリケーションプログラム１１３５、他のプログラムモジュール１０３６、及びプログラムデータ１１３７を図示する。
【０１２２】
コンピュータ１１１０は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージ媒体も包含することができる。単なる例として、図１１は、非リムーバブル、不揮発性磁気媒体に対する読み取り又は書き込みを行うハードディスクドライブ１１４１、フラッシュメモリなどのリムーバブル、不揮発性メモリ１１５２に対する読み取り又は書き込みを行うフラッシュドライブ１１５１、及びＣＤ−ＲＯＭ又は他の光学媒体などのリムーバブル、不揮発性光ディスク１１５６に対する読み取り又は書き込みを行う光ディスクドライブ１１５５を図示する。例示的動作環境において使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージ媒体には、限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどが包含される。ハードディスクドライブ１１４１は、一般的に、インタフェース１１４０などの非リムーバブルメモリインタフェースを通してシステムバス１１２１に接続され、及び磁気ディスクドライブ１１５１及び光ディスクドライブ１１５５は、一般的に、インタフェース１１５０などのリムーバブルメモリインタフェースによってシステムバス１１２１に接続される。
【０１２３】
上述した、及び図１１に図示したドライブ及びそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ１１１０の他のデータのストレージを提供する。図１１においては、例えば、ハードディスクドライブ１１４１は、オペレーティングシステム１１４４、アプリケーションプログラム１１４５、他のプログラムモジュール１１４６、及びプログラムデータ１１４７を保存するものとして図示される。これらのコンポーネントは、オペレーティングシステム１１３４、アプリケーションプログラム１１３５、他のプログラムモジュール１１３６、及びプログラムデータ１１３７と同じであってもよいし、或いは異なっていてもよいことに留意されたい。オペレーティングシステム１１４４、アプリケーションプログラム１１４５、他のプログラムモジュール１１４６、及びプログラムデータ１１４７は、少なくとも、それらが異なるコピーであることを図示するために、ここでは、異なる番号が付与されている。ユーザは、キーボード１１６２及び一般にマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス１１６１などの入力デバイスによって、コンピュータ１１１０にコマンド及び情報を入力することができる。他の入力デバイス（不図示）には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが包含され得る。これら及び他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース１１６０によって、処理装置１１２０に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェース及びバス構造によって接続されてもよい。モニタ１１９１又は他のタイプのディスプレイデバイスも、ビデオインタフェース１１９０などのインタフェースを介して、システムバス１１２１に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース１１９５を通して接続することができる、スピーカ１１９７及びプリンタ１１９６などの他の周辺出力デバイスも包含することができる。
【０１２４】
コンピュータ１１１０は、リモートコンピュータ１１８０などの１つ又は複数のリモートコンピュータへの論理接続を用いたネットワーク化環境で動作することができる。リモートコンピュータ１１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、又は他の共通ネットワークノードでもよく、及び一般的に、図１１ではメモリストレージデバイス１１８１のみが図示されているが、コンピュータ１１１０に関連して上記した素子の多く又は全てを包含する。図１１に描かれる論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１７１及び広域ネットワーク（ＷＡＮ）１１７３を包含するが、他のネットワークも包含してもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて、ありふれたものである。
【０１２５】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１１０は、ネットワークインタフェース又はアダプタ１１７０を通してＬＡＮ１１７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１１０は、一般的に、モデム１１７２、又はインターネットなどのＷＡＮ１１７３上で通信を確立するための他の手段を包含する。内部又は外部のものでもよいモデム１１７２は、ユーザ入力インタフェース１１６０又は他の適宜の機構を介して、システムバス１１２１に接続されてもよい。ネットワーク化環境において、コンピュータ１１１０に関連して描かれたプログラムモジュール、又はそれらの一部は、リモートメモリストレージデバイスに保存されてもよい。例として、及び限定ではなく、図１１は、メモリデバイス１１８１に常駐しているとして、リモートアプリケーションプログラム１１８５を図示する。示されるネットワーク接続は、例示的なものであり、及びコンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されるだろう。
【０１２６】
本発明の少なくとも１つの実施形態の幾つかの態様を上記のように記載したが、様々な変更、修正、及び改良が、当業者には容易に思い付くことが理解されるものとする。
【０１２７】
このような変更、修正、及び改良は、本開示の一部であることが意図され、及び本発明の精神及び範囲内であることが意図される。さらに、本発明の利点が示されるが、本明細書に記載の技術の全ての実施形態が、全ての記載した利点を包含するわけではないことが理解されるものとする。幾つかの実施形態は、本明細書において有利であると記載された何れの特徴も実施しない場合があり、場合によっては、記載された特徴の１つ又は複数が、さらなる実施形態を得るために実施されてもよい。従って、上記の記載及び図面は、単なる例である。
【０１２８】
本明細書に記載の技術の上記実施形態は、多数のやり方の何れで実施されてもよい。例えば、これらの実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを用いて実施されてもよい。ソフトウェアで実施される場合には、ソフトウェアコードは、単一のコンピュータにおいて提供されていようと、複数のコンピュータ間で分散されていようと、任意の適宜のプロセッサ又は一群のプロセッサ上で実行することができる。このようなプロセッサは、集積回路として実施されてもよく、業界において、ＣＰＵチップ、ＧＰＵチップ、マイクロプロセッサ、マイクロコントローラ、又はコプロセッサなどの名称で知られている市販の集積回路コンポーネントを包含する集積回路コンポーネントにおいて、１つ又は複数のプロセッサを有する。代替的に、プロセッサは、ＡＳＩＣなどのカスタム回路、又はプログラマブル論理デバイスの構成に起因するセミカスタム回路において実施されてもよい。又さらなる代替手段として、プロセッサは、市販、セミカスタム、或いはカスタムであろうと、より大きな回路又は半導体デバイスの一部であってもよい。ある具体例として、幾つかの市販のマイクロプロセッサは、複数のコアの１つ又はサブセットがプロセッサを構成することができるように、複数のコアを有する。しかし、プロセッサは、任意の適宜のフォーマットの回路を使用して実施することができる。
【０１２９】
さらに、コンピュータは、ラックマウント式コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの多数の形態の何れかで具現化されてもよいことが理解されるものとする。追加的に、コンピュータは、携帯情報端末（ＰＤＡ）、スマートフォン、又は任意のその他の適宜のポータブル又は固定電子デバイスを包含する、一般にコンピュータとは見なされないが、適宜の処理能力を備えたデバイスに組み込まれてもよい。
【０１３０】
又、コンピュータは、１つ又は複数の入力デバイス及び出力デバイスを有していてもよい。これらのデバイスは、特に、ユーザインタフェースを提示するために使用することができる。ユーザインタフェースを提供するために使用することができる出力デバイスの例には、出力の視覚的表現のためのプリンタ又はディスプレイスクリーン、及び出力の可聴表現のためのスピーカ又は他の音生成デバイスが包含される。ユーザインタフェースに使用することができる入力デバイスの例には、キーボード、並びにマウス、タッチパッド、及びデジタイザタブレットなどのポインティングデバイスが包含される。別の例として、コンピュータは、音声認識により、又は他の可聴フォーマットで入力情報を受信してもよい。
【０１３１】
このようなコンピュータは、企業ネットワーク又はインターネットなどのローカルエリアネットワーク又は広域ネットワークとして包含する、任意の適宜の形態の１つ又は複数のネットワークによって相互接続することができる。このようなネットワークは、任意の適宜の技術に基づいてもよく、及び任意の適宜のプロトコルに従って動作してもよく、及び無線ネットワーク、有線ネットワーク、又は光ファイバネットワークを包含してもよい。
【０１３２】
又、本明細書に概要が述べられる様々な方法又はプロセスは、様々なオペレーティングシステム又はプラットフォームの何れか１つを用いる１つ又は複数のプロセッサに対して実行可能なソフトウェアとして符号化されてもよい。追加的に、このようなソフトウェアは、多数の適宜のプログラミング言語及び／又はプログラミング又はスクリプト作成ツールの何れかを使用して書かれてもよく、及びフレームワーク又は仮想マシンに対して実行される実行可能マシン語コード又は中間コードとしてコンパイルされてもよい。
【０１３３】
この点において、本発明は、１つ又は複数のコンピュータ又は他のプロセッサに対して実行されると、上述の本発明の様々な実施形態を実施する方法を行う１つ又は複数のプログラムでエンコードされたコンピュータ可読ストレージ媒体（又は複数のコンピュータ可読媒体）（例えば、コンピュータメモリ、１つ又は複数のフロッピーディスク、コンパクトディスク（ＣＤ）、光ディスク、デジタルビデオディスク（ＤＶＤ）、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ又は他の半導体デバイスにおける回路構成、又は他の有形コンピュータストレージ媒体）として具現化されてもよい。上記の例から明らかなように、コンピュータ可読ストレージ媒体は、非一時的な形態でコンピュータ実行可能命令を提供するのに十分な時間の間、情報を保持することができる。このような１つ又は複数のコンピュータ可読ストレージ媒体は、それ（ら）に保存された１つ又は複数のプログラムを、上述のような本発明の様々な態様を実施するために、１つ又は複数の異なるコンピュータ又は他のプロセッサにロードすることができるように、可搬であってもよい。本明細書においては、「コンピュータ可読ストレージ媒体」という用語は、製品（すなわち、製造物）又はマシンであると見なすことができる非一時的コンピュータ可読媒体のみを網羅する。代替的又は追加的に、本発明は、伝搬信号などの、コンピュータ可読ストレージ媒体以外のコンピュータ可読媒体として具現化されてもよい。
【０１３４】
「プログラム」又は「ソフトウェア」という用語は、本明細書では、上述のような本発明の様々な態様を実施するようにコンピュータ又は他のプロセッサをプログラムするために使用することができる、あらゆるタイプのコンピュータコード又はコンピュータ実行可能命令のセットを指すために総称的に使用される。追加的に、本実施形態のある態様によれば、実行されると、本発明の方法を行う１つ又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに常駐する必要はなく、本発明の様々な態様を実施するために、多数の異なるコンピュータ又はプロセッサ間で、モジュラー方式で分散されてもよいことが理解されるものとする。
【０１３５】
コンピュータ実行可能命令は、１つ又は複数のコンピュータ又は他のデバイスによって実行される、プログラムモジュールなどの多くの形態のものでもよい。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。一般的に、プログラムモジュールの機能性は、様々な実施形態において、要望通りに組み合わせられてもよいし、或いは分散されてもよい。
【０１３６】
又、データ構造は、任意の適宜の形態でコンピュータ可読媒体に保存されてもよい。図示を簡単にするために、データ構造は、データ構造内の場所によって関連したフィールドを有して示される場合がある。このような関係は、同様に、フィールドのストレージにフィールド間の関係を伝達するコンピュータ可読媒体内の場所を割り当てることによって、達成することができる。但し、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用によることを包含する、任意の適宜の機構を使用して、データ構造のフィールドにおける情報間の関係を確立してもよい。
【０１３７】
本発明の様々な態様は、単独で、組み合わせて、又は上記に記載した実施形態において具体的に述べられていない様々な配置で使用されてもよく、従って、その適用において、上記の説明に記載された、又は図面に図示されたコンポーネントの詳細及び配置に限定されない。例えば、ある実施形態に記載した態様は、任意の様式で、他の実施形態に記載した態様と組み合わせることができる。
【０１３８】
又、本発明は、一例を提供した方法として具現化されてもよい。この方法の一部として行われるアクトは、任意の適宜のやり方で、順序付けが行われてもよい。従って、アクトが、図示されたものとは異なる順序で（これは、説明のための実施形態では、逐次的なアクトとして示されたとしても、幾つかのアクトを同時に行うことを包含してもよい）行われる実施形態が構築されてもよい。
【０１３９】
さらに、幾つかの行為は、「ユーザ」によって行われると記載される。「ユーザ」は、一人の個人である必要はなく、及び幾つかの実施形態では、「ユーザ」に帰する行為は、複数の個人から成るチーム及び／又はコンピュータ支援ツール又は他の機構と組み合わせた個人によって行われてもよいことが理解されるものとする。
【０１４０】
クレーム要素を修飾する、クレームにおける「第１の」、「第２の」、「第３の」などの序数用語の使用は、それ自体は、１つのクレーム要素の別のクレーム要素に対する優先、先行、又は順序、又は方法のアクトが行われる時間的順序を暗示せず、ある名称を有する１つのクレーム要素を、同じ名称（序数用語の使用を除き）を有する別の要素と区別するための単なるラベルとして使用することにより、これらのクレーム要素が区別される。
【０１４１】
又、本明細書において使用される表現及び用語は、説明目的のものであり、及び限定として見なされるものではない。本明細書における、「包含する（ｉｎｃｌｕｄｉｎｇ）」、「含む（ｃｏｍｐｒｉｓｉｎｇ）」、又は「有する（ｈａｖｉｎｇ）」、「含有する（ｃｏｎｔａｉｎｉｎｇ）」、「関与する（ｉｎｖｏｌｖｉｎｇ）」、及びそれらのバリエーションの使用は、その後にリストされるアイテム及びそれらの均等物、並びに追加のアイテムを網羅することを意味する。
【符号の説明】
【０１４２】
１００  データ処理システム
１０２−１  データ記憶装置
１０２−２  データ記憶装置
１０４  クエリー入力モジュール
１０６  クエリープランジェネレータ
１０８  データフローグラフジェネレータ
１１０  グラフオプティマイザ
１１２  モジュール
１１５  グラフ実行エンジン
【図１Ａ】
2021525925.tif 000003
【図１Ｂ】
2021525925.tif 000004
【図２】
2021525925.tif 000005
【図３Ａ】
2021525925.tif 000006
【図３Ｂ】
2021525925.tif 000007
【図３Ｃ】
2021525925.tif 000008
【図３Ｄ】
2021525925.tif 000009
【図４Ａ】
2021525925.tif 000010
【図４Ｂ】
2021525925.tif 000011
【図５Ａ】
2021525925.tif 000012
【図５Ｂ】
2021525925.tif 000013
【図５Ｃ】
2021525925.tif 000014
【図５Ｄ】
2021525925.tif 000015
【図６】
2021525925.tif 000016
【図７】
2021525925.tif 000017
【図８Ａ】
2021525925.tif 000018
【図８Ｂ】
2021525925.tif 000019
【図９】
2021525925.tif 000020
【図１０Ａ】
2021525925.tif 000021
【図１０Ｂ】
2021525925.tif 000022
【図１０Ｃ】
2021525925.tif 000023
【図１０Ｄ】
2021525925.tif 000024
【図１１】
2021525925.tif 000025
【国際調査報告】
2021525925.tif 000026
2021525925.tif 000027
2021525925.tif 000028