(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024107001
(43)【公開日】2024-08-08
(54)【発明の名称】データフローグラフ最適化のシステム及び方法
(51)【国際特許分類】
G06F 16/2453 20190101AFI20240801BHJP
【FI】
G06F16/2453
【審査請求】有
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024075264
(22)【出願日】2024-05-07
(62)【分割の表示】P 2020567012の分割
【原出願日】2019-05-22
(31)【優先権主張番号】15/993,284
(32)【優先日】2018-05-30
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ガース・アレン・ディッキー
(57)【要約】
【課題】データフローグラフを最適化する。
【解決手段】方法は、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含む、生成することとを含む。
【選択図】
図2
【特許請求の範囲】
【請求項1】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第1のコンピュータシステムプロセスを用いて前記第1のデータ処理動作を実行し、及び前記第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、前記第2のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項2】
前記プロセッサ実行可能命令が、前記少なくとも1つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせる、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項3】
前記更新されたデータフローグラフを実行することが、前記割り当てられた1つ又は複数の処理レイアウトに従って行われる、請求項2に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項4】
前記第2の複数のノードが、前記第1の複数のノードよりも少ない数のノードを有する、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項5】
前記第2の複数のリンクが、前記第1の複数のリンクよりも少ない数のリンクを有する、請求項4に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項6】
前記更新されたデータフローグラフを生成することが、
第1の最適化ルールを選択することと、
前記第1の最適化ルールを適用する前記初期データフローグラフの第1の部分を識別することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと、
を含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項7】
前記更新されたデータフローグラフを生成することが、
前記第1の最適化ルールとは異なる第2の最適化ルールを選択することと、
前記第2の最適化ルールを適用する前記初期データフローグラフの第2の部分を識別することと、
前記第2の最適化ルールを前記初期データフローグラフの前記第2の部分に適用することと、
をさらに含む、請求項6に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項8】
前記初期データフローグラフの前記第1の部分を識別することが、データフロー部分グラフパターンマッチング言語を用いて行われる、請求項6に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項9】
前記初期データフローグラフの前記第1の部分を識別することが、第1のノードに接続される第2のノードによって表される第2のデータ処理動作と交換する第1のデータ処理動作を表す前記第1のノードを識別することを含む、請求項6に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項10】
前記第1の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項6に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項11】
更新されたデータフローグラフを生成することが、冗長動作を表す第1のノードを識別することと、前記第1のノードを前記初期データフローグラフから除去することと、を含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項12】
更新されたデータフローグラフを生成することが、それぞれのソートデータ処理動作を表す、前記初期データフローグラフにおける2つのノードを識別することと、前記2つのノードを、ソートデータ処理動作を表す単一のノードに置換することと、を含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項13】
前記2つのノードが、前記初期データフローグラフにおいて、互いに隣接していない、請求項12に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項14】
更新されたデータフローグラフを生成することが、第1のデータ処理動作を表す第1のノードを、前記第1のデータ処理動作よりも弱いタイプの第2のデータ処理動作を表す第2のノードに置換することを含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項15】
更新されたデータフローグラフを生成することが、それぞれの結合データ処理動作を表す、前記初期データフローグラフにおける2つのノードを識別することと、前記2つのノードを、結合データ処理動作を表す単一のノードに置換することと、を含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項16】
前記自動的に生成された初期データフローグラフを取得することが、前記初期データフローグラフを自動的に生成することを含む、請求項1に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項17】
前記初期データフローグラフを自動的に生成することが、
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
を含む、請求項16に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項18】
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第1のコンピュータシステムプロセスを用いて前記第1のデータ処理動作を実行し、及び前記第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、前記第2のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行うために、少なくとも1つのコンピュータハードウェアプロセッサを使用することを含む、方法。
【請求項19】
前記更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当てることをさらに含み、
前記実行することが、前記割り当てられた1つ又は複数の処理レイアウトに従って行われる、請求項18に記載の方法。
【請求項20】
前記更新されたデータフローグラフを生成することが、
第1の最適化ルールを選択することと、
前記第1の最適化ルールを適用する前記初期データフローグラフの第1の部分を識別することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと、
を含む、請求項18に記載の方法。
【請求項21】
前記初期データフローグラフの前記第1の部分を識別することが、第1のノードに接続される第2のノードによって表される第2のデータ処理動作と交換する第1のデータ処理動作を表す前記第1のノードを識別することを含む、請求項20に記載の方法。
【請求項22】
前記第1の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項20に記載の方法。
【請求項23】
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに含む、請求項18に記載の方法。
【請求項24】
少なくとも1つのコンピュータハードウェアプロセッサと、
前記少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含する、生成することと、
少なくとも部分的に、第1のコンピュータシステムプロセスを用いて前記第1のデータ処理動作を実行し、及び前記第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、前記第2のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、
を含む、データ処理システム。
【請求項25】
前記プロセッサ実行可能命令が、前記少なくとも1つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当てることをさらに行わせ、
前記実行することが、前記割り当てられた1つ又は複数の処理レイアウトに従って行われる、請求項24に記載のデータ処理システム。
【請求項26】
前記更新されたデータフローグラフを生成することが、
第1の最適化ルールを選択することと、
前記第1の最適化ルールを適用する前記初期データフローグラフの第1の部分を識別することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと、
を含む、請求項24に記載のデータ処理システム。
【請求項27】
前記初期データフローグラフの前記第1の部分を識別することが、第1のノードに接続される第2のノードによって表される第2のデータ処理動作と交換する第1のデータ処理動作を表す前記第1のノードを識別することを含む、請求項26に記載のデータ処理システム。
【請求項28】
前記第1の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項27に記載のデータ処理システム。
【請求項29】
前記プロセッサ実行可能命令が、前記少なくとも1つのコンピュータハードウェアプロセッサに、
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項24に記載のデータ処理システム。
【請求項30】
自動的に生成された初期データフローグラフを取得するための手段であって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、自動的に生成された初期データフローグラフを取得するための手段と、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成するための手段であって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含する、更新されたデータフローグラフを生成するための手段と、
少なくとも部分的に、第1のコンピュータシステムプロセスを用いて前記第1のデータ処理動作を実行し、及び前記第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、前記第2のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行するための手段と、
を含む、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項31】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含し、前記生成することが、
少なくとも部分的に、第1のノードに接続される第2のノードによって表される第2のデータ処理動作と交換する第1のデータ処理動作を表す前記第1のノードを識別することによって、第1の最適化ルールを適用する前記初期データフローグラフの第1の部分を識別することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと、
を含む、生成することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項32】
前記プロセッサ実行可能命令が、前記少なくとも1つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせ、
前記実行することが、前記割り当てられた1つ又は複数の処理レイアウトに従って行われる、請求項31に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項33】
前記第1のデータ処理動作がソート動作である、請求項31に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項34】
前記第1の最適化ルールを適用することが、冗長データ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項31に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項35】
前記プロセッサ実行可能命令が、少なくとも1つのコンピュータハードウェアプロセッサに、
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項31に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項36】
少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、前記少なくとも1つのコンピュータハードウェアプロセッサに、
自動的に生成された初期データフローグラフを取得することであって、前記初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、
前記初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、前記第2の複数のノードが、第1のデータ処理動作を表すノードと、前記第2のデータ処理動作を表す別のノードと、を包含し、前記生成することが、
冗長データ処理動作の除去、強度低下最適化、幅減少最適化、及び重複排除最適化の中から、前記初期データフローグラフの第1の部分に適用する第1の最適化ルールを選択することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと、
を含む、生成することと、
を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項37】
前記プロセッサ実行可能命令が、前記少なくとも1つのコンピュータハードウェアプロセッサに、
前記更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当てること、
をさらに行わせ、
前記実行することが、前記割り当てられた1つ又は複数の処理レイアウトに従って行われる、請求項36に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【請求項38】
前記プロセッサ実行可能命令が、少なくとも1つのコンピュータハードウェアプロセッサに、
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと、
をさらに行わせる、請求項36に記載の少なくとも1つの非一時的コンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データフローグラフ最適化のシステム及び方法に関する。
【背景技術】
【0002】
データ処理システムは、1つ又は複数のコンピュータプログラムを使用して、データを処理し得る。データ処理システムによって利用されるコンピュータプログラムの1つ又は複数は、データフローグラフとして展開され得る。データフローグラフは、入力データに対して行われるデータ処理動作、及びデータのフローを表すコンポーネント間のリンクを表す、「ノード」又は「節点」と呼ばれるコンポーネントを包含し得る。データフローグラフのノードは、各入力データセットを表す1つ又は複数の入力ノード、各出力データセットを表す1つ又は複数の出力ノード、及びデータに対して行われるデータ処理動作を表す1つ又は複数のノードを包含し得る。データフローグラフによってエンコードされる計算を実行するための技術が、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行(Executing Computations Expressed as Graphs)」というタイトルの米国特許第5,966,072号明細書、及び「グラフベース計算のパラメータ管理(Managing Parameters for Graph-Based Computations)」というタイトルの米国特許第7,716,630号明細書に記載されている。
【発明の概要】
【課題を解決するための手段】
【0003】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、第2の複数のノードが、第1のデータ処理動作を表すノードと、第2のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第1のコンピュータシステムプロセスを用いて第1のデータ処理動作を実行し、及び第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、第2のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、を含む、データ処理システムに向けられる。
【0004】
幾つかの実施形態は、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、第2の複数のノードが、第1のデータ処理動作を表すノードと、第2のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第1のコンピュータシステムプロセスを用いて第1のデータ処理動作を実行し、及び第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、第2のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行うために、少なくとも1つのコンピュータハードウェアプロセッサを使用することを含む、方法に向けられる。
【0005】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに、自動的に生成された初期データフローグラフを取得することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、取得することと、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、第2の複数のノードが、第1のデータ処理動作を表すノードと、第2のデータ処理動作を表す別のノードと、を包含する、生成することと、少なくとも部分的に、第1のコンピュータシステムプロセスを用いて第1のデータ処理動作を実行し、及び第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、第2のデータ処理動作を実行することにより、更新されたデータフローグラフを実行することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【0006】
幾つかの実施形態は、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体であって、プロセッサ実行可能命令が、自動的に生成された初期データフローグラフを取得するための手段であって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードと、第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクと、を含む、自動的に生成された初期データフローグラフを取得するための手段と、初期データフローグラフを更新するために、データフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成するための手段であって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクと、を含み、第2の複数のノードが、第1のデータ処理動作を表すノードと、第2のデータ処理動作を表す別のノードと、を包含する、更新されたデータフローグラフを生成するための手段と、少なくとも部分的に、第1のコンピュータシステムプロセスを用いて第1のデータ処理動作を実行し、及び第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて、第2のデータ処理動作を実行することにより、更新されたデータフローグラフを実行するための手段と、を含む、少なくとも1つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【0007】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに、構造化照会言語(SQL)クエリーを取得することと、SQLクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも1つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードを含む、更新されたデータフローグラフを生成することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体と、を含む、データ処理システムに向けられる。
【0008】
幾つかの実施形態は、構造化照会言語(SQL)クエリーを取得することと、SQLクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも1つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードを含む、更新されたデータフローグラフを生成することと、を行うために、少なくとも1つのコンピュータハードウェアプロセッサを使用することを含む、方法に向けられる。
【0009】
幾つかの実施形態は、少なくとも1つのコンピュータハードウェアプロセッサによって実行されると、少なくとも1つのコンピュータハードウェアプロセッサに、構造化照会言語(SQL)クエリーを取得することと、SQLクエリーのクエリープランを生成することと、クエリープランを使用して、初期データフローグラフを生成することであって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードを含む、初期データフローグラフを生成することと、初期データフローグラフを更新するために、少なくとも1つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成することであって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードを含む、更新されたデータフローグラフを生成することと、を行わせる、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【0010】
幾つかの実施形態は、プロセッサ実行可能命令を保存した、少なくとも1つの非一時的コンピュータ可読ストレージ媒体であって、プロセッサ実行可能命令が、構造化照会言語(SQL)クエリーを取得するための手段と、SQLクエリーのクエリープランを生成するための手段と、クエリープランを使用して、初期データフローグラフを生成する手段であって、初期データフローグラフが、第1の複数のデータ処理動作を表す第1の複数のノードを含む、初期データフローグラフを生成するための手段と、初期データフローグラフを更新するために、少なくとも1つのデータフローグラフ最適化ルールを使用することにより、更新されたデータフローグラフを生成するための手段であって、更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードを含む、更新されたデータフローグラフを生成するための手段と、を含む、少なくとも1つの非一時的コンピュータ可読ストレージ媒体に向けられる。
【0011】
上記は、添付の特許請求の範囲によって定義される本発明の非限定的概要である。
【0012】
以下の図面を参照して、様々な態様及び実施形態を説明する。これらの図面は、必ずしも一定の縮尺で描かれていないことが理解されるものとする。複数の図面に現れるアイテムは、それらが現れる全ての図面において、同じ又は類似の参照番号で示される。
【図面の簡単な説明】
【0013】
【
図1A】本明細書に記載の技術の幾つかの実施形態が動作し得る、説明のためのコンピューティング環境のブロック図である。
【
図1B】本明細書に記載する技術の幾つかの実施形態による、入力構造化照会言語(SQL)クエリーからデータフローグラフを自動的に生成する、説明のためのプロセスのフローチャートである。
【
図2】本明細書に記載する技術の幾つかの実施形態による、入力SQLクエリーからデータフローグラフを自動的に生成する、説明のためのプロセス200のフローチャートである。
【
図3A】本明細書に記載する技術の幾つかの実施形態による、1つ又は複数の冗長データ処理動作を除去するために、最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図3B】本明細書に記載する技術の幾つかの実施形態による、最適化ルールを別の説明のためのデータフローグラフに適用することを容易にするために、交換データ処理動作の順序を変えることを示す。
【
図3C】本明細書に記載する技術の幾つかの実施形態による、1つ又は複数の冗長データ処理動作を除去するために最適化ルールを別の説明のためのデータフローグラフに適用することを示す。
【
図3D】本明細書に記載する技術の幾つかの実施形態による、1つ又は複数の冗長データ処理動作を除去するために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【
図4A】本明細書に記載する技術の幾つかの実施形態による、強度低下最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図4B】本明細書に記載する技術の幾つかの実施形態による、別の強度低下最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図5A】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図5B】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフに適用することを示す。
【
図5C】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【
図5D】本明細書に記載する技術の幾つかの実施形態による、統合動作最適化を行うために最適化ルールをさらに別の説明のためのデータフローグラフに適用することを示す。
【
図6】本明細書に記載する技術の幾つかの実施形態による、参照されないデータ処理動作を除去するために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図7】本明細書に記載する技術の幾つかの実施形態による、幅減少最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図8A】本明細書に記載する技術の幾つかの実施形態による、重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図8B】本明細書に記載する技術の幾つかの実施形態による、ジッパリング(zippering)を用いて重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図9】本明細書に記載する技術の幾つかの実施形態による、順次-並列最適化を行うために最適化ルールを説明のためのデータフローグラフに適用することを示す。
【
図10A】本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフを示す。
【
図10B】本明細書に記載する技術の幾つかの実施形態による、
図10Aに示される初期データフローグラフに最適化ルールを反復的に適用することによって取得された、更新されたデータフローグラフを示す。
【
図10C】本明細書に記載する技術の幾つかの実施形態による、
図10Aの初期データフローグラフの別の表示を示す。
【
図10D】本明細書に記載する技術の幾つかの実施形態による、
図10Bの更新されたデータフローグラフの別の表示を示す。
【
図11】本明細書に記載する技術の幾つかの実施形態の実施に使用することができる、説明のためのコンピューティングシステム環境のブロック図である。
【発明を実施するための形態】
【0014】
本明細書に記載する技術の局面は、データフローグラフを用いてデータ処理動作を行うための従来の技術を改良することによって、データ処理システムの速度、スループット、及び正確さを向上させることに関係する。
【0015】
一部のデータ処理システムは、データフローグラフを使用してデータを処理する。多くの場合、データフローグラフは、手作業で指定されるのではなく、自動的に生成される。例えば、一部のデータ処理システムは、構造化照会言語(SQL)クエリーからデータフローグラフを自動的に生成し得る。このような場合、ユーザ又はコンピュータプログラムが、入力SQLクエリーをデータ処理システムに提供することができ、データ処理システムは、SQLクエリーからデータフローグラフを生成し、及び生成されたデータフローグラフを実行することによって、SQLクエリーを実行することができる。別の例として、データ処理システムは、ユーザ又はコンピュータプログラムから、入力クエリーの表現(この表現は、SQLクエリーではない)を受信し、クエリーの表現からデータフローグラフを自動的に生成し得る。さらに別の例として、データ処理システムは、別のデータ処理システムから入力データフローグラフを受信し得る。入力データフローグラフは、(この入力データフローグラフが他のデータ処理システムにおいて実行に適し得る場合であっても)このデータ処理システムにおいて実行に適さない場合がある。従って、データ処理システムは、入力データフローグラフから、そのデータ処理システムでの実行に適した新しいデータフローグラフを生成する。
【0016】
本発明者らは、データフローグラフを(例えば、上述のようなSQLクエリー、他のクエリー表現、又は入力データフローグラフから)自動的に生成する従来の技術が改良され得ることを認識した。自動的に生成されたデータフローグラフは、データ処理システムで実行され得るが、データフローグラフを自動的に生成する従来の技術は、その実行が多大な計算資源(例えば、プロセッサ資源、メモリ資源、ネットワーク資源など)及びかなりの時間を必要とするデータフローグラフを生じさせる。例えば、自動的に生成されたデータフローグラフは、(1)冗長データ処理動作を表すノードを包含する場合があり、(2)結果が後に使用されないデータ処理動作を行うことを必要とする場合があり、(3)並列処理が可能である場合に順次処理を無用に行うことを必要とする場合があり、(4)所望の結果を取得するために必要とされるよりも多くのデータにデータ処理動作を適用する場合があり、(5)複数のノードにわたり計算を発生させる場合があり、これは、各データフローグラフノードのデータ処理が、コンピュータプログラム中の専用スレッド、専用コンピュータプログラム(例えば、オペレーティングシステムにおけるプロセス)、及び/又は専用コンピューティングデバイスによって行われる状況において計算を行う計算コストを大幅に増加させ、(6)より少ない計算を必要とする、より弱いタイプのデータ処理動作(例えば、グループ内ソート(sort-within-groups)動作、グループ内ロールアップ(rollup-within-groups)動作など)で十分であるときに、より多くの計算を必要とするより強いタイプのデータ処理動作(例えば、ソート動作、ロールアップ動作など)を行うことを必要とする場合があり、及び/又は(7)処理成果の複製を必要とする場合がある。
【0017】
本発明者らは、データフローグラフを生成する従来の自動化技術が、仮にデータフローグラフの生成プロセスの一部として幾つかの従来の最適化技術が使用されるとしても、実行に多大な計算資源及びかなりの時間を必要とするデータフローグラフを生じさせ得ることをさらに認識した。例えば、データフローグラフは、SQLクエリーからクエリープランを生成し、及び生成されたクエリープランからデータフローグラフを生成することによって、SQLクエリーから生成され得る。しかし、仮にクエリープランの生成が特定の最適化を行うことに関与するとしても、その結果生じる(クエリープランから生成された)データフローグラフは、依然として、多大な計算資源の消費を必要とし得る。実際に、クエリープランからデータフローグラフを生成する従来の技術は、非効率性の導入をもたらすことが多く、計算的に効率的なやり方で実行することができるデータフローグラフを生じさせるには十分に洗練されたものではない場合がある。
【0018】
本発明者らは、生成されたデータフローグラフの実行に使用される計算資源の量を減らすために、仮に自動的に生成されたデータフローグラフがさらに処理され、最適化されれば、データ処理システムの性能が向上することを認識した。本出願に記載するデータフローグラフ最適化技術の幾つかは、このために本発明者らによって開発されたものである。本明細書に記載するデータフローグラフ最適化技術は、少なくとも部分的にデータフローグラフ最適化技術を用いることによって生成されたデータフローグラフを実行するために使用される計算資源(例えば、プロセッサ資源、メモリ資源、ネットワーク資源など)の量を減らすことによって、データ処理システムの性能(例えば、スループット、速度、精度など)を向上させる。
【0019】
本明細書に記載するデータフローグラフ最適化技術の別の利点は、データ処理システムの一部としてのデータフローグラフオプティマイザの存在により、他のデータ処理システムコンポーネントの開発者及び/又はデータ処理システムのユーザが、自身の仕事の一部としてその場しのぎの最適化を試みるのではなく、データフローグラフオプティマイザに頼ることが可能となる。このことは、このような開発者及び/又はユーザによって行われなければならない仕事を減らすことに役立つだけでなく、彼らが意図的ではなくデータ処理システムにエラーを導入することも防止し、このことはまた、もちろん、エラーの数を減らすことによってデータ処理システムを向上させる。
【0020】
本明細書に記載するデータフローグラフ最適化技術が、ある意味では「最適な」データフローグラフを生じさせ得る(ただし、必ずではない)ことを理解されたい。より正確に言えば、最適化技術は、一般に、データフローグラフを実行する際に、それの実行の計算効率を向上させるために、それが実行される前にデータフローグラフを修正することによって、データ処理システムの性能を向上させようと試みる。
【0021】
本明細書に記載の実施形態の幾つかは、データフローグラフを自動的に生成する従来の技術に関して本発明者らが認識した上記の課題の全てに対処する。しかし、本明細書に記載の全ての実施形態が、これらの課題の1つ1つに対処するわけではなく、幾つかの実施形態は、これらの何れにも対処しない場合がある。そのため、本明細書に記載の技術の実施形態は、データフローグラフを自動的に生成する従来の技術の上述の課題の全て又は何れかに対処することに限定されないことが理解されるものとする。例えば、本明細書に記載する技術の幾つかの実施形態は、手作業で指定されるデータフローグラフを最適化することに適用することができる(このようなデータフローグラフも、非効率性を包含し、必要とされるよりも多くのコンピューティング資源を要求し得るため)。
【0022】
従って、幾つかの実施形態は、SQLクエリー及び/又は他の入力からデータフローグラフを自動的に生成する新規の技術を提供する。このような他の入力の例は、本明細書で提供される。幾つかの実施形態では、データ処理システムは、(1)構造化照会言語(SQL)クエリーを取得し、(2)SQLクエリーのクエリープランを生成し、(3)クエリープランを使用して初期データフローグラフを生成し、及び(4)初期データフローグラフを更新するために、少なくとも1つのデータフローグラフ最適化ルールを使用して、更新されたデータフローグラフを生成し得る。
【0023】
幾つかの実施形態では、更新されたデータフローグラフは、後の使用のために、(例えば不揮発性メモリに)セーブされ得る。追加的又は代替的に、幾つかの実施形態では、更新されたデータフローグラフは、データ処理システムによって実行され得る。実行に先立って、データ処理システムは、更新されたデータフローグラフの1つ又は複数のノードのそれぞれに処理レイアウトを割り当て得る。
【0024】
幾つかの実施形態では、初期データフローグラフは、仮に初期データフローグラフがデータ処理システムによって実行されるとして行われるであろうそれぞれの複数のデータ処理動作を表す第1の複数のノードを包含し得る。更新されたデータフローグラフは、仮に更新されたデータフローグラフがデータ処理システムによって実行されるとして行われるであろうそれぞれの複数のデータ処理動作を表す第2の複数のノードを包含し得る。幾つかの実施形態では、第2の複数のノードは、第1の複数のノードよりも少ない数のノードを有する。このような実施形態では、更新されたデータフローグラフのノードの数は、初期データフローグラフのノードの数よりも少ない。グラフにおけるノード数の減少は、仮に初期データフローグラフが代わりに実行されるとしてデータ処理システムによって使用されたであろう計算資源と比べて、更新されたデータフローグラフを実行するために必要とされる計算資源の量を減少させることができる。
【0025】
幾つかの実施形態では、データ処理システムは、1つ又は複数のデータフローグラフ最適化ルール(これらの例は、本明細書において提供される)を初期データフローグラフの1つ又は複数の部分に適用することによって、初期データフローグラフから更新されたデータフローグラフを生成し得る。最適化ルールは、反復的に適用されてもよい。例えば、幾つかの実施形態では、データ処理システムは、(1)第1の最適化ルールを選択し、(2)第1の最適化ルールを適用する初期データフローグラフの第1の部分を識別し、及び(3)第1の最適化ルールを初期データフローグラフの第1の部分に適用することによって、初期データフローグラフを更新し得る。後に、データ処理システムは、(1)第1の最適化ルールとは異なる第2の最適化ルールを選択し、(2)第2の最適化ルールを適用する初期データフローグラフの第2の部分を識別し、及び(3)第2の最適化ルールを初期データフローグラフの第2の部分に適用することによって、初期データフローグラフの更新を継続し得る。
【0026】
更新されている初期データフローグラフに対する最適化ルールの適用が考慮され得る幾つかのやり方がある。例えば、幾つかの実施形態では、特定の最適化ルールごとに、データ処理システムは、特定の最適化ルールが適用可能なデータフローグラフの部分を識別し、最適化ルールを識別された部分に適用し得る。別の例として、幾つかの実施形態では、データフローグラフの特定の部分ごとに、データ処理システムは、特定の部分に適用され得る最適化ルールを識別し、識別された最適化ルールを特定の部分に適用し得る。このような実施形態では、初期データフローグラフは、位相的にソートされてもよく、位相的にソートされたグラフは、最適化ルールが適用され得る特定の部分を識別するために(例えば、左から右へ)横断され得る。
【0027】
幾つかの実施形態では、データ処理システムは、1つ又は複数の最適化ルールを適用する初期データフローグラフの1つ又は複数の部分を識別するために、データフロー部分グラフパターンマッチング言語を用い得る。データフロー部分グラフパターンマッチング言語は、データフローグラフで識別されるそれぞれのパターンを表す1つ又は複数の式を包含し得る。このような式の例は、本明細書で提供される。
【0028】
幾つかの実施形態では、ある特定の最適化ルールを適用する初期データフローグラフの部分を識別するために、データ処理システムは、1つ又は複数のノードを1つ又は複数の他のノードと交換するか否かを決定し得る。つまり、データ処理システムは、データフローグラフにおける1つ又は複数のノードの出現順序が処理結果を変えることなく変更され得るか否かを決定し得る。これは、複数の交換ノードが存在する場合に、交換ノードの少なくとも幾つかの順序を変えることによって、最適化ルールが、そうでなければそのルールが適用可能ではなかったグラフの一部に適用可能となることができるため、有益な特徴である。
【0029】
例えば、最適化ルールは、第1の動作が取り下げられるべきであるように第2のソート動作が第1の動作の効果を無効化した状態にある、それぞれのソート動作を表す、初期データフローグラフの2つの隣接するノードを識別することに関与し得る(例えば、
図3B及び3Cに示す例を参照)。定義上、このような最適化ルールは、ソート動作を表す隣接するノードを持たないデータフローグラフには適用されない。しかし、仮に第1のソート動作を表す第1のノードを1つ又は複数の他のノードと交換するとすれば、第1のソート動作を表す第1のノードが第2のソート動作を表す第2のノードと隣接して配置されるように、1つ又は複数の他のノードの少なくとも1つと第1のノードの順序を変えることが可能となり得る。このようにしてノードを交換した結果、冗長な第1のソート動作を除去する最適化ルールが、データフローグラフに適用され得る。従って、幾つかの実施形態では、初期データフローグラフの第1の部分を識別することは、第1のノードに接続された第2のノードによって表されるデータ処理動作と交換するソートデータ処理動作を表す第1のノードを識別することを含み得る。
【0030】
幾つかの実施形態では、初期データフローグラフから更新されたデータフローグラフを生成する際に、多数のタイプの最適化ルールの何れか1つ又は複数が適用され得る。限定ではなく、例として、最適化ルールを初期データフローグラフに適用することは、1つ又は複数の冗長データ処理動作を除去し、1つ又は複数の参照されないデータ処理動作を除去し、1つ又は複数の強度低下最適化を行い、1つ又は複数の統合動作最適化を行い、1つ又は複数の幅減少最適化を行い、及び/又は1つ又は複数の重複排除最適化を行うことに関与し得る。
【0031】
幾つかの実施形態では、最適化ルールは、実行されると、データフローグラフに対して対応する最適化が行われるようにするプログラムコードにおいて具現化され得る。例えば、冗長性を除去するための最適化ルールは、実行されると、冗長であると決定されたデータ処理動作を表す少なくとも1つのノードの(ルールが適用されるデータフローグラフからの)除去を生じさせるプログラムコードにおいて具現化され得る。プログラムコードは、任意のプログラミング言語で書くことができる(本明細書に記載する技術の局面は、この点において限定されない)。
【0032】
さらに別の例として、1つ又は複数の参照されないデータ処理動作を除去する最適化ルールは、実行されると、結果が参照されない、及び/又は使用されないデータ処理動作(例えば、ソーティングによって生じた順序が、後続の処理で必要とされない、又は依拠されないため、参照されないソートデータ処理動作)を表す少なくとも1つのノードの(ルールが適用されるデータフローグラフからの)除去を生じさせるプログラムコードにおいて具現化され得る。
【0033】
さらに別の例として、強度低下を行う最適化ルールは、実行されると、(ルールが適用されるデータフローグラフにおいて)第1のデータ処理動作を表す第1のノード(例えば、ソートデータ処理動作を表すノード)を第1のデータ処理動作よりも弱いタイプの第2のデータ処理動作を表す第2のノード(例えば、グループ内ソートデータ処理動作を表すノード)と置換することを生じさせるプログラムコードにおいて具現化され得る。
【0034】
さらに別の例として、統合動作最適化を行う最適化ルールは、実行されると、(ルールが適用されるデータフローグラフにおいて)複数の動作を表す複数のノードを、これらの複数の動作の統合を表す単一ノードと置換することを生じさせるプログラムコードにおいて具現化され得る。
【0035】
さらに別の例として、幅減少最適化を行う最適化ルールは、実行されると、後続の動作の実施に先立って、グラフ内のある特定の部分における一部のデータ(例えば、1つ又は複数のデータ列)の削除を、そのデータ(すなわち、削除されるデータ)が後続の動作で使用されず、処理の一部として伝播される必要がないため、生じさせるプログラムコードにおいて具現化され得る。さらに別の例として、データフローグラフのノードは、幾つかの計算を行うように構成され、これらの計算の幾つかの結果は、使用されない場合がある。従って、幾つかの実施形態では、幅減少最適化を行う最適化ルールは、実行されると、特定のノードが、結果が使用される計算のみを行うように構成された別のノードと置換されることを生じさせるプログラムコードにおいて具現化することができ、不必要な計算は、もはや行われない。
【0036】
さらに別の例として、重複排除最適化を行う最適化ルールは、実行されると、ルールが適用されるデータフローグラフの複数の異なるブランチがマージされることを生じさせるプログラムコードにおいて具現化され得る。
【0037】
上記で紹介し、及び下記でさらに詳細に述べる技術は、多数のやり方の何れかで実施され得ることを理解されたい(これらの技術は、実施態様の何れの特定のやり方にも限定されない)。実施態様の詳細の例は、単に説明目的で本明細書において提供される。さらに、本明細書に開示する複数の技術は、個々に、又は任意の適宜の組み合わせで使用することができる(本明細書に記載する技術の局面は、何れの特定の技術又は複数の技術の組み合わせの使用にも限定されない)。
【0038】
図1Aは、本明細書に記載する技術の幾つかの実施形態による、説明のためのデータ処理システム100の図である。
図1Aに示されるように、データ処理システム100は、クエリー入力モジュール104、クエリープランジェネレータ106、データフローグラフジェネレータ108、グラフオプティマイザ110、レイアウト割り当てモジュール112、及びグラフ実行エンジン115を包含する。
【0039】
データ処理システム100は、データ記憶装置102-1、102-2、...及び102-nにアクセスする(例えば、データを読み取る、及び/又はデータを書き込む)ように構成される。データ記憶装置102-1、102-2、...及び102-nのそれぞれは、1つ又は複数のデータセットを保存し得る。データ記憶装置は、任意の適宜のやり方で、任意の適宜のタイプのデータを保存し得る。データ記憶装置は、フラットテキストファイルとして、スプレッドシートとして、データベースシステム(例えば、リレーショナルデータベースシステム)を使用して、又はその他の適宜のやり方で、データを保存し得る。場合によっては、データ記憶装置は、トランザクションデータを保存し得る。例えば、データ記憶装置は、クレジットカード決済、通話記録データ、又は銀行取引データを保存し得る。データ処理システム100は、任意の適宜のタイプの、任意の適宜の数のデータ記憶装置にアクセスするように構成され得ることを理解されたい(本明細書に記載する技術の局面は、この点において限定されない)。データ処理システム100がそれからデータを読み取るように構成され得るデータ記憶装置は、データソースと呼ばれる場合がある。データ処理システム100がそれにデータを書き込むように構成され得るデータ記憶装置は、データシンクと呼ばれる場合がある。
【0040】
幾つかの実施形態では、データ記憶装置102-1、102-2、...102-nは、同じタイプのもの(例えば、全てリレーショナルデータベースでもよい)、又は異なるタイプのもの(例えば、1つは、リレーショナルデータベースであるが、別のものは、データをフラットファイルに保存するデータ記憶装置でもよいでもよい。データ記憶装置は、SQLサーバデータ記憶装置、ORACLEデータ記憶装置、TERADATAデータ記憶装置、フラットファイルデータ記憶装置、マルチファイルデータ記憶装置、HADOOPデータ記憶装置、DB2データ記憶装置、Microsoft SQL SERVERデータ記憶装置、INFORMIXデータ記憶装置、SAPデータ記憶装置、MongoDBデータ記憶装置、メタデータデータストア、及び/又はその他の適宜のタイプのデータ記憶装置でもよい(本明細書に記載する技術の局面は、この点において限定されない)。
【0041】
幾つかの実施形態では、クエリー入力モジュール104は、入力SQLクエリーを受信するように構成され得る。幾つかの実施形態では、クエリー入力モジュール104は、ユーザから入力SQLクエリーを受信するように構成され得る。例えば、クエリー入力モジュール104は、それを用いてユーザがSQLクエリーを入力し得るグラフィカルユーザインタフェースを生成するように構成され得る。別の例として、クエリー入力モジュール104は、グラフィカルユーザインタフェースを用いてユーザによって提供される情報(クエリー入力モジュール104自体によって必ずしも生成されなかった情報)を受信するように構成され得る。幾つかの実施形態では、クエリー入力モジュール104は、入力SQLクエリーを別のコンピュータプログラムから受信するように構成され得る。例えば、クエリー入力モジュール104は、それを用いて入力SQLクエリーが提供され得るアプリケーションプログラミングインタフェース(API)(例えば、オープンデータベースコネクティビティ(ODBC)API及びジャバデータベースコネクティビティ(JDBC)API)を公開し、SQLクエリーがアクセスされるべきという通知に応答してSQLクエリーにアクセスし、又はその他の適宜のやり方で、他のコンピュータプログラムから入力SQLクエリーを受信し得る。
【0042】
クエリー入力モジュール104によって受信されるSQLクエリーは、単一のデータ記憶装置からデータを読み取ること、及び/又は単一のデータ記憶装置にデータを書き込むことに関与し得る。代替的に、クエリー入力モジュール104によって受信されるSQLクエリーは、複数のデータ記憶装置からデータを読み取ること、及び/又は複数のデータ記憶装置にデータを書き込むことに関与し得る。複数のデータ記憶装置が異なるタイプのものである場合には、SQLクエリーは、連合SQLクエリーと呼ばれる場合がある。幾つかの実施形態では、SQLクエリーは、連合データベースからデータを読み取ること、及び/又は連合データベースにデータを書き込むことに関与し得る。
【0043】
幾つかの実施形態では、クエリープランジェネレータ106は、クエリー入力モジュール104によって受信されたSQLクエリーからクエリープランを生成するように構成される。生成されたクエリープランは、仮にSQLクエリーが実行された場合に行われるべき1つ又は複数のデータ処理動作を識別し得る。生成されたクエリープランはさらに、識別されたデータ処理動作が実行されるべき順序を指定し得る。そのため、生成されたクエリープランは、クエリー入力モジュール104によって受信されたSQLクエリーを実行するために行うべきデータ処理動作のシーケンスを表し得る。クエリープランジェネレータ106は、任意の適宜のやり方でクエリープランを生成するように構成され得る。例えば、幾つかの実施形態では、クエリープランジェネレータ106は、本明細書に全体として援用される、「データクエリー管理(Managing Data Queries)」というタイトルの米国特許第9,116,955号明細書に記載される、クエリープランを生成する技術の何れかを実施し得る。
【0044】
幾つかの実施形態では、データフローグラフジェネレータ108は、クエリープランジェネレータ106によって生成されたクエリープランから初期データフローグラフを生成するように構成される。データフローグラフジェネレータ108は、任意の適宜のやり方で、クエリープランから初期データフローグラフを生成するように構成され得る。例えば、幾つかの実施形態では、データフローグラフジェネレータ108は、本明細書に全体として援用される、「データクエリー管理(Managing Data Queries)」というタイトルの米国特許第9,116,955号明細書に記載される、クエリープランを生成する技術の何れかを実施し得る。
【0045】
幾つかの実施形態では、データフローグラフは、入力データに対して行われるべきデータ処理動作を表す「ノード」又は「節点」と呼ばれるコンポーネント、及びデータのフローを表すコンポーネント間のリンクを包含し得る。データフローグラフのノードは、それぞれの入力データセットを表す1つ又は複数の入力ノード、それぞれの出力データセットを表す1つ又は複数の出力ノード、及びデータに対して行われるべきデータ処理動作を表す1つ又は複数のノードを包含し得る。幾つかの実施形態では、入力ノードは、連合データベース又はその他のタイプのデータベースを表し得る。同様に、幾つかの実施形態では、出力ノードは、連合データベース又はその他のタイプのデータベースを表し得る。
【0046】
幾つかの実施形態では、データフローグラフにおいて複数の異なるノードによって表される複数の異なるデータ処理動作は、異なるそれぞれのコンピュータシステムプロセスを用いて実行され得る。例えば、データフローグラフは、第1のデータ処理動作(例えば、「ソート(sort)」動作)を表す第1のノードと、第1のデータ処理動作とは異なる第2のデータ処理動作(例えば、「結合(join)」動作)を表す第2のノードとを包含する場合があり、幾つかの実施形態では、第1のデータ処理動作を実行するために第1のコンピュータシステムプロセスが使用されてもよく、第2のデータ処理動作を実行するために、第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスが使用されてもよい。幾つかの実施形態では、第1及び第2のコンピュータシステムプロセスは、同じコンピューティングデバイスで実行されてもよく、例えば、同じオペレーティングシステムによって管理されてもよい。他の実施形態では、第1及び第2のコンピュータシステムプロセスは、異なるコンピューティングデバイスで実行されてもよい。
【0047】
幾つかの実施形態では、データフローグラフにおけるノードによって表されるデータ処理動作を実行するために使用されるコンピュータシステムプロセスは、データ処理動作をエンコードするプロセッサ実行可能命令を実行するように構成されたコンピュータプログラムのインスタンスでもよい。コンピュータシステムプロセスは、シングルスレッドのプロセス又はマルチスレッドのプロセスでもよい。コンピュータシステムプロセスは、限定ではなく例として、データ処理動作をエンコードすることを表すプロセッサ実行可能命令、メモリ(例えば、実行可能コード、プロセス特有の入力及び/又は出力データ、呼び出しスタック、計算ヒープ、及び/又は他のデータを保持する物理メモリ及び/又は仮想メモリの領域)、(例えば、コンピュータシステムプロセスを識別するためにオペレーティングシステムによって使用される)プロセス識別子、セキュリティ属性(例えば、コンピュータシステムプロセスが行うことを許されたプロセス及び/又は動作の1人又は複数の所有者を示す許可)、及び/又はコンピュータシステムプロセスの状態を指定する情報を包含する1つ又は複数のコンピュータシステム資源に関連付けられ得る。
【0048】
幾つかの実施形態では、初期データフローグラフは、少なくとも部分的に、クエリープランにおいて識別されたデータ処理動作の少なくともサブセット(例えば、一部又は全て)のそれぞれのノードを包含する初期データフローグラフを生成することによって、クエリープランから生成され得る。続いて、クエリープランで指定されたデータ処理動作の順序を使用して、初期データフローグラフにおけるノードを結び付けるリンクが生成され得る。例えば、生成されたクエリープランが、第2のデータ処理動作の前に、第1のデータ処理動作が行われることを示す場合、生成された初期データフローグラフは、第1のノード(第1のデータ処理動作を表す)及び第2のノード(第2のデータ処理動作を表す)と、第1のノードから第2のノードへの経路を指定する1つ又は複数のリンクとを有し得る。
【0049】
幾つかの実施形態では、クエリープランから初期データフローグラフを生成することは、グラフに対して、入力及び/又は出力データソースを表す1つ又は複数のノードを追加することを含む。例えば、初期データフローグラフの生成は、SQLクエリーの実行中にデータレコードが読み取られるべきデータソースのそれぞれに対して入力ノードを追加することを含み得る。各入力ノードは、それぞれのデータソースと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データソース中のデータレコードにアクセスする方法を示し得る。別の例として、初期データフローグラフの生成は、SQLクエリーの実行中にデータレコードが書き込まれるべきデータシンクのそれぞれに対して出力ノードを追加することを含み得る。各出力ノードは、それぞれのデータシンクと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データレコードをデータソースに書き込む方法を示し得る。幾つかの実施形態では、初期データフローグラフは、グラフ実行エンジンによって走行可能となり得る。他の実施形態では、初期データフローグラフは、グラフ実行エンジンによって走行可能ではない場合がある。
【0050】
幾つかの実施形態では、グラフオプティマイザ110は、データフローグラフジェネレータ108によって生成された初期データフローグラフを更新するために、1つ又は複数のデータフローグラフ最適化ルールを使用して、更新されたデータフローグラフを生成するように構成される。グラフオプティマイザ110は、本明細書に記載する多数のタイプの最適化ルールの1つ又は複数を初期データフローグラフに適用するように構成され得る。例えば、グラフオプティマイザ110は、1つ又は複数の冗長データ処理動作を除去し、1つ又は複数の参照されないデータ処理動作を除去し、1つ又は複数の強度低下最適化を行い、1つ又は複数の統合動作最適化を行い、1つ又は複数の幅減少最適化を行い、及び/又は1つ又は複数の重複排除最適化を行うことによって、初期データフローグラフを更新するように構成され得る。グラフオプティマイザ110は、任意の適宜のやり方で動作するように構成することができ、例えば、
図2を参照して記載される説明のためのプロセス200又はそれの1つ又は複数の別形態に従って動作するように構成され得る。
【0051】
幾つかの実施形態では、レイアウト割り当てモジュール112は、グラフオプティマイザ110によって生成された、更新されたデータフローグラフにおける各ノードによって表される1つ又は複数のデータ処理動作のそれぞれの処理レイアウトを決定し得る。データ処理動作の処理レイアウトは、データ処理動作を行うために何個のコンピューティングデバイスが使用されるべきかを指定することができ、及びデータ処理動作を行うために使用されるべき特定のコンピューティングデバイスを識別することができる。従って、幾つかの実施形態では、レイアウト割り当てモジュール112は、更新されたデータフローグラフにおける1つ又は複数のノードのそれぞれに関して、データ処理動作が、単一のデバイス(例えば、単一のプロセッサ、単一の仮想マシンなど)、或いは複数のデバイス(例えば、複数のプロセッサ、複数の仮想マシンなど)を用いて行われるべきか、及びどのデバイスが使用されるべきかを決定し得る。幾つかの実施形態では、レイアウト割り当てモジュールは、更新されたデータフローグラフにおける複数の異なるノードに異なる度合いの並列性を割り当て得る。そのため、グラフオプティマイザ110によって生成された、更新されたデータフローグラフの実行中に行われる複数の異なるデータ処理動作に異なる処理レイアウトが割り当てられ得ることを理解されたい。
【0052】
幾つかの実施形態では、更新されたデータフローグラフは、複数の異なるデータ処理動作を表す複数の(例えば、2つ以上の)ノードを包含してもよく、これらのデータ処理動作を実行するために、複数の異なるプロセスが使用されてもよい。例えば、第1のノードによって表されるデータ処理動作を実行するために、1つ又は複数のコンピュータシステムプロセスが使用されてもよく(例えば、データ処理動作が並列化される場合に、複数のコンピュータシステムプロセスが使用されてもよい)、第1のノードとは異なる、更新されたデータフローグラフにおける第2のノードによって表されるデータ処理動作を実行するために、1つ又は複数の他のコンピュータシステムプロセスが使用されてもよい。
【0053】
幾つかの実施形態では、グラフ実行エンジン115は、1つ又は複数のデータフローグラフを実行するように構成される。例えば、初期データフローグラフが走行可能な幾つかの実施形態では、グラフ実行エンジン115は、データフローグラフジェネレータ108によって生成されたあらゆる初期データフローグラフを実行するように構成され得る。別の例として、グラフ実行エンジン115は、グラフオプティマイザ110によって生成された、あらゆる更新されたデータフローグラフを実行するように構成され得る。グラフ実行エンジンは、共働システム、又はその他の適宜の、データフローグラフを実行するための実行環境を含み得る。データフローグラフを開発及び実行するための環境の局面は、それぞれ本明細書に全体として援用される、「グラフとして表現される計算の実行(Executing Computations Expressed as Graphs)」というタイトルの米国特許第5,966,072号明細書、及び「グラフベース計算のパラメータ管理(Managing Parameters for Graph-Based Computations)」というタイトルの米国特許第7,716,630号明細書に記載されている。
【0054】
図1Bは、本明細書に記載する技術の幾つかの実施形態による、入力構造化照会言語(SQL)クエリーからデータフローグラフを自動的に生成する、説明のためのプロセス120のフローチャートである。プロセス120は、任意の適宜のデータ処理システムによって行うことができ、例えば、
図1Aを参照して記載されるデータ処理システム100によって行うことができる。
【0055】
プロセス120は、SQLクエリーが受信されるアクト122で開始される。SQLクエリーは、クエリー入力モジュール104を用いて受信され得る。これは、プロセス200のアクト202を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【0056】
次に、プロセス120は、クエリープランがアクト122で受信されたSQLクエリーから生成されるアクト124に進む。クエリープランは、クエリープランジェネレータ106を使用して生成され得る。これは、プロセス200のアクト204を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【0057】
次に、プロセス120は、アクト124で取得されたクエリープランから初期データフローグラフが生成されるアクト126に進む。初期クエリープランは、データフローグラフジェネレータ108によって生成され得る。これは、プロセス200のアクト206を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【0058】
次に、プロセス120は、1つ又は複数の最適化ルールを初期データフローグラフに適用することによって、更新されたデータフローグラフが初期データフローグラフから生成されるアクト128に進む。更新されたデータフローグラフは、グラフオプティマイザ110によって生成され得る。これは、プロセス200のアクト207を参照して記載されるやり方の何れかを含む、任意の適宜のやり方で行われ得る。
【0059】
更新されたデータフローグラフは、後の使用のために保存されてもよく、又はデータ処理システムによって実行されてもよい。実行に先立って、処理レイアウトが、更新されたデータフローグラフにおけるノードによって表される1つ又は複数のデータ処理動作に割り当てられ得る。処理レイアウトは、レイアウト割り当てモジュール112によってデータ処理動作に割り当てられ得る。
【0060】
図2は、本明細書に記載する技術の幾つかの実施形態による、入力SQLクエリーからデータフローグラフを自動的に生成する、説明のためのプロセス200のフローチャートである。プロセス200は、例えば、
図1Aを参照して記載されるデータ処理システム100を含む、任意の適宜のデータ処理システムを使用して実行され得る。
【0061】
プロセス200は、SQLクエリーが受信されるアクト202で開始される。幾つかの実施形態では、SQLクエリーは、ユーザが、データ処理システムへの入力としてSQLクエリーを提供した結果、プロセス200を実行するデータ処理システムによって受信され得る。ユーザは、グラフィカルユーザインタフェース、又はその他の適宜のタイプのインタフェースを用いて、SQLクエリーを入力し得る。他の実施形態では、SQLクエリーは、別のコンピュータプログラムによって、データ処理システムに提供され得る。例えば、SQLクエリーは、データ処理システムに1つ又は複数のSQLクエリー(各SQLクエリーは、ユーザによって指定されている場合、又は自動生成されている場合がある)を実行させるように構成されたコンピュータプログラムによって提供され得る。SQLクエリーは、任意の適宜のタイプのものでよく、及び任意の適宜のフォーマットで提供され得る(本明細書に記載の技術の局面は、この点において限定されない)。
【0062】
次に、プロセス200は、アクト202で受信されたSQLクエリーからクエリープランが生成されるアクト204へと進む。生成されたクエリープランは、SQLクエリーが実行された場合に行われる1つ又は複数のデータ処理動作を識別し得る。生成されたクエリープランはさらに、識別されたデータ処理動作が実行される順序を指定し得る。そのため、生成されたクエリープランは、アクト202で受信されたSQLクエリーを実行するために行うデータ処理動作のシーケンスを表し得る。生成されたクエリープランは、任意の適宜のタイプのクエリープランジェネレータ(例えば、クエリープランジェネレータ106)を用いて生成され得る。クエリープランを生成するための幾つかの例示的技術が、本明細書に全体として援用される、「データクエリー管理」というタイトルの米国特許第9,116,955号明細書に記載されている。
【0063】
次に、プロセス200は、アクト206へと進む。初期データフローグラフが、アクト202で受信されたSQLクエリーを用いて、アクト204で生成されたクエリープランから生成される。幾つかの実施形態では、初期データフローグラフは、少なくとも部分的に、クエリープランにおいて識別されたデータ処理動作の少なくともサブセット(例えば、一部又は全て)のそれぞれのノードを包含するように初期データフローグラフを生成することによって、クエリープランから生成され得る。幾つかの実施形態では、クエリープランにおける単一のノードは、初期データフローグラフにおける複数のノードの包含をもたらし得る。続いて、クエリープランで指定されたデータ処理動作の順序を使用して、初期データフローグラフにおけるノードを結び付けるリンクを生成し得る。例えば、生成されたクエリープランが、第2のデータ処理動作の前に、第1のデータ処理動作が行われることを示す場合、生成された初期データフローグラフは、第1のノード(第1のデータ処理動作を表す)及び第2のノード(第2のデータ処理動作を表す)と、第1のノードから第2のノードへの経路を指定する1つ又は複数のリンクとを有し得る。
【0064】
幾つかの実施形態では、クエリープランから初期データフローグラフを生成することは、入力及び/又は出力データソースを表すグラフに対して、1つ又は複数のノードを追加することを含む。例えば、初期データフローグラフの生成は、SQLクエリーの実行中にデータレコードが読み取られるデータソースのそれぞれに対して入力ノードを追加することを含み得る。各入力ノードは、それぞれのデータソースと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データソース中のデータレコードにアクセスする方法を示し得る。別の例として、初期データフローグラフの生成は、SQLクエリーの実行中にデータレコードが書き込まれるデータシンクのそれぞれに対して出力ノードを追加することを含み得る。各出力ノードは、それぞれのデータシンクと関連付けられたパラメータ値を用いて構成され得る。これらの値は、データレコードをデータソースに書き込む方法を示し得る。
【0065】
アクト206で生成された初期データフローグラフは、アクト204で生成されたクエリープランとは異なることを認識されたい。データフローグラフが、グラフ実行エンジン(例えば、グラフ実行エンジン115)によって実行され得る一方で、クエリープランは、グラフ実行エンジンによって実行することができない(それは、データフローグラフの生成に使用される中間表現であり、このデータフローグラフは、SQLクエリーを実行するために、グラフ実行エンジンによって実行される)。クエリープランは、実行可能ではなく、リレーショナルデータベース管理システムの状況下でさえ、実行戦略を生成するために、さらに処理される必要がある。これに対して、データフローグラフは、SQLクエリーを実行するために、グラフ実行エンジンによって実行可能である。加えて、リレーショナルデータベースシステムによるさらなる処理後でさえ、結果として生じる実行戦略は、他のタイプのデータソース及び/又はデータシンクに対する、データの読み取り及び/又は書き込みを可能にしないが、データフローグラフは、この点において限定されない。
【0066】
幾つかの実施形態では、アクト206で生成された初期データフローグラフは、アクト204で生成されたクエリープランに存在しないデータ処理動作を表すノードを含有し得る。逆に、幾つかの実施形態では、アクト206で生成された初期データフローグラフは、アクト204で生成されたクエリープランに存在するデータ処理動作を表すノードを含有しない場合がある。このような状況は、クエリープランからデータフローグラフを生成するプロセス中に行われ得る様々な最適化により生じ得る。幾つかの実施形態では、アクト206で生成された初期データフローグラフは、データベースコンピュータシステム(例えば、リレーショナルデータベース管理システム)に対して行われるデータベース動作以外のデータ処理動作を表すノードを含有し得る。
【0067】
幾つかの実施形態では、クエリープラン及びデータフローグラフは、異なるタイプのデータ構造で具現化され得る。例えば、幾つかの実施形態では、クエリープランは、各ノードが単一の親ノードを有する有向グラフ(例えば、例えば二分木などの木)で具現化されてもよく、一方、データフローグラフは、複数の親ノードを有する少なくとも1つのノードを有し得る有向非巡回グラフで具現化され得る。
【0068】
次に、プロセス200は、更新されたデータフローグラフを取得するために、初期データフローグラフが更新されるアクト207に進む。これは、多数のやり方の何れかで行われ得る。例えば、図示した実施形態では、データフローグラフ最適化ルールは、アクト208で選択される。次に、プロセス200を実行するデータ処理システムは、アクト208で識別された最適化ルールを適用する初期データフローグラフの部分を識別する。アクト212では、選択された最適化ルールは、グラフの識別された部分に適用される。次に、プロセス200は、データフローグラフの少なくとももう1つの部分に適用される最適化ルールが存在するか否かが決定される決定ブロック214に進む。グラフの少なくとももう1つの部分に適用される最適化ルールが存在することが決定されると(例えば、アクト208で選択された最適化ルールが、アクト210で識別された部分とは異なるグラフの別の部分に適用されてもよく、異なる最適化ルールが、全体で選択されてもよいなど)、プロセス200は、アクト208に戻る。そうでなければ、プロセス200は、アクト216に進む。
【0069】
幾つかの実施形態では、アクト208で選択された特定の最適化ルールごとに、データ処理システムは、選択された最適化ルールが適用可能なデータフローグラフの部分を識別し、識別された部分に最適化ルールを適用し得る。全てのこのような部分が識別されると、異なる最適化ルールが選択され得る。しかし、データフローグラフへの同じ最適化ルールの適用が複数回考慮され得るように、以前に適用された最適化ルールも選択され得る(これは、最適化ルールが貪欲に選択され、一度適用された後には使用されない手法と比べて、より最適化されたデータフローグラフをもたらし得る)。最適化ルールは、任意の適宜の順序で選択され得る(本明細書に記載する技術の局面は、この点において限定されない)。一例として、重複排除最適化を行った後に、冗長動作を表すあらゆるノードを除去することができ、あらゆる空のノードを除去することができる。空のノードを除去した後に、幅減少最適化などが行われ得る。
【0070】
幾つかの実施形態では、アクト208及び210の順序が、変更されてもよい。このような実施形態では、データ処理システムは、まず、データフローグラフの一部分を識別し、次に、識別されたデータフローグラフの部分に適用され得る最適化ルールを選択し得る。このような実施形態では、初期データフローグラフは、位相的にソートされてもよく、位相的にソートされたグラフは、最適化ルールが適用され得る特定の部分を識別するために(例えば、左から右へ)横断され得る。
【0071】
幾つかの実施形態では、データ処理システムは、1つ又は複数の最適化ルールを適用する、初期データフローグラフの1つ又は複数の部分を識別するために、データフロー部分グラフパターンマッチング言語を用い得る。データフロー部分グラフパターンマッチング言語は、データフローグラフにおいて特定のタイプの部分グラフを識別するための1つ又は複数の式を包含し得る。幾つかの実施形態では、プロセス200を実行するデータ処理システムは、1つ又は複数の最適化ルールを適用する、データフローグラフの部分を識別するために、部分グラフパターンマッチング言語の式を使用するように構成され得る。ある特定の式は、特定の1つ又は複数の最適化ルールを適用するための1つ又は複数の部分を識別することを容易にし得る。幾つかの実施形態では、データフローグラフオプティマイザ(例えば、グラフオプティマイザ110)が、1つ又は複数の新しい最適化ルールを用いて構成される場合、グラフオプティマイザは、新しい最適化ルールが適用され得るデータフローグラフの部分を識別することを容易にするために、部分グラフパターンマッチング言語で書かれた1つ又は複数の新しい式を用いて構成され得る。
【0072】
例えば、パターンマッチング言語は、統合動作最適化ルールを用いて、統合することができ、及びグラフ内で単一のノードによって表すことができる、それぞれの一連の計算を表す、少なくとも閾値長さ(例えば、少なくとも2、3、4、5など)の一連のノードを識別するための式を包含し得る。このようなパターンを識別することは、
図5A~5Dの参照を包含して下記にさらに説明する統合動作最適化ルールの適用を容易にし得る。このような式の1つの非限定例は、「A→B→C→D」であり、これは、統合され得る、一連の4つの連続するデータ処理動作を識別することに役立ち得る。
【0073】
別の例として、パターンマッチング言語は、特定のタイプのノードが他のノードと交換可能なデータフローグラフの部分を識別するための式を包含し得る。これは、複数の異なるタイプの最適化ルールをデータフローグラフに適用することを容易にし得る。処理結果を変えることなく、データフローグラフにおける1つ又は複数のノードの順序が変更され得ることをデータ処理システムが決定すると、これは、最適化ルールが適用され得る部分を識別するために、(交換動作によって得られる自由度により許容される)データフローグラフの構造に対する変更をデータ処理システムが考慮することを可能にする。交換に基づく変更を考慮した結果、1つ又は複数の最適化ルールが、そうでなければこれらのルールが適用可能ではなかったグラフの部分に適用可能となり得る。
【0074】
例えば、最適化ルールは、第1の動作が取り下げられるべきであるように第2のソート動作が第1の動作の効果を無効化した状態にある、それぞれのソート動作を表す、初期データフローグラフの2つの隣接するノードを識別することに関与し得る(例えば、
図3B及び3Cに示す例を参照)。定義上、このような最適化ルールは、ソート動作を表す隣接するノードを持たないデータフローグラフには適用されない。しかし、仮に第1のソート動作を表す第1のノードを1つ又は複数の他のノードと交換するとすれば、第1のソート動作を表す第1のノードが第2のソート動作を表す第2のノードと隣接して配置されるように、1つ又は複数の他のノードの少なくとも1つと第1のノードの順序を変えることが可能となり得る。このようにしてノードを交換した結果、冗長な第1のソート動作を除去する最適化ルールが、データフローグラフに適用され得る。
【0075】
従って、幾つかの実施形態では、部分グラフマッチング言語は、データフローグラフにおけるノードの順序が変更され得る状況下で、データフローグラフの部分グラフを識別するための1つ又は複数の式を包含し得る。一例として、ノード「A」(すなわち、動作「A」を表すノード)及びノードB(動作Bを表す)と、ノードAと交換される、ノードAとノードBとの間の1つ又は複数のノード(例えば、ノードの順序が変えられた場合、これらのノードによって行われる処理の結果は変わらない)とを有するデータフローグラフの部分を見つけるために、式「A*→(...)→B」(A及びBのそれぞれは、ソート、マージなどの任意の適宜のデータ処理動作となり得る)が使用され得る。このような部分が識別されると、データフローグラフは、部分「AB」を取得するために、ノードBに隣接するようにノードAを移動させることによって変えられ得る。ある特定の例として、仮にデータフローグラフがノードACDBを有するとし、且つ仮に動作Aが動作C及びDと交換されるとすれば、データフローグラフは、「CDAB」となるように変更され得る。そして、データ処理システムは、最適化ルールが部分「AB」に適用されるか否かを考慮し得る。例えば、仮に動作Aがソートであり、且つ動作Bがソートであるとすれば、データ処理システムは、
図5Bの例の場合のように、これらの2つのソートが単一のソートと置換され得るか否かを決定しようと試みることができる。
【0076】
別の例として、ノードAと、第2のノードBと、ノードBと交換される、これらのノード間の1つ又は複数のノードとを有するデータフローグラフの部分を見つけるために、式「A→(...)→B*」が使用され得る。ある特定の例として、仮にデータフローグラフがノードACDBを有するとし、且つ仮に動作Bが動作C及びDと交換されるとすれば、データフローグラフは、「ABCD」となるように変更され得る。そして、データ処理システムは、最適化ルールが部分「AB」に適用されるか否かを考慮し得る。
【0077】
別の例として、ノードAと、ノードBと、ノードBと交換されない、ノードAとノードBとの間の1つ又は複数のノード(例えば、C及びD)とを有するデータフローグラフの部分を見つけるために、式「A→(...)→B**」が使用され得る。この場合、システムは、(可能であれば、ノードC及びDが、ノードAの左に送られる)「強引な」交換を行おうとし得る。ある特定の例として、仮にデータフローグラフがノードACEDBを有するとし、且つ仮に動作Bが、動作Eと交換されるが、動作C及びDとは交換されないとすれば、データフローグラフは、「CDABE」となるように変更され得る(BがEと交換されたが、C及びDは、Aの左に送られた)。
【0078】
さらに別の例として、ノードAと、ノードBと、ノードAと交換されない、ノードAとノードBとの間の1つ又は複数のノード(例えば、C及びD)とを有するデータフローグラフの部分を見つけるために、式「A**→(...)→B」が使用され得る。この場合、システムは、(可能であれば、ノードC及びDが、ノードBの右に送られる)「強引な」交換を行おうとし得る。ある特定の例として、仮にデータフローグラフがノードACEDBを有するとし、且つ仮に動作Aが、動作Eと交換されるが、動作C及びDとは交換されないとすれば、データフローグラフは、「EABCD」となるように変更され得る(ノードAがEと交換されたが、C及びDは、Bの右に送られた)。
【0079】
部分グラフマッチング言語の式の上記の例が説明のためのものであることを理解されたい。幾つかの実施形態では、1つ又は複数の他の式は、上記の例に加えて、又は上記の例の代わりに、部分グラフマッチング言語の一部でもよい。
【0080】
幾つかの実施形態では、アクト207で初期データフローグラフから更新されたデータフローグラフを生成する際に、多数のタイプの最適化ルールの何れか1つ又は複数が適用され得る。例えば、最適化ルールを初期データフローグラフに適用することは、1つ又は複数の冗長データ処理動作を除去し、1つ又は複数の参照されないデータ処理動作を除去し、1つ又は複数の強度低下最適化を行い、1つ又は複数の統合動作最適化を行い、1つ又は複数の幅減少最適化を行い、及び/又は1つ又は複数の重複排除最適化を行うことに関与し得る。
【0081】
幾つかの実施形態では、最適化ルールは、実行されると、データフローグラフに対して対応する最適化が行われるようにするプログラムコードにおいて具現化され得る。例えば、冗長性を除去するための最適化ルールは、実行されると、冗長であると決定されたデータ処理動作を表す少なくとも1つのノードの(ルールが適用されるデータフローグラフからの)除去を生じさせるプログラムコードにおいて具現化され得る。1つ又は複数の冗長データ処理動作を除去するために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、
図3A~3Cに示される。
【0082】
別の例として、強度低下を行うための最適化ルールは、実行されると、(ルールが適用されるデータフローグラフにおいて)第1のデータ処理動作を表す第1のノード(例えば、ソートデータ処理動作を表すノード)を第1のデータ処理動作よりも弱いタイプの第2のデータ処理動作を表す第2のノード(例えば、グループ内ソートデータ処理動作を表すノード)と置換することを生じさせるプログラムコードにおいて具現化され得る。強度低下最適化を行うために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、
図4A及び4Bに示される。
【0083】
別の例として、統合動作最適化を行うための最適化ルールは、実行されると、(ルールが適用されるデータフローグラフにおいて)複数の動作を表す複数のノードを、これらの複数の動作の統合を表す単一ノードと置換することを生じさせるプログラムコードにおいて具現化され得る。統合動作最適化を行うために、データフローグラフに最適化ルールを適用する例は、下記により詳細に記載されるように、
図5A~5Dに示される。
【0084】
さらに別の例として、1つ又は複数の参照されないデータ処理動作を除去するための最適化ルールは、実行されると、結果が参照されない、及び/又は使用されないデータ処理動作(例えば、ソーティングによって生じた順序が、後続の処理で必要とされない、又は依拠されないため、参照されないソートデータ処理動作)を表す少なくとも1つのノードの(ルールが適用されるデータフローグラフからの)除去を生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、
図6に示される。
【0085】
別の例として、幅減少最適化を行うための最適化ルールは、実行されると、後続の動作の実施に先立って、グラフ内のある特定の部分における一部のデータ(例えば、1つ又は複数のデータ列、データ行など)の削除を、そのデータ(すなわち、削除されるデータ)が後続の動作で使用されず、処理の一部として伝播される必要がないため、生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、
図7に示される。
【0086】
別の例として、重複排除最適化を行うための最適化ルールは、実行されると、ルールが適用されるデータフローグラフの複数の異なるブランチがマージされることを生じさせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する例は、下記により詳細に記載されるように、
図8A及び8Bに示される。
【0087】
別の例として、順次-並列最適化を行うための最適化ルールは、実行されると、順次行われる処理を並列で行わせるプログラムコードにおいて具現化され得る。データフローグラフにこのような最適化ルールを適用する一例は、下記により詳細に記載されるように、
図9に示される。
【0088】
上記の最適化ルール及び最適化は、説明のための非限定例であることを理解されたい。プロセス200の一部として、上記の最適化ルール及び/又は最適化の代わりに、又はそれらに加えて、1つ又は複数の他の最適化ルール及び/又は最適化が、初期データフローグラフに適用され得る。
【0089】
次に、プロセス200は、更新されたデータフローグラフが出力されるアクト216に進む。幾つかの実施形態では、アクト216では、更新されたデータフローグラフが、後の使用のために(例えば不揮発性メモリに)保存され得る。
【0090】
保存されることに加えて、又は保存されることの代わりに、更新されたデータフローグラフは、実行されてもよい。更新されたデータフローグラフが実行される幾つかの実施形態では、プロセス200のアクト218において、処理レイアウトが、更新されたデータフローグラフの1つ又は複数のノードに割り当てられる。データ処理動作を表すノードの処理レイアウトは、そのデータ処理動作を行うために何個のコンピューティングデバイスが使用されるべきかを指定することができ、及びそのデータ処理動作を行うために使用されるべき特定のコンピューティングデバイスを識別することができる。これは、本明細書に全体として援用される、2018年3月29日に出願された、「可変レベル並列性を用いたデータ処理動作を行うためのシステム及び方法(Systems and Methods for Performing Data Processing Operations Using Variable Level Parallelism)」というタイトルの米国特許出願第15/939,829号明細書に記載されるレイアウト割り当て技術の何れかを使用することを含む、任意の適宜のやり方で行われ得る。幾つかの実施形態では、ノードが、単一のコンピューティングデバイス、或いは複数のコンピューティングデバイスを用いて処理されるかの決定(例えば、並列処理が適用されるべきか否か、及びどのレベルの並列性が用いられるべきか)は、先に(例えば、アクト207中に)行われ得る(計算に使用される特定のコンピューティングデバイスは、アクト218で割り当てられる)。
【0091】
アクト218で処理レイアウトが割り当てられた後に、更新されたデータフローグラフが実行され得る。例えば、プロセス200がデータ処理システムによって行われる場合に、データ処理システム100は、グラフ実行エンジン115を用いて、更新されたデータフローグラフを実行し得る。幾つかの実施形態では、アクト207で生成された、更新されたデータフローグラフは、生成され次第、且つユーザ入力なしに実行され得る。他の実施形態では、更新されたデータフローグラフは、アクト207で生成され得るが、その実行は、実行を行うコマンドに応答してのみ開始されることができ、このコマンドは、インタフェースを用いてユーザによって、又は(例えば、API呼び出しを用いて)別のコンピュータプログラムによって提供され得る。
【0092】
プロセス200が説明のためのものであり、且つ複数のバリエーションが存在することを理解されたい。例えば、幾つかの実施形態では、オプションのアクト218及び220は、省略されてもよく、プロセス200は、更新されたデータフローグラフが生成され、保存された後に完了してもよい。別の例として、プロセス200は、図示した実施形態の場合のように、入力SQLクエリーから生成されたデータフローグラフではなく、別のソース(例えば、別のデータ処理システム)から提供されたデータフローグラフを最適化するために使用されてもよい。このような実施形態では、アクト202~204は省略することができ、初期データフローグラフは、アクト206において、別のソースから提供されたデータフローグラフから生成され得る。このような生成は、受信したデータフローグラフを、プロセス200を実行するデータ処理システム用に構成されたデータフローグラフに変換することに関与し得る。
【0093】
図3A~9を参照して、最適化ルールをデータフローグラフに適用する、説明のための例を下記に提供する。これらの図に示される各データフローグラフは、(例えば、プロセス200のアクト207の一部として)最適化されているより大きなデータフローグラフの部分グラフでもよい。例えば、これらの図に示されるデータフローグラフの1つ又は複数のそれぞれは、プロセス200のアクト206で生成された初期データフローグラフの部分グラフ、及び/又はアクト207の一部として初期データフローグラフを変換することによって取得された1つ又は複数のデータフローグラフの部分グラフでもよい。
【0094】
図3Aは、1つ又は複数の冗長データ処理動作を除去するために、最適化ルールを説明のためのデータフローグラフ300に適用することを示す。
図3Aに示すように、データフローグラフ300は、(複数の異なるコンピューティングデバイスにおける並列処理のためにデータをパーティショニングする)再パーティションデータ処理動作を表すノード302と、その後に続く、(単一のコンピューティングデバイスによる順次処理のために全てのデータを統合するように動作する)シリアル化動作を表すノード304とを包含する。再パーティショニングの効果が後続のシリアル化コマンドによって無効化されるため、再パーティショニングデータ処理動作を行うことは必要ではない。従って、データフローグラフオプティマイザ(例えば、データ処理システム100におけるグラフオプティマイザ110)は、再パーティショニング動作を表すノード302を除去し得る。その結果、データフローグラフの部分300は、部分305に変換される。
【0095】
図3Bは、本明細書に記載する技術の幾つかの実施形態による、最適化ルールを別の説明のためのデータフローグラフに適用することを容易にするために、交換データ処理動作の順序を変えることを示す。
図3Bに示すように、データフローグラフ310は、ソートデータ処理動作(ソートがキーAに関して行われる)を表すノード311と、その後に続く、1つ又は複数のノード(不図示)と、その後に続く、別のソートデータ処理動作(ソートがキーBに関して行われる)を表すノード312とを包含する。この例では、ノード311によって表されるソート動作が、ノード311とノード312との間のノードによって表されるデータ処理動作と交換されるか否かを決定することは、1つ又は複数の最適化ルールをデータフローグラフ310に適用することを容易にし得る。例えば、ノード311によって表されるソート動作が、ノード311とノード312との間のノードによって表されるデータ処理動作と交換される場合には、ノードの順序の変更により、データフローグラフ313に示されるように、ノード311及びノード312を互いに隣接して配置することが可能となる。そして、これは、1つ又は複数の最適化ルールが、結果として生じたグラフ313に適用され得るか否かの考慮を可能にする(これらのルールは、ノード311によって表されるソート動作がグラフ内で出現する場所の順序を変える前は、データフローグラフ310に適用可能ではなかった場合がある)。例えば、この場合、キーAに関するソーティング(ノード311)の効果は、後続のキーBに関する再ソーティング(ノード312)によって無効化される。従って、ノード311によって表されるソート動作は不要であり、
図3Cに示すように、このノードは除去することができ、データフローグラフ314がもたらされる。
【0096】
図3Dは、冗長データ処理動作を除去するために最適化ルールを別の説明のためのデータフローグラフ320に適用することを示す。
図3Dに示すように、データフローグラフ320は、キーAに関するソート動作を表すノード322を包含する。しかし、データが同じキーに関して既にソートされている場合は、データフローグラフオプティマイザは、キーAに関するソート動作を表すノード322を除去することができ、データフローグラフ323がもたらされる。
図3A~3Dに示される例の全てにおいて、冗長ノードの除去は、その実行が、仮にこれらのノードが除去されないとした場合よりも少ないコンピューティング資源を消費するデータフローグラフをもたらす。
【0097】
図4Aは、強度低下最適化を行い、データフローグラフ402を取得するために最適化ルールを説明のためのデータフローグラフ400に適用することを示す。
図4Aに示すように、データフローグラフ400は、入ってくるデータを主要キーAに関してソート(例えば、姓によるソート)し、その後、二次キーBに関してソートする(例えば、同じ姓を持つ人々を名でソートする)ソート動作を表すノード401を含有する。しかし、ノード401に入ってくるデータが既にキーAに関してソートされている(例えば、姓によって既にソートされている)ことをグラフオプティマイザが検出した場合、グラフオプティマイザは、このソート動作を(グラフ402のノード403によって表される)グループ内ソート動作に置換することによって、強度低下最適化を行い、それによって、ソーティング動作の強度は低下するが、同じ結果を取得し、且つ不要な計算を行うことを回避することができる。
【0098】
図4Bは、別の強度低下最適化を行い、データフローグラフ412を取得するために最適化ルールを説明のためのデータフローグラフ410に適用することを示す。
図4Bに示すように、データフローグラフ410は、主要キーA及び二次キーBに関して行われるロールアップ動作を表すノード411を含有する。しかし、ノード411に入ってくるデータが既にキーAに関してソートされていることをグラフオプティマイザが検出した場合、オプティマイザは、ロールアップ動作を(グラフ412のノード413によって表される)グループ化ロールアップ動作に置換することによって、強度低下最適化を行い、それによって、ロールアップ動作の強度は低下するが、同じ結果を取得し、且つ不要な計算を行うことを回避することができる。
【0099】
図5Aは、統合動作最適化を行うために最適化ルールを説明のためのデータフローグラフ500に適用することを示す。
図5Aに示すように、データフローグラフ500は、各々がそれぞれの計算を表すノード502、504、及び506のシーケンスを包含する。幾つかの実施形態では、データフローグラフの実行中に、別個のノードによって表されるデータ処理動作は、1つ又は複数のコンピューティングデバイスで走行している複数の異なるプロセスによって実行され得る。グラフオプティマイザは、全ての動作が、単一のコンピューティングデバイスで実行される単一のプロセスによって行われるように、3つのノードのシーケンスを単一のノード(例えば、データフローグラフ505のノード508)に置換することによって統合動作最適化を行うことができ、これは、プロセス間(及び潜在的にデバイス間)通信のオーバーヘッドを減少させる。
【0100】
図5Bは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ510に適用することを示す。
図5Bに示すように、データフローグラフ510は、キーA1及びB1を使用して、データセットA及びBに関する結合動作を表すノード512と、その後に続く、キーA1及びC1を使用した、ノード512によって表される結合動作の出力及びデータセットCに関する結合動作を表すノード514とを包含する。この例では、グラフオプティマイザは、それぞれの結合動作を表す2つの別個のノードを、データフローグラフ515のノード516を用いて示されるように、キーA1、B1、及びC1を使用したデータセットA、B、及びCに関する結合動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、結合処理が、単一のコンピューティングデバイスで実行される単一のプロセスによって行われ、これは、プロセス間(及び潜在的にデバイス間)通信のオーバーヘッドを減少させる。
【0101】
図5Cは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ520に適用することを示す。
図5Cに示すように、データフローグラフ520は、キーAに関するフィルタリング動作を表すノード522と、その後に続く、キーBに関する別のフィルタリング動作を表すノード524とを包含する。この例では、グラフオプティマイザは、それぞれのフィルタ動作を表す2つの別個のノード522及び524を、データフローグラフ525のノード526を用いて示されるように、キーA及びキーBの両方に関してフィルタリングするフィルタ動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、フィルタリングが、単一のコンピューティングデバイスで実行される単一のプロセスによって行われ、これは、プロセス間(及び潜在的にデバイス間)通信のオーバーヘッドを減少させる。
【0102】
図5Dは、統合動作最適化を行うために最適化ルールを別の説明のためのデータフローグラフ530に適用することを示す。
図5Dに示すように、データフローグラフ530は、キーAに関するフィルタリング動作を表すノード532と、その後に続く、ロールアップ動作を表すノード534とを包含する。この例では、グラフオプティマイザは、2つの別個のノード522及び524を、データフローグラフ535のノード536を用いて示されるように、キーAに関して選択された入力を処理するロールアップ動作を表す単一のノードに置換することによって、統合動作最適化を行うことができる。このようにして、単一のデバイスで実行される単一のプロセスが、ロールアップ動作及びフィルタリング動作と同等のものを行うことができ、これは、プロセス間(及び潜在的にデバイス間)通信のオーバーヘッドを減少させる。
【0103】
図6は、不要なデータ処理動作を除去するために最適化ルールを説明のためのデータフローグラフ600に適用することを示す。
図6に示すように、データフローグラフ600は、キーAに関するソート動作を表すノード602と、その後に続く、再フォーマットコマンドを表すノード604と、その後に続く、無順序書き込みコマンドを表すノード606とを包含する。書き込みコマンドが無順序であり、従って、ノード602によって表されるソート動作によってデータに課される順序が、書き込み動作によって保持されない場合は、グラフオプティマイザは、ソート動作を表すノードを除去することができ、データフローグラフ605がもたらされる。
【0104】
図7は、本明細書に記載する技術の幾つかの実施形態による、幅減少最適化を行うために最適化ルールを説明のためのデータフローグラフ700に適用することを示す。
図7に示すように、データフローグラフ700は、データ列Aの値を列B及びCに保存されたデータの論理「or」として設定するノード702と、その後に続く、ノード702によって提供されたデータ列Aに関するフィルタリング動作を表すノード704と、キーDを使用したソーティング動作を表すノード706とを包含する。フィルタリング動作後に、データ列Aは、下流の計算で使用されない場合がある。従って、幾つかの実施形態では、グラフオプティマイザは、データ列Aのデータを、それがさらに伝播されないように、(例えば、データフローグラフ705のノード708を用いて示されるように、これらのデータをノード間のリンクに沿って移動するデータから削除するためのノードの導入により)除去することによって、幅減少最適化を行うことができる。これは、データフローグラフ705におけるノード704の下流の後続の計算を通してデータを運ぶために必要とされる計算資源の量を(例えば、利用されるネットワーク資源、メモリ資源、及び処理資源を減少させることによって)減少させる。
【0105】
図8Aは、重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフ800に適用することを示す。
図8Aに示すように、データフローグラフ800は、共に同じ基礎ファイル(A.dat)からの読み取り動作を表すノード802及び804を包含する。グラフオプティマイザは、データが一度だけ読み取られるように、このような両ノードを(例えば、データフローグラフ805のノード806によって示されるような)単一のノードに置換することによって重複排除最適化を行うことができる。データが、後にデータフローグラフ805の複数の異なる部分で使用される場合であっても、同じデータにおいて二度読み取りを行わないことにより、データにアクセスするために使用されるコンピューティング資源の量が減少する。
【0106】
図8Bは、ジッパリングを用いて重複排除最適化を行うために最適化ルールを説明のためのデータフローグラフ811に適用することを示す。
図8Bに示すように、データフローグラフ811は、「A.dat」と呼ばれるファイルからデータを読み取るデータ処理動作を表すノード810を包含する。次いで、このデータは、2つの異なるブランチで処理される。第1のブランチは、(データ列「A.f」を取り出し、その列のデータに「1」を足す)ノード812と、(列「A.k」に関してデータをソートする)ノード814とを含有する。第2のブランチは、(データ列「A.g」を取り出し、その列のデータに「3」を掛ける)ノード816と、(列「A.k」に関してデータをソートする)ノード818とを含有する。
図8Aの例では、重複排除は、同一の処理(同じファイルから同じデータを読み取る)を行ったノードを除去することに関与するものであった。しかし、
図8Bの例では、グラフ811の異なるブランチによって行われる処理は、同一ではない。しかし、これらの異なるブランチで行われる処理は、単一の経路へと折りたたむことが可能なほど十分に類似している。この折りたたみは、経路を左から右へ統合することによって行われ得る(ジッパーが両サイドを接続する様に似ている)。
【0107】
この例では、グラフオプティマイザは、ノード812及び816によって表される計算が、(並列ではなく)順次行われるように、グラフ811を変更し得る。その結果が、データフローグラフ821に示される。次に、グラフオプティマイザは、それぞれのソート動作を表すノード826及び828が、単一のノード836に統合されるように、グラフ821を変更し得る。その結果が、データフローグラフ831に示される。見て分かる通り、グラフ831のノードの数は、グラフ811と比較して減少しており、同じデータの処理を同じ場所で行うことができ、それによって、必要とされる計算資源が減少する。加えて、例えば、ノード832及び834によって表される動作を単一のノードに統合することによって、結果として生じたグラフ831にさらなる最適化を適用することができる。
【0108】
図9は、順次-並列最適化を行うために最適化ルールを説明のためのデータフローグラフ900に適用することを示す。
図9に示すように、データフローグラフ900は、k個の複数のコンピューティングデバイスにわたって以前に処理されたデータに適用されるシリアル化動作を表すノード902と、(キーAに関する)ソーティングを表すノード904とを包含する。幾つかの実施形態では、データフローグラフオプティマイザは、シリアル化されたデータに適用される1つ又は複数の動作が、代わりに並列化された様式で適用されるように、データフローグラフを変更し得る。この例では、データフローグラフオプティマイザは、シリアル化動作を除去し、データフローグラフ905のノード906を用いて示されるように、ソーティングがkに関して並列な形態で適用されることを可能にするように、グラフ900を変更し得る。次いで、k個の並列ソートの結果が、データフローグラフ905におけるノード908を用いて示されるように、マージ動作を使用して統合され得る。
【0109】
図10Aは、本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフ1000を示す。
図10Bは、本明細書に記載する技術の幾つかの実施形態による、
図10Aに示される初期データフローグラフに最適化ルールを反復的に適用することによって取得された、更新されたデータフローグラフ1050を示す。
図10Aの初期データフローグラフ1000及び
図10Bの更新されたデータフローグラフ1050を比較することによって分かるように、更新されたデータフローグラフは、初期データフローグラフよりも少ない数のノード及びリンクを有し、初期データフローグラフよりも、より効率的に実行され得る。本明細書に記載する技術の幾つかの実施形態による、初期データフローグラフ1000に適用される幾つかの最適化を以下に詳述する。
【0110】
図10A及び10Bの説明のための例では、
図10Bの更新されたデータフローグラフ1050を生成するために、複数の統合動作最適化が、
図10Aの初期データフローグラフ1000に適用される。例えば、ノード1002によって表されるデータ処理動作(「expr」-これは、ノード1002を通って流れるデータに対して任意の適宜の計算を行うための式でもよく、この場合、出力のためにデータをフォーマットすることである)、及びノード1004によって表される書き込みデータ処理動作(「write_file」)が、これらのデータ処理動作の両方を行うように構成されたノード1054を含有する、更新されたデータフローグラフ1050の生成中に、統合動作最適化を用いて統合される。別の例として、ノード1006によって表されるデータ処理動作(「expr」)及びノード1008によって表されるフィルタデータ処理動作(「filter」)が、これらのデータ処理動作の両方を行うように構成されたノード1056を含有する、更新されたデータフローグラフ1050の生成中に、統合動作最適化を用いて統合される。さらに別の例として、ノード1010によって表されるデータ処理動作(「expr」)及びノード1012によって表される書き込みデータ処理動作(「write_file」)が、これらのデータ処理動作の両方を行うように構成されたノード1058を含有する、更新されたデータフローグラフ1050の生成中に、統合動作最適化を用いて統合される。本明細書で述べた通り、幾つかの実施形態では、単一のデータフローグラフノードに関連付けられたデータ処理動作は、単一のコンピューティングデバイスで実行される単一のプロセスによって行われるため、ノードの統合は、プロセス間(及び潜在的にデバイス間)通信のオーバーヘッドを減少させ、このことは、データ処理システムの性能を向上させる。
【0111】
図10A及び10Bの説明のための例では、
図10Bの更新されたデータフローグラフ1050を生成するために、冗長を減少させるための複数の最適化が、
図10Aの初期データフローグラフ1000に適用される。例えば、初期データフローグラフ1000においてノード1030、1032、及び1034によって表されるソート動作は、更新されたデータフローグラフ1050では、除去され、同等のものを持たない。これらのソート動作は、これらのノードに入ってくるデータが、それぞれノード1022、1026、及び1028によって適用されたソーティング動作によって既にソートされているため、除去される。ノード1022、1026、及び1028における処理によって適用されたソートされた順序は、後続のデータ処理動作(例えば、ソートされたロールアップ動作)によって保持され、データのソートされた順序は、ノード1030、1032、及び1034におけるさらなるソーティングが不要となるように維持される。従って、ノード1030、1032、及び1034は、更新されたデータフローグラフ1050の生成中に除去される。一方、ノード1022、1026、及び1028によって表されるソーティング動作は保持される。例えば、初期データフローグラフ1000におけるノード1022及び1026は、更新されたデータフローグラフ1050におけるノード1070及び1072に対応する。これに対して、ノード1036によって表されるソート動作は、それが、先行する完全な外部マージ結合動作がソートされた状態を保持しないため冗長ではないので、保持される(ノード1074は、更新されたデータフローグラフ1050における対応するノードである)。
【0112】
図10A及び10Bは、不要なデータ処理動作を除去する別の例も示す。
図10Aに示すように、初期データフローグラフ1000は、最終的に無順序書き込みコマンドを表すノード1004が後に続くソート動作を表すノード1024を包含する。書き込みコマンドが無順序であり、従って、ノード1024によって表されるソート動作によってデータに課される順序が、書き込み動作によって保持されない場合は、ソート動作を表すノード1024は、除去することができる。
図10Bから分かるように、ノード1024に対応するソート動作は存在しない(この動作は、除去されている)。
【0113】
不要なデータ処理動作を除去するさらに別の例として、初期データフローグラフ1000は、ノード1040、1045、1046、及び1047によって表されるレイアウト及びパーティション動作を包含する(これらは、各々が、それぞれのレイアウト及びパーティションノードによって先行され、レイアウトがそうでなければ変化しないため、冗長である)。従って、これらのノードは、初期データフローグラフ1000から除去される(対応するノードが、データフローグラフ1050に存在しない)。初期データフローグラフ1000に適用される関連の最適化では、ノード1048によって表されるレイアウト及びパーティション動作は、ノード1088によって表される集約動作に置換される。これに対して、ノード1044によって表されるレイアウト及びパーティションデータ処理動作は、それが冗長ではないため保持され、これは、最終的なパーティショニング及びレイアウトを確立する責任を負っており、最終的なグラフ1050において、ノード1080(partition_by_key)がもたらされる。
【0114】
図10A及び10Bは、幅減少最適化の一例も示す。
図10Bの更新されたデータフローグラフ1050に示されるノード1064(「reformat_implicit」)の導入から分かるように、ノード1014によって表される読み取りデータ処理動作を用いて処理されるデータ列の数が減少する。この例では、読み取りデータの幾つかの列が、どの列が、ノード1012によって表される書き込み動作によって書き出されるかを決定することによって後に使用されないことをグラフオプティマイザが検出する。
【0115】
図10Cは、本明細書に記載する技術の幾つかの実施形態による、
図10Aの初期データフローグラフ1000の別の表示を示す。この表示では、データフローグラフノードのラベルが、それらの頭字語に置き換えられている。同様に、
図10Dは、
図10Bの更新されたデータフローグラフの別の表示を示す(この表示では、データフローグラフノードのラベルが、それらの頭字語に置き換えられている)。
【0116】
図11は、本明細書に記載される技術が実施され得る適宜のコンピューティングシステム環境1100の一例を示す。コンピューティングシステム環境1100は、適宜のコンピューティング環境の一例にすぎず、本明細書に記載する技術の使用又は機能性の範囲に関して何ら制限を示唆することを意図したものではない。コンピューティング環境1100は、例示的動作環境1100に図示されるコンポーネントの何れか1つ又は組み合わせに関する依存性又は要件を有すると解釈されるべきものでもない。
【0117】
本明細書に記載する技術は、多数の他の汎用又は専用コンピューティングシステムの環境又は構成と共に使用可能である。本明細書に記載する技術と共に使用するのに適し得る周知のコンピューティングシステム、環境、及び/又は構成の例には、限定されることはないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド又はラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル大衆消費電子製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステム又はデバイスの何れかを包含する分散コンピューティング環境などが包含される。
【0118】
コンピューティング環境は、プログラムモジュールなどのコンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。本明細書に記載する技術は、通信ネットワークを通してリンクされるリモート処理デバイスによってタスクが行われる分散コンピューティング環境において実行されてもよい。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを包含するローカル及びリモートコンピュータストレージ媒体の両方に位置していてもよい。
【0119】
図11を参照して、本明細書に記載する技術を実施する例示的システムは、コンピュータ1110の形態の汎用コンピューティングデバイスを包含する。コンピュータ1110のコンポーネントは、限定されないが、処理装置1120、システムメモリ1130、及びシステムメモリを包含する様々なシステムコンポーネントを処理装置1120に結合するシステムバス1121を包含してもよい。システムバス1121は、様々なバスアーキテクチャの何れかを使用した、メモリバス又はメモリコントローラ、周辺バス、及びローカルバスを包含する幾つかのタイプのバス構造の何れかであってもよい。例として、及び限定ではなく、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ電子装置規格化協会(Video Electronics Standards Association)(VESA)ローカルバス、及びメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト(PCI)バスが包含される。
【0120】
コンピュータ1110は、一般的に、様々なコンピュータ可読媒体を包含する。コンピュータ可読媒体は、コンピュータ1110によってアクセスすることができる任意の入手可能な媒体でよく、及び揮発性及び不揮発性両方の媒体、リムーバブル及び非リムーバブル媒体を包含する。例として、及び限定ではなく、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータなどの情報のストレージのための任意の方法又は技術で実施される、揮発性及び不揮発性、リムーバブル及び非リムーバブル媒体を包含する。コンピュータストレージ媒体には、限定されないが、RAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)又は他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又は他の磁気ストレージデバイス、又は所望の情報を保存するために使用することができ、且つコンピュータ1110によってアクセスすることができるその他の媒体が包含される。通信媒体は、一般的に、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを搬送波又は他のトランスポート機構などの変調データ信号で具現化し、及びあらゆる情報配信媒体を包含する。「変調データ信号」という用語は、それの特性集合の1つ又は複数を有する、又は信号の情報をエンコードするように変更された信号を意味する。例として、及び限定ではなく、通信媒体には、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、RF、赤外線、及び他の無線媒体などの無線媒体が包含される。上記の何れかの組み合わせも、コンピュータ可読媒体の範囲内に包含されるものとする。
【0121】
システムメモリ1130は、読み出し専用メモリ(ROM)1131及びランダムアクセスメモリ(RAM)1132などの揮発性及び/又は不揮発性メモリの形態のコンピュータストレージ媒体を包含する。起動時などに、コンピュータ1110内の素子間で情報を転送することを助ける基本ルーチンを含有した、基本入出力システム1133(BIOS)は、一般的に、ROM1131内に保存される。RAM1132は、一般的に、即座に利用できる、及び/又は処理装置1120によって現在操作されているデータ及び/又はプログラムモジュールを含有する。例として、及び限定ではなく、
図11は、オペレーティングシステム1134、アプリケーションプログラム1135、他のプログラムモジュール1036、及びプログラムデータ1137を図示する。
【0122】
コンピュータ1110は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体も包含することができる。単なる例として、
図11は、非リムーバブル、不揮発性磁気媒体に対する読み取り又は書き込みを行うハードディスクドライブ1141、フラッシュメモリなどのリムーバブル、不揮発性メモリ1152に対する読み取り又は書き込みを行うフラッシュドライブ1151、及びCD-ROM又は他の光学媒体などのリムーバブル、不揮発性光ディスク1156に対する読み取り又は書き込みを行う光ディスクドライブ1155を図示する。例示的動作環境において使用することができる他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータストレージ媒体には、限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体RAM、固体ROMなどが包含される。ハードディスクドライブ1141は、一般的に、インタフェース1140などの非リムーバブルメモリインタフェースを通してシステムバス1121に接続され、及び磁気ディスクドライブ1151及び光ディスクドライブ1155は、一般的に、インタフェース1150などのリムーバブルメモリインタフェースによってシステムバス1121に接続される。
【0123】
上述した、及び
図11に図示したドライブ及びそれらに関連付けられたコンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ1110の他のデータのストレージを提供する。
図11においては、例えば、ハードディスクドライブ1141は、オペレーティングシステム1144、アプリケーションプログラム1145、他のプログラムモジュール1146、及びプログラムデータ1147を保存するものとして図示される。これらのコンポーネントは、オペレーティングシステム1134、アプリケーションプログラム1135、他のプログラムモジュール1136、及びプログラムデータ1137と同じであってもよいし、或いは異なっていてもよいことに留意されたい。オペレーティングシステム1144、アプリケーションプログラム1145、他のプログラムモジュール1146、及びプログラムデータ1147は、少なくとも、それらが異なるコピーであることを図示するために、ここでは、異なる番号が付与されている。ユーザは、キーボード1162及び一般にマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス1161などの入力デバイスによって、コンピュータ1110にコマンド及び情報を入力することができる。他の入力デバイス(不図示)には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが包含され得る。これら及び他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース1160によって、処理装置1120に接続されることが多いが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB)などの他のインタフェース及びバス構造によって接続されてもよい。モニタ1191又は他のタイプのディスプレイデバイスも、ビデオインタフェース1190などのインタフェースを介して、システムバス1121に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース1195を通して接続することができる、スピーカ1197及びプリンタ1196などの他の周辺出力デバイスも包含することができる。
【0124】
コンピュータ1110は、リモートコンピュータ1180などの1つ又は複数のリモートコンピュータへの論理接続を用いたネットワーク化環境で動作することができる。リモートコンピュータ1180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、又は他の共通ネットワークノードでもよく、及び一般的に、
図11ではメモリストレージデバイス1181のみが図示されているが、コンピュータ1110に関連して上記した素子の多く又は全てを包含する。
図11に描かれる論理接続は、ローカルエリアネットワーク(LAN)1171及び広域ネットワーク(WAN)1173を包含するが、他のネットワークも包含してもよい。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて、ありふれたものである。
【0125】
LANネットワーキング環境で使用される場合、コンピュータ1110は、ネットワークインタフェース又はアダプタ1170を通してLAN1171に接続される。WANネットワーキング環境で使用される場合、コンピュータ1110は、一般的に、モデム1172、又はインターネットなどのWAN1173上で通信を確立するための他の手段を包含する。内部又は外部のものでもよいモデム1172は、ユーザ入力インタフェース1160又は他の適宜の機構を介して、システムバス1121に接続されてもよい。ネットワーク化環境において、コンピュータ1110に関連して描かれたプログラムモジュール、又はそれらの一部は、リモートメモリストレージデバイスに保存されてもよい。例として、及び限定ではなく、
図11は、メモリデバイス1181に常駐しているとして、リモートアプリケーションプログラム1185を図示する。示されるネットワーク接続は、例示的なものであり、及びコンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されるだろう。
【0126】
本発明の少なくとも1つの実施形態の幾つかの態様を上記のように記載したが、様々な変更、修正、及び改良が、当業者には容易に思い付くことが理解されるものとする。
【0127】
このような変更、修正、及び改良は、本開示の一部であることが意図され、及び本発明の精神及び範囲内であることが意図される。さらに、本発明の利点が示されるが、本明細書に記載の技術の全ての実施形態が、全ての記載した利点を包含するわけではないことが理解されるものとする。幾つかの実施形態は、本明細書において有利であると記載された何れの特徴も実施しない場合があり、場合によっては、記載された特徴の1つ又は複数が、さらなる実施形態を得るために実施されてもよい。従って、上記の記載及び図面は、単なる例である。
【0128】
本明細書に記載の技術の上記実施形態は、多数のやり方の何れで実施されてもよい。例えば、これらの実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを用いて実施されてもよい。ソフトウェアで実施される場合には、ソフトウェアコードは、単一のコンピュータにおいて提供されていようと、複数のコンピュータ間で分散されていようと、任意の適宜のプロセッサ又は一群のプロセッサ上で実行することができる。このようなプロセッサは、集積回路として実施されてもよく、業界において、CPUチップ、GPUチップ、マイクロプロセッサ、マイクロコントローラ、又はコプロセッサなどの名称で知られている市販の集積回路コンポーネントを包含する集積回路コンポーネントにおいて、1つ又は複数のプロセッサを有する。代替的に、プロセッサは、ASICなどのカスタム回路、又はプログラマブル論理デバイスの構成に起因するセミカスタム回路において実施されてもよい。又さらなる代替手段として、プロセッサは、市販、セミカスタム、或いはカスタムであろうと、より大きな回路又は半導体デバイスの一部であってもよい。ある具体例として、幾つかの市販のマイクロプロセッサは、複数のコアの1つ又はサブセットがプロセッサを構成することができるように、複数のコアを有する。しかし、プロセッサは、任意の適宜のフォーマットの回路を使用して実施することができる。
【0129】
さらに、コンピュータは、ラックマウント式コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの多数の形態の何れかで具現化されてもよいことが理解されるものとする。追加的に、コンピュータは、携帯情報端末(PDA)、スマートフォン、又は任意のその他の適宜のポータブル又は固定電子デバイスを包含する、一般にコンピュータとは見なされないが、適宜の処理能力を備えたデバイスに組み込まれてもよい。
【0130】
又、コンピュータは、1つ又は複数の入力デバイス及び出力デバイスを有していてもよい。これらのデバイスは、特に、ユーザインタフェースを提示するために使用することができる。ユーザインタフェースを提供するために使用することができる出力デバイスの例には、出力の視覚的表現のためのプリンタ又はディスプレイスクリーン、及び出力の可聴表現のためのスピーカ又は他の音生成デバイスが包含される。ユーザインタフェースに使用することができる入力デバイスの例には、キーボード、並びにマウス、タッチパッド、及びデジタイザタブレットなどのポインティングデバイスが包含される。別の例として、コンピュータは、音声認識により、又は他の可聴フォーマットで入力情報を受信してもよい。
【0131】
このようなコンピュータは、企業ネットワーク又はインターネットなどのローカルエリアネットワーク又は広域ネットワークとして包含する、任意の適宜の形態の1つ又は複数のネットワークによって相互接続することができる。このようなネットワークは、任意の適宜の技術に基づいてもよく、及び任意の適宜のプロトコルに従って動作してもよく、及び無線ネットワーク、有線ネットワーク、又は光ファイバネットワークを包含してもよい。
【0132】
又、本明細書に概要が述べられる様々な方法又はプロセスは、様々なオペレーティングシステム又はプラットフォームの何れか1つを用いる1つ又は複数のプロセッサに対して実行可能なソフトウェアとして符号化されてもよい。追加的に、このようなソフトウェアは、多数の適宜のプログラミング言語及び/又はプログラミング又はスクリプト作成ツールの何れかを使用して書かれてもよく、及びフレームワーク又は仮想マシンに対して実行される実行可能マシン語コード又は中間コードとしてコンパイルされてもよい。
【0133】
この点において、本発明は、1つ又は複数のコンピュータ又は他のプロセッサに対して実行されると、上述の本発明の様々な実施形態を実施する方法を行う1つ又は複数のプログラムでエンコードされたコンピュータ可読ストレージ媒体(又は複数のコンピュータ可読媒体)(例えば、コンピュータメモリ、1つ又は複数のフロッピーディスク、コンパクトディスク(CD)、光ディスク、デジタルビデオディスク(DVD)、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ又は他の半導体デバイスにおける回路構成、又は他の有形コンピュータストレージ媒体)として具現化されてもよい。上記の例から明らかなように、コンピュータ可読ストレージ媒体は、非一時的な形態でコンピュータ実行可能命令を提供するのに十分な時間の間、情報を保持することができる。このような1つ又は複数のコンピュータ可読ストレージ媒体は、それ(ら)に保存された1つ又は複数のプログラムを、上述のような本発明の様々な態様を実施するために、1つ又は複数の異なるコンピュータ又は他のプロセッサにロードすることができるように、可搬であってもよい。本明細書においては、「コンピュータ可読ストレージ媒体」という用語は、製品(すなわち、製造物)又はマシンであると見なすことができる非一時的コンピュータ可読媒体のみを網羅する。代替的又は追加的に、本発明は、伝搬信号などの、コンピュータ可読ストレージ媒体以外のコンピュータ可読媒体として具現化されてもよい。
【0134】
「プログラム」又は「ソフトウェア」という用語は、本明細書では、上述のような本発明の様々な態様を実施するようにコンピュータ又は他のプロセッサをプログラムするために使用することができる、あらゆるタイプのコンピュータコード又はコンピュータ実行可能命令のセットを指すために総称的に使用される。追加的に、本実施形態のある態様によれば、実行されると、本発明の方法を行う1つ又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに常駐する必要はなく、本発明の様々な態様を実施するために、多数の異なるコンピュータ又はプロセッサ間で、モジュラー方式で分散されてもよいことが理解されるものとする。
【0135】
コンピュータ実行可能命令は、1つ又は複数のコンピュータ又は他のデバイスによって実行される、プログラムモジュールなどの多くの形態のものでもよい。一般に、プログラムモジュールには、特定のタスクを行う、又は特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが包含される。一般的に、プログラムモジュールの機能性は、様々な実施形態において、要望通りに組み合わせられてもよいし、或いは分散されてもよい。
【0136】
又、データ構造は、任意の適宜の形態でコンピュータ可読媒体に保存されてもよい。図示を簡単にするために、データ構造は、データ構造内の場所によって関連したフィールドを有して示される場合がある。このような関係は、同様に、フィールドのストレージにフィールド間の関係を伝達するコンピュータ可読媒体内の場所を割り当てることによって、達成することができる。但し、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用によることを包含する、任意の適宜の機構を使用して、データ構造のフィールドにおける情報間の関係を確立してもよい。
【0137】
本発明の様々な態様は、単独で、組み合わせて、又は上記に記載した実施形態において具体的に述べられていない様々な配置で使用されてもよく、従って、その適用において、上記の説明に記載された、又は図面に図示されたコンポーネントの詳細及び配置に限定されない。例えば、ある実施形態に記載した態様は、任意の様式で、他の実施形態に記載した態様と組み合わせることができる。
【0138】
又、本発明は、一例を提供した方法として具現化されてもよい。この方法の一部として行われるアクトは、任意の適宜のやり方で、順序付けが行われてもよい。従って、アクトが、図示されたものとは異なる順序で(これは、説明のための実施形態では、逐次的なアクトとして示されたとしても、幾つかのアクトを同時に行うことを包含してもよい)行われる実施形態が構築されてもよい。
【0139】
さらに、幾つかの行為は、「ユーザ」によって行われると記載される。「ユーザ」は、一人の個人である必要はなく、及び幾つかの実施形態では、「ユーザ」に帰する行為は、複数の個人から成るチーム及び/又はコンピュータ支援ツール又は他の機構と組み合わせた個人によって行われてもよいことが理解されるものとする。
【0140】
クレーム要素を修飾する、クレームにおける「第1の」、「第2の」、「第3の」などの序数用語の使用は、それ自体は、1つのクレーム要素の別のクレーム要素に対する優先、先行、又は順序、又は方法のアクトが行われる時間的順序を暗示せず、ある名称を有する1つのクレーム要素を、同じ名称(序数用語の使用を除き)を有する別の要素と区別するための単なるラベルとして使用することにより、これらのクレーム要素が区別される。
【0141】
又、本明細書において使用される表現及び用語は、説明目的のものであり、及び限定として見なされるものではない。本明細書における、「包含する(including)」、「含む(comprising)」、又は「有する(having)」、「含有する(containing)」、「関与する(involving)」、及びそれらのバリエーションの使用は、その後にリストされるアイテム及びそれらの均等物、並びに追加のアイテムを網羅することを意味する。
【符号の説明】
【0142】
100 データ処理システム
102-1 データ記憶装置
102-2 データ記憶装置
104 クエリー入力モジュール
106 クエリープランジェネレータ
108 データフローグラフジェネレータ
110 グラフオプティマイザ
112 モジュール
115 グラフ実行エンジン
【手続補正書】
【提出日】2024-06-05
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
少なくとも1つのコンピュータハードウェアプロセッサによって実行される方法であって、
第1の複数のデータ処理動作を表す第1の複数のノードと、前記第1の複数のノードのノード間のデータのフローを表す第1の複数のリンクとを含む初期データフローグラフを取得するステップと、
前記初期データフローグラフを更新するために、1つまたは複数のデータフローグラフ最適化ルールを反復的に適用することにより、更新されたデータフローグラフを生成するステップであって、前記更新されたデータフローグラフが、第2の複数のデータ処理動作を表す第2の複数のノードと、前記第2の複数のノードのノード間のデータのフローを表す第2の複数のリンクとを含む、ステップと
を含み、
前記反復的に適用することが、データフローグラフで識別されるそれぞれのパターンを表す、第1の式を含む複数の式を定義するデータフローグラフパターンマッチング言語を用いて実行され、
前記反復的に適用することが、
前記データフローグラフパターンマッチング言語の前記第1の式を用いて、第1の最適化ルールを適用する前記初期データフローグラフの第1の部分を識別することと、
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することと
を含む、方法。
【請求項2】
前記第2の複数のノードは、前記第1の複数のノードよりも少ない数のノードを有し、前記第2の複数のリンクは、前記第1の複数のリンクよりも少ない数のリンクを有する、請求項1に記載の方法。
【請求項3】
前記第2の複数のノードが、第1のデータ処理動作を表すノードと、第2のデータ処理動作を表す別のノードとを含み、
前記方法が、
少なくとも部分的に、第1のコンピュータシステムプロセスを用いて前記第1のデータ処理動作を実行し、前記第1のコンピュータシステムプロセスとは異なる第2のコンピュータシステムプロセスを用いて前記第2のデータ処理動作を実行することにより、前記更新されたデータフローグラフを実行するステップ
をさらに含む、請求項1に記載の方法。
【請求項4】
前記更新されたデータフローグラフの1つまたは複数のノードの各々に処理レイアウトを割り当てるステップをさらに含み、
前記更新されたデータフローグラフの実行が、前記割り当てられる1つまたは複数の処理レイアウトに従って行われる、請求項3に記載の方法。
【請求項5】
前記第1の最適化ルールが統合動作最適化ルールを含み、
データフロー部分グラフパターンマッチング言語の前記第1の式が、前記統合動作最適化ルールを用いて、統合され、単一のノードによって表されることが適しているそれぞれの一連の計算を表す少なくとも閾値長さの一連のノードを識別するための式を含み、
前記統合動作最適化ルールを前記初期データフローグラフの前記第1の部分に適用することが、前記一連のノードにより表される動作の統合を表す前記単一のノードにより、前記一連のノードを置換することを含む、請求項1に記載の方法。
【請求項6】
データフローグラフパターンマッチング言語の前記第1の式が、互いに可換なデータ処理動作を表す前記初期データフローグラフのノードを識別するための式を含み、
前記初期データフローグラフの前記第1の部分を識別することが、前記第1の複数のノードのうちの第2のノードにより表される第2のデータ処理動作と可換である、第1のデータ処理動作を表す前記第1の複数のノードの第1のノードを識別することであって、前記第2のノードが第1のノードに接続されている、識別することを含む、請求項1に記載の方法。
【請求項7】
前記第1の最適化ルールを前記初期データフローグラフの前記第1の部分に適用することが、
互いに可換なデータ処理動作を表す、前記初期データフローグラフにおいて識別された前記ノードの順序を変えることと、
前記順序が変えられた前記ノードを有する、前記初期データフローグラフの前記識別された第1の部分に前記第1の最適化ルールを適用することと
を含む、請求項6に記載の方法。
【請求項8】
前記第1の最適化ルールを適用することが、冗長なデータ処理動作の除去、強度低下最適化、統合動作最適化、幅減少最適化、及び重複排除最適化から成る群から選択された最適化を適用することを含む、請求項1に記載の方法。
【請求項9】
更新されたデータフローグラフを生成することが、冗長な動作を表す第1のノードを識別することと、前記第1のノードを前記初期データフローグラフから除去することと、を含む、請求項1に記載の方法。
【請求項10】
更新されたデータフローグラフを生成することが、それぞれのソートデータ処理動作を表す、前記初期データフローグラフにおける2つのノードを識別することと、前記それぞれのソートデータ処理動作を表す前記2つのノードを、ソートデータ処理動作を表す単一のノードに置換することと、を含み、
前記それぞれのソートデータ処理動作を表す前記2つのノードが、前記初期データフローグラフにおいて、互いに隣接していない、請求項1に記載の方法。
【請求項11】
更新されたデータフローグラフを生成することが、第1のデータ処理動作を表す第1のノードを、前記第1のデータ処理動作が必要とする計算よりも少ない計算を必要とする第2のデータ処理動作を表す第2のノードで置換することを含む、請求項1に記載の方法。
【請求項12】
更新されたデータフローグラフを生成することが、それぞれの結合データ処理動作を表す、前記初期データフローグラフにおける2つのノードを識別することと、前記それぞれの結合データ処理動作を表す前記2つのノードを、結合データ処理動作を表す単一のノードで置換することと、を含む、請求項1に記載の方法。
【請求項13】
前記初期データフローグラフを生成することが、
構造化照会言語(SQL)クエリーを取得することと、
前記SQLクエリーのクエリープランを生成することと、
前記クエリープランを使用して、前記初期データフローグラフを生成することと
を含む、請求項1に記載の方法。
【請求項14】
データ処理システムであって、
少なくとも1つのコンピュータハードウェアプロセッサと、少なくとも1つの非一時的コンピュータ可読記録媒体とを備え、前記少なくとも1つの非一時的コンピュータ可読記録媒体が、
前記少なくとも1つのコンピュータハードウェアプロセッサにより実行されたときに、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項1から13のうちのいずれか一項に記載の方法を実行させるためのプロセッサ実行可能命令
を記録する、データ処理システム。
【請求項15】
少なくとも1つのコンピュータハードウェアプロセッサにより実行されたときに、前記少なくとも1つのコンピュータハードウェアプロセッサに請求項1から13のうちのいずれか一項に記載の方法を実行させるためのプロセッサ実行可能命令を記録する少なくとも1つ非一時的コンピュータ可読記録媒体。
【外国語明細書】