(57)【要約】  データの緻密化のための方法および装置が提供される。ＤＭＬステートメント内にデータを区分化するための構文を含むための方法および装置が提供される。区分化データ用の構文は必ずしもデータの緻密化を行なわなくてもよく、データの緻密化は必ずしも区分化データ用の構文を含んでいなくてもよい。一実施例では、OUTER JOINのシンタックスは、データ緻密化に使用され得るPARTITION BY構文を含むよう拡張される。
2007534035.tif 000002
【特許請求の範囲】
【請求項１】
マシンにより実施される方法であって、
複数の次元に関連付けられたデータの第１の集合に基づいて、複数の次元のうちの第１の次元に関してデータの第１の集合よりも密なデータの第２の集合を生成するステップを含み、
データの第１の集合はデータの複数の部分集合を含み、
生成するステップは、データの部分集合の各々とデータの第３の集合との間で外部結合を行なうことを含む、方法。
【請求項２】
データの第１の集合は、次元値組合せに関連付けられた行を含み、次元値組合せは、複数の次元から選択された次元値の組合せであり、
データの第２の集合は、データの第１の集合の行に対応する次元値組合せについて対応する行を含み、
対応する行は次元値組合せに関連付けられており、
生成するステップは、
次元値組合せの集合について、或る対応する行がデータの第２の集合に存在するかどうかをチェックするステップを含み、次元値組合せの集合は１つの次元に関して密であり、生成するステップはさらに、
対応する行が存在しない場合、行を作成するステップを含む、請求項１に記載の方法。
【請求項３】
チェックするステップは、次元値組合せの集合の各次元値組合せについて１つのループを行なう入れ子ループ命令の集合内で行なわれる、請求項２に記載の方法。
【請求項４】
データの部分集合の各々はデータの単一の行である、請求項１に記載の方法。
【請求項５】
データの部分集合の各々はデータの第１の集合の１区分であり、複数の次元のうちの１つの次元から選択された単一の次元値に関連付けられている、請求項１に記載の方法。
【請求項６】
生成するステップは、データ操作言語ステートメントの検出に応答して行なわれる、請求項１に記載の方法。
【請求項７】
生成するステップは、第１のプロセッサを用いて第１の部分集合に対して外部結合を行なうステップと、第１のプロセッサとは異なる第２のプロセッサを用いて第２の部分集合に対して外部結合を行なうステップとを含む、請求項１に記載の方法。
【請求項８】
外部結合は右外部結合である、請求項７に記載の方法。
【請求項９】
外部結合は左外部結合である、請求項８に記載の方法。
【請求項１０】
生成するステップはＳＱＬエンジンによって行なわれる、請求項１に記載の方法。
【請求項１１】
生成するステップは、データの第１の集合を区分化するための区分化キーを示す式を受取るステップを含む、請求項１に記載の方法。
【請求項１２】
外部結合は、ブール式を含む結合条件に関連付けられている、請求項１に記載の方法。
【請求項１３】
データの前記第１の集合は、行の第１の集合を含み、
前記外部結合は、行の前記第１の集合と行の第２の集合との間でのものであり、生成するステップは、行の前記第１の集合の部分集合、および行の前記第２の集合のすべてを、
複数のプロセスの各々に送るステップを含む、請求項１に記載の方法。
【請求項１４】
生成するステップは、
複数の次元のうちの少なくとも１つの次元を特定するステップと、
特定された次元に関してデータの第１の集合をハッシュ区分化するステップとを含む、請求項１３に記載の方法。
【請求項１５】
データの第２の集合にどの次元値組合せが含まれるかを限定する条件を含む構文を検出するステップと、
他の構文を検出することに応答して、データの第２の集合が限定されていた次元値組合せに関してのみ演算を行なうステップとをさらに含む、請求項１に記載の方法。
【請求項１６】
データの第１の集合は複数の次元に関連付けられ、第２の集合は複数の次元に関連付けられ、データの第２の集合は、複数の次元のうちの１つに関してより密である、請求項１に記載の方法。
【請求項１７】
マシンにより実施される方法であって、
複数の次元に関連付けられたデータの第１の集合に基づいて、複数の次元のうちの第１の次元に関してデータの第１の集合よりも密なデータの第２の集合を生成するステップを含み、
生成するステップは、複数の次元のうちの第２の次元の別個の値についてデータの第１の集合のソートの組合せを行なうことなく行なわれ、
前記方法はさらに、
見つかった別個の値と第１の次元の次元値の集合との外積を行なうことにより、行の第１の集合を生成するステップと、
行の第１の集合に行が存在しない次元値の集合の次元値に対応する行を、行の前記第１の集合に追加するステップとを含む、方法。
【請求項１８】
生成するステップは、データの第１の集合のソートを行なうことなく行なわれ、データの第１の集合のソートは、複数の次元のうちの第２の次元の別個の値を見つけるために使用される、請求項１７に記載の、マシンにより実施される方法。
【請求項１９】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２０】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項２に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２１】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項３に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２２】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項４に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２３】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項５に記載の方法を１つ以上のプロセッサに行
なわせる、マシン読み取り可能な媒体。
【請求項２４】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項６に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２５】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項７に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２６】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項８に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２７】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項９に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２８】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１０に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２９】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１１に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３０】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１２に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３１】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１３に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３２】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１４に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３３】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１５に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３４】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１６に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３５】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１７に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３６】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１８に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３７】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【請求項３８】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１７に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【請求項３９】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１８に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明はデータ操作に関する。より特定的には、この発明は、１つ以上の次元に関してデータの集合を緻密化するための手法に関する。
【背景技術】
【０００２】
発明の背景
「次元」という用語は、別個の値の関連集合を指す。たとえば、TIMES（時間）次元は、１９９８年１月から２００３年１２月までのすべての日付を含み得る。同様に、PRODUCTS（製品）次元は、ある会社のあらゆる可能な製品を表わす値を含み得る。
【０００３】
データ項目の集合は、その集合の各データ項目が或る特定の次元からの値に関連付けられている場合、「次元的」である。たとえば、テーブルの各行が、或る特定の事象についてのデータ、たとえばその事象の日付といったデータを含むと仮定する。この例では、「事象データ」はTIMES次元に関して「次元的」である。
【０００４】
データ項目の集合は、それらデータ項目が２つ以上の次元に関して次元的である場合、「多次元的」である。たとえば、SALES（販売）テーブルの各行が或る特定の販売についてのデータ、たとえば（１）その販売の日付、（２）販売された製品、および（３）販売が行なわれた地域、といったデータを含むと仮定する。この例では、「販売データ」は、TIMES次元、PRODUCTS次元、およびREGION次元に関して次元的であるため、多次元的である。
【０００５】
多次元データを記憶するテーブルはしばしば「ファクトテーブル」と呼ばれる。或る特定の次元の次元値を記憶するテーブルは「次元テーブル」と呼ばれる。このため、上述のSALESテーブルを有する同じデータベースは通常、TIMESテーブル、PRODUCTSテーブル、およびREGIONテーブルも含んでいる。
【０００６】
ファクトテーブルの各行は、次元の各々について１つの値を含んでいる次元値組合せに対応している。たとえば、上述のSALESテーブルでは、各行は通常、TIMES次元値とPRODUCTS次元値とREGION次元値との組合せに対応している。所与のSALESテーブル行に関連付けられた次元値の集合は（ｔ，ｐ，ｒ）として表わされてもよく、ここで、ｔはTIMES次元についての値であり、ｐはPRODUCTS次元についての値であり、ｒはREGION次元についての値である。
【０００７】
通常、すべての次元値組合せが対応する行をファクトテーブルに有するとは限らない。このため、ファクトテーブルの行に関連付けられた次元値組合せの集合は、次元の各々からの次元値の外積の部分集合である。
【０００８】
ファクトテーブルが、次元「Ｄ」のあらゆる可能な値を、ファクトテーブルの他の次元値の任意の所与の組合せについて含む場合、ファクトテーブルは次元「Ｄ」に沿って「密である」といわれる。たとえば、REGION次元が３つの可能な値RGN１、RGN２およびRGN３のみを有すると仮定する。SALESテーブルに反映されたすべての組合せ（ｔ，ｐ）について、SALESテーブルが次元値組合せ（ｔ，ｐ，RGN１）、（ｔ，ｐ，RGN２）および（ｔ，ｐ，RGN３）についての行を含む場合、SALESテーブルはREGION次元に関して密である。
【０００９】
「緻密化」とは、データの集合を、対象の次元に沿って、元々のものより密にするプロセスである。行の集合は、たとえば、次元値の欠落した組合せについてダミー行を作成することによって緻密化されてもよい。密度が増加したデータは「緻密化された」といわれ、密度が増加した、または増加しつつある次元は、「緻密化」次元といわれる。
【００１０】
緻密化はさまざまな状況にとって有用である。たとえば、いくつかの多次元データベースシステム（たとえばオンライン分析処理（ＯＬＡＰ））における問合せは、データが時間次元に沿って緻密化されることを必要とする。また、ＯＬＡＰユーザといったユーザの中には、特に窓関数が計算され提示される際に、データを緻密化されたフォーマットで見ることに慣れている者もいる。たとえば、或る特定の日について販売がない場合、ユーザの中には依然として、ディスプレイが販売の現在高、その日、および販売列における空白空間を示しているのを見たがる者もいる（なぜなら、現在高は、緻密化されたデータを通常表示するＯＬＡＰにおける窓関数であるためである）。
【００１１】
構造化問合せ言語（ＳＱＬ）を用いると、緻密化は、DISTINCT（別個の）演算、CROSS JOIN（交差結合）演算、およびOUTER JOIN（外部結合）演算を含む一連の演算によって行なわれてもよい。一例として、以下のテーブルを含むデータベーススキーマを考慮されたい。
【００１２】
【数１】
2007534035.tif 000003
【００１３】
テーブルの上述の集合では、SALESファクトテーブルは、TIMES次元およびPRODUCTS次元に関して次元的である測度（measure）（売上高）を記憶する。SALESテーブルの各行について、「time_id」列は、その行についての時間次元値を記憶し、「product_id」列は、その行についてのPRODUCTS次元値を記憶する。こうして、SALESファクトテーブルに含まれる製品値と時間値との所与の組合せについて、amount_sold列は、測度値「売上高」を記憶する。
【００１４】
TIMES次元テーブルは、すべてのtime_id値と、各time_id値に対応する時間についての詳細とを記憶する。同様に、PRODUCTS次元テーブルは、すべてのproduct_id値と、各product_id値に対応する製品についての詳細とを記憶する。
【００１５】
SALESにおけるデータがTIMES次元に沿ってまばらであると仮定する。TIMES次元に沿ってSALESデータを緻密化する問合せＱ１は、以下のとおりである。
【００１６】
【数２】
2007534035.tif 000004
【００１７】
Ｑ１において、Ｖ２は、（１）実際にSALESテーブルにあるprod_id値と（２）TIMESテーブルにおけるすべてのtime_id値との組合せをすべて含む。特に、「SELECT DISTINCT prod_id FROM SALES」句は、SALESテーブルに見つかるprod_idの一意的な値のすべてを見つける。同様に、「SELECT time_id FROM TIMES」句は、TIMESテーブルにおけるtime_idの値をすべて見つける。「CROSS JOIN」構文は、見つかった一意的なprod_idとすべてのtime_idとの間で外積がとられるようにする。
【００１８】
Ｖ１（SALESテーブル）とＶ２との間のRIGHT OUTER JOIN（右外部結合）演算は、（１）SALESテーブルの行のすべてと、（２）SALESテーブルには見つからない、Ｖ２からのtime_idとprod_idとの組合せに対応する空の行とを含む結果集合を生成する。
【００１９】
図１は、Ｑ１において使用される、緻密化を行なうための方法１００を示すフローチャートである。ステップ１０２で、SALESテーブルにおけるprod_idのすべてのDISTINCT値を得るために、ソートが行なわれる。ステップ１０４で、TIMESテーブルにおけるtime_id値とのすべてのprod_id値のCROSS JOINが行なわれ、それにより、時間次元においては密ではあるがSALESテーブルに見つかるprod_idの値しか含まない、（prod_id，time_id）次元値組合せの集合を得る。ステップ１０６で、ステップ１０４のCROSS JOINの結果とのSALESファクトテーブルのOUTER JOINが行なわれ、それにより、元のSALESテーブルに見つからないCROSS JOINの任意の（prod_id，time_id）次元値組合せについて、空白の行をSALESテーブルに追加する。
【００２０】
同じファクトテーブルおよび次元テーブルを用いた別の例として、ユーザが日毎、製品毎の年度累計（ＹＴＤ）売上の現在値に関心があると仮定する。データがまばらであると仮定すると、ＹＴＤ売上データを生成するＳＱＬで表わされた問合せＱ２は、以下のとおりである。
【００２１】
【数３】
2007534035.tif 000005
【００２２】
Ｑ２において、「FROM SALES…」ステートメントはＱ１と同一であり、演算の同じシーケンスが起こるようにする。「SELECT Ｖ２．prod_id…」ステートメントは、売上値を合計する。この合計はYTD_sales変数で戻される。戻されたデータは、標準SQL PARTITION BY（〜によって区分化する）構文によって、製品および年に従って区分化され、次に、ORDER BY（〜によって順序付ける）構文を用いて、time_idによって順序付けられる。
【００２３】
Ｑ１の例と同様に、年度累計売上を計算することは、SALESテーブルにおけるprod_idのすべてのDISTINCT値を得るためのソートと、（２）TIMESテーブルにおけるtime_id値とのすべてのprod_id値の交差結合と、（３）（２）でのCROSS JOINの結果とのSALESテーブルのOUTER JOINとを必要とする。加えて、この問合せは、（４）ＹＴＤに関連付けられた窓関数を計算するために、列（product_id，year，time_id）に対して（３）のOUTER JOIN結果のソートを行なう。
【００２４】
この発明の発明者らは、ステップ１０２（またはステップ（１））のソートは、最終結果には必要ない余分の計算ではあるが、先行技術では避けることができない、ということを認識していた。加えて、この発明の発明者らは、Ｑ１が直感的に理解できるものではないことを認識していた。特に、より複雑な緻密化問合せでは、緻密化を行なうために使用される一連の演算が直感的に理解できない性質のものであるため、ステートメントを調べることによってユーザの意図を解読することは非常に困難であり得る。このため、問合せ内で緻密化を行なう現在のやり方の構造は複雑であり、理解が難しく、計算が非効率的である。
【００２５】
この発明を、添付図面の図において、限定のためではなく例示のために説明する。図中、同じ参照番号は同じ要素を指す。
【発明を実施するための最良の形態】
【００２６】
発明の詳細な説明
データを緻密化するためのＤＭＬステートメントを提供するための方法および装置を記
載する。以下の記載では、説明のため、多数の特定の詳細がこの発明の完全な理解を提供するために述べられる。しかしながら、この発明がこれらの特定の詳細なしで実践され得ることは明らかである。他の点では、この発明を不必要に不明瞭にしないよう、周知の構造および装置はブロック図の形で示す。
【００２７】
この発明の方法および装置は、各々互いから独立して使用可能な、または他の特徴の任意の組合せとともに使用可能ないくつかの特徴を提供する。データを緻密化するためのＤＭＬステートメントを提供するこの発明の装置および方法の特徴の多くは、上に説明した問題によって動機付けられているが、どの個々の特徴も、上述の問題のどれにも対処していないかもしれず、または、上述の問題のうちの１つにしか対処していないかもしれない。上述の問題の中には、ファクトテーブルに関連するデータを記憶して編成するこの発明の方法のどの特徴によっても十分に対処されないものがあるかもしれない。見出しが提供されているが、或る特定の見出しに関連するもののその見出しを有する項に見つからない情報も、明細書の別の箇所に見つかるかもしれない。
【００２８】
機能的概要
DISTINCT演算、CROSS JOIN演算、およびOUTER JOIN演算の組合せを行なう必要なくデータを緻密化するための手法をここに説明する。たとえば、この発明の一実施例は、DISTINCT演算を行なうことなくデータを緻密化する。特に、データは、データが緻密化されていない次元の別個の値を見つけるためにソート演算を行なうことなく、緻密化される。
【００２９】
この発明の一実施例によれば、データベースサーバによってサポートされるデータベース言語は、ＤＭＬステートメントにおいて使用され得る、少なくとも他の構文と組合せて緻密化演算を引起す構文をサポートするよう拡張される。たとえば、ＤＭＬステートメントについての新しい構文が、別の構文に関連付けられた演算に対して使用されるデータの集合を区分化するために提供され、データを緻密化する。すなわち、一実施例では、OUTER JOINステートメントのシンタックスおよびセマンティクスは、区分化構文を含むよう拡張される。区分化構文を用いたCROSS JOINは、PARTITIONED OUTER JOIN（区分化された外部結合）と呼ばれる。PARTITIONED OUTER JOINは、或る特定された次元に関して区分化されたデータを戻し、各区分は値の別の集合にOUTER JOINされる。
【００３０】
区分が次元値の密な集合にOUTER JOINされる場合、密なテーブルが形成されてもよい。同様に、区分が、元のテーブルにおける次元値の対応する集合よりも次元値のより密な集合である値の集合にOUTER JOINされる場合、結果として生じるテーブルは元の集合より密であってもよい。下に説明する例示的な実施例では、或る次元に関してデータを緻密化するために、データを区分化するための構文が、OUTER JOINに関与するデータに対して演算するために使用される。これらの例では、区分化構文はOUTER JOINの一部として緻密化を行なうが、この明細書は、緻密化が区分化構文またはOUTER JOINを介して行なわれる実施例に限定されていない。窓関数およびスプレッドシート関数の外部でＤＭＬステートメントのデータを区分化するための構文、およびデータの緻密化のための構文は、当該技術分野への独立した寄与である。OUTER JOINステートメントを必ずしも伴わない、データを緻密化するための異なる構文が使用されてもよい。
【００３１】
緻密化されつつあるデータの元の集合はテーブルであってもよく、それはターゲットテーブルと呼ばれてもよい。ターゲットテーブルは、ファクトテーブルまたは任意の他のタイプのテーブルであってもよい。たとえば、ターゲットテーブルは、データベース式によって形成される仮想テーブルであってもよい。
【００３２】
PARTITIONED_TABLE参照
データベースサーバは、それらがサポートするデータベース言語に準拠するデータベー
スステートメントを実行するよう設計されている。ＳＱＬは、多くのデータベースサーバによってサポートされているデータベース言語である。データベース言語は通常、（１）演算を識別するための構文と、（２）演算を行なう対象となっているデータを識別するための構文とを含む。多くのデータベース演算はテーブルに対して行なわれるよう設計されているため、データベースステートメントは通常、演算を行なう対象となっているテーブルを特定するテーブル識別子を含む。データベース言語のシンタックスを記述する際、そのようなテーブル識別子はラベルtable_referenceによって表わされる。
【００３３】
図２Ａは、区分化されたテーブル２２０のシンタックスのブロック図である。区分化されたテーブル２１０はテーブル参照２２１とコンマ２２４とexpr２１０とを含み、それらは以下の説明で言及される。
【００３４】
一実施例によれば、データベースサーバの問合せ実行エンジンは、言語が以前にtable_referenceのみをサポートしていた１つ以上のコンテキストにpartitioned_table参照（区分テーブル２２０）を有するデータベースステートメントをサポートするよう拡張されている。一実施例によれば、partitioned_table参照のメタシンタックスは図２Ａに例示されており、バッカス−ナウア記法（ＢＮＦ）で以下のように定義される。
【００３５】
【数４】
2007534035.tif 000006
【００３６】
図２Ａを参照すると、区分テーブル２２０のシンタックスにおいて、テーブル参照２２１はキーワード「PARTITION BY」の左に配置されている。テーブル参照２２１は任意のテーブルであってもよい。同様に、キーワード「PARTITION BY」の右にはexpr２２２があり、それは、列への参照、または、列に対して評価を行なう式、たとえばCol１＋Col２（Col１およびCol２は列への参照である）への参照であってもよい。キーワード「PARTITION BY」に続き、expr２２２は１つあってもよく、または、expr２２２などの式は任意の数あってもよく、各式は、コンマ２２４などのコンマによって隣接する式から分離される。たとえば、販売の地域（regn_id）、販売の時間（time_id）、販売された製品を供給する倉庫（warehouse_id）、および販売された製品を配送する会社（deliv_id）に対応する次元を有するSALESテーブルについて、おそらく、warehouse_idとdeliv_idとの積は全製品を一意的に識別するために使用可能であり、データベースは或る製品を識別するためにprod_id＝warehouse_id＊deliv_idを使用する。区分化されたテーブル２２０は、SALES PARTITION BY（warehouse_id＊deliv_id，time_id）であってもよい。区分テーブル２２０などのpartitioned_table参照は、以前にテーブル参照を必要としたさまざまなコンテキストにおいて使用されてもよい。一実施例では、PARTITIONED OUTER JOINのシンタックスは、標準OUTER JOINのシンタックスと同様であるが、標準OUTER JOINにおいてtable_referenceが要請される場合はいつでも、PARTITIONED OUTER JOINがpartitioned_tableかtable_referenceかを受入れる点が異なっている。
【００３７】
「PARTITION BY」句
図２Ａに示すように、partitioned_table参照は、table_referenceとPARTITION BY句とを含む。PARTITION BY句の前にあるtable_referenceによって特定されるテーブルをここに、PARTITION BY句の「ターゲットテーブル」と呼ぶこととする。ターゲットテーブルは、ファクトテーブルであっても、または任意の他のタイプのテーブルであってもよい。PARTITION BY句における式および列はそれぞれ、区分化式および区分化列と呼ばれる。
【００３８】
PARTITION BY句を含むステートメントの実行中、データベースサーバは、テーブル参照
２２１によって特定されたターゲットテーブルを区分へと分割し、各区分は、expr２２２に起因する列の次元値に対応している。たとえば、ターゲットテーブルがSALESファクトテーブルであり、exprがPRODUCT次元に対応する列である場合、SALESテーブルはprod_idによって区分化される。Ｐ１、Ｐ２およびＰ３という３つのprod_idがある場合、区分化された製品テーブルの第１の区分は、prod_idＰ１を有する行であり、第２の区分は、prod_idＰ２を有する行であり、第３の区分は、prod_idＰ３を有する行である。同様に、コンマ２２４を用いると、各prod_id値についてＲ１およびＲ２という２つの地域ＩＤ（regn_id）を有する地域次元がある場合、区分化テーブル句「SALES PARTITION BY｛prod_id，regn_id｝」は、テーブルを６つの区分に区分化する。第１の区分は製品ＩＤ  Ｐ１と地域ＩＤ  Ｒ１とを有し、第２の区分は製品ＩＤ  Ｐ１と地域ＩＤ  Ｒ２とを有し、第３の区分は製品ＩＤ  Ｐ２と地域ＩＤ  Ｒ１とを有し、第４の区分は製品ＩＤ  Ｐ２と地域ＩＤ  Ｒ２とを有し、第５の区分は製品ＩＤ  Ｐ３と地域ＩＤ  Ｒ１とを有し、第６の区分は製品ＩＤ  Ｐ３と地域ＩＤ  Ｒ２とを有する。
【００３９】
このため、上述の実施例での区分の階層構造は、リストされた第１の区分化インデックスがターゲットテーブルを主要区分へと分割し、次の区分化インデックスが各主要区分をより小さい区分へと分割するようになっている。しかしながら、他の実施例では、任意の他の区分化階層構造が使用されてもよい。たとえば、主要区分を作るために、リストされた最後の区分化次元が使用されてもよく、主要区分をより小さな区分へと分割するために、リストされた次の区分化次元が使用されてもよい。この実施例では、区分化テーブル句「SALES PARTITION BY｛prod_id，regn_id｝」は、製品ＩＤ  Ｐ１と地域ＩＤ  Ｒ１とを有する第１の区分、製品ＩＤ  Ｐ２と地域ＩＤ  Ｒ１とを有する第２の区分、製品ＩＤ  Ｐ３と地域ＩＤ  Ｒ１とを有する第３の区分、製品ＩＤ  Ｐ１と地域ＩＤ  Ｒ２とを有する第４の区分、製品ＩＤ  Ｐ２と地域ＩＤ  Ｒ２とを有する第５の区分、および、製品ＩＤ  Ｐ３と地域ＩＤ  Ｒ２とを有する第６の区分をもたらす。
【００４０】
外部結合タイプ
図２Ｂは、図２Ｃの外部結合タイプ２３０のシンタックスのブロック図である。外部結合タイプ２３０はオプション２４２を含む。
【００４１】
一実施例では、OUTER JOINのシンタックスは、区分化されたテーブルまたはテーブル参照のいずれかがOUTER JOINのどちらか一方の側で起こるようにする。したがって、図２Ｂのオプション２４２によって示すように、外部結合タイプは、結果として生じるテーブルが、OUTER JOIN句のキーワード「OUTER JOIN」の両側に特定された双方のテーブル、左側に特定されたテーブル、または右側に特定されたテーブルからの行をすべて含むかどうかに依存して、FULL OUTER JOIN（完全外部結合）、LEFT OUTER JOIN（左外部結合）、またはRIGHT OUTER JOINであってもよい。
【００４２】
すなわち、LEFT OUTER JOINでは、キーワード「OUTER JOIN」の左にあるテーブルの行すべてが、結果として生じるテーブルに含まれ、ターゲットテーブルはキーワード「OUTER JOIN」の右に現われる。区分化されたテーブルが右に現われる場合、各区分は、キーワード「OUTER JOIN」の左にあるtable_referenceまたはpartitioned_tableが、キーワード「OUTER JOIN」の右にあるターゲットpartitioned_tableを緻密化するために使用されるよう、左にあるtable_referenceまたはpartitioned_tableに別個にOUTER JOINされる。同様に、RIGHT OUTER JOINでは、キーワード「OUTER JOIN」の右にあるテーブルの行すべてが、結果として生じるテーブルに含まれ、ターゲットテーブルはキーワード「OUTER JOIN」の左に現われる。partitioned_tableが左に現われる場合、各区分は、「OUTER JOIN」の右にあるtable_referenceまたはpartitioned_tableが、キーワード「OUTER JOIN」の左にあるターゲット区分化テーブルを緻密化するために使用されるよう、キーワード「OUTER JOIN」の右にあるtable_referenceまたはpartitioned_tableに別々にOUTER JOINされる
。FULL OUTER JOINでは、結果として生じるテーブルは、キーワード「OUTER JOIN」の右に現われるテーブル、左に現われるテーブル、および双方のテーブルからのすべての行を含む。どちらか一方の側にpartitioned_tableが現われる場合、各区分は、キーワード「OUTER JOIN」の他方の側にあるtable_referenceまたはpartitioned_tableに別々にOUTER JOINされる。
【００４３】
たとえば、（Ｐ１，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ５，−）および（Ｐ１０，−）についての行を有するテーブルＡと、Ｓ１、Ｓ２、Ｓ３およびＳ４についての行を有するテーブルＢという２つのテーブルを考慮し、列A.s_idおよびB.p_idにOUTER JOIN結果を投影する条件A.s_id＝B.p_idに従ってこれらのテーブルをOUTER JOINすることを考慮する（ここで、s_idは、値Ｓ１、Ｓ２、Ｓ３およびＳ４を有する次元を指し、p_idは、値Ｐ１、Ｐ３、Ｐ５およびＰ１０を有する次元を指す）。どちらのテーブルも区分化されたテーブルではなく、テーブルＡがキーワード「OUTER JOIN」の左にあり、テーブルＢがキーワード「OUTER JOIN」の右にある場合、LEFT OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ５，−）および（Ｐ１０，−）についての行を有するテーブルである。同様に、RIGHT OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）および（−，Ｓ４）についての行を有するテーブルである。また、FULL OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ５，−）、（Ｐ１０，−）および（−，Ｓ４）についての行を有するテーブルである。テーブルＡがp_idに対して区分化されている場合、LEFT OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ５，−）および（Ｐ１０，−）についての行を有するテーブルである。LEFT OUTER JOINの結果は、テーブルＡが区分化されなかった場合と同じである。テーブルＢは区分化されなかったため、テーブルＢの緻密化は起こらない。RIGHT OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ１，Ｓ２）、（Ｐ１，Ｓ３）、（Ｐ１，Ｓ４）、（Ｐ３，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ３，Ｓ４）、（Ｐ５，Ｓ１）、（Ｐ５，Ｓ２）、（Ｐ５，Ｓ３）、（Ｐ５，Ｓ４）、（Ｐ１０，Ｓ１）、（Ｐ１０，Ｓ２）、（Ｐ１０，Ｓ３）および（Ｐ１０，Ｓ４）についての行を有するテーブルである。RIGHT OUTER JOINでは、区分Ｐ１、Ｐ３、Ｐ５およびＰ１０の各々は、第２の列の値（Ｓ１、Ｓ２、Ｓ３およびＳ４）の各々について１つの行を含むよう緻密化される。FULL OUTER JOINの結果は、（Ｐ１，Ｓ１）、（Ｐ１，Ｓ２）、（Ｐ１，Ｓ３）、（Ｐ１，Ｓ４）、（Ｐ３，Ｓ１）、（Ｐ３，Ｓ２）、（Ｐ３，Ｓ３）、（Ｐ３，Ｓ４）、（Ｐ５，Ｓ１）、（Ｐ５，Ｓ２）、（Ｐ５，Ｓ３）、（Ｐ５，Ｓ４）、（Ｐ５，−）、（Ｐ１０，Ｓ１）、（Ｐ１０，Ｓ２）、（Ｐ１０，Ｓ３）、（Ｐ１０，Ｓ４）および（Ｐ１０，−）についての行を有するテーブルである。RIGHT OUTER JOINに含まれる行に加え、FULL OUTER JOINの結果は、RIGHT OUTER JOINには含まれていない行（Ｐ５，−）および（Ｐ１０，−）を含んでいる。テーブルＡの第２の列の次元を緻密化して、同じ次元を含む列の各値をテーブルＢに含めるようにすることに加え、行（Ｐ５，−）および（Ｐ１０，−）が追加される。なぜなら、それらは、LEFT OUTER JOINで行なわれた外積において追加されるためである。
【００４４】
例
上述の事項を明確化するため、まず、正規ANSI準拠JOIN記法の結果記録に配置される列を説明し、次に、PARTITIONED OUTER JOIN記法の結果記録に配置される列を説明する。ANSI準拠記法において、２つのテーブルＴ１（ｃ１，ｃ２，ｃ３）およびＴ２（ｃ１，ｃ４）があると仮定する。ここで、ｃ１、ｃ２、ｃ３およびｃ４は列を表わす。名前を付けられたJOIN（たとえばUSING（使用する）句を有するJOIN、またはnatural（自然）JOIN）を使用する際、結果記録は、（１）結合キーとして使用される列と、（２）JOINオペランドの左からの非結合キーの列と、（３）JOINオペランドの右からの非結合キーの列とから構成される。たとえば、句Ｔ１ RIGHT OUTER JOIN Ｔ２ USING（ｃ１）、または句Ｔ１ NATURAL RIGHT OUTER JOIN Ｔ２の結果は、列（ｃ１，Ｔ１．Ｃ２，Ｔ１．Ｃ３，Ｔ２．ｃ４
）から構成される。列ｃ１はテーブルＴ１およびＴ２の双方に現われるが、列ｃ１は結合キーとして使用されたため、結果には列ｃ１のコピーが１つだけ配置される。
【００４５】
対照的に、結合条件がＯＮ（オン：〜に対して）句を介して特定されるANSI準拠結合については、結果は（１）Ｔ１からの列と、（２）Ｔ２からの列とから構成され、結合キーの列は２回現われ、１回はＴ１からの列により、１回はＴ２からの列により現われる。たとえば、句Ｔ１ RIGHT OUTER JOIN Ｔ２ ＯＮ Ｔ１．ｃ１＝Ｔ２．ｃ１の結果は、行が列（Ｔ１．ｃ１，Ｔ１．ｃ２，Ｔ１．ｃ３，Ｔ２．ｃ１，Ｔ２．ｃ２）を有しているテーブルである。しかしながら、対象の列を投影し出すためにSELECT（選択）句が使用されてもよい。たとえば、テーブルＴ１が以下のようであると仮定する。
【００４６】
【数５】
2007534035.tif 000007
【００４７】
また、テーブルＴ２が以下のようであると仮定する。
【００４８】
【数６】
2007534035.tif 000008
【００４９】
名前を付けられた列結合の一例として、ステートメント
【００５０】
【数７】
2007534035.tif 000009
【００５１】
は以下を戻す。
【００５２】
【数８】
2007534035.tif 000010
【００５３】
上述の結果では、２つのテーブルＴ１およびＴ２からのすべての列が現われているが、列Ｃ１は２つ、列Ｃ２は２つ（各テーブルに１つ）あるものの、列Ｃ１およびＣ４は結合キーであるため、１回しか現われていない。列を投影し出すためにSELECT句を使用する際、ステートメント
【００５４】
【数９】
2007534035.tif 000011
【００５５】
は以下のテーブルをもたらす。
【００５６】
【数１０】
2007534035.tif 000012
【００５７】
選択句は列Ｃ１、Ｔ１．Ｃ３、Ｔ２．Ｃ４のみを特定したため、結果には列Ｃ２が現われていない。
【００５８】
ＯＮ句を使用する一例として、以下のステートメントを考慮されたい。
【００５９】
【数１１】
2007534035.tif 000013
【００６０】
上述のステートメントによって戻される結果は、以下のとおりである。
【００６１】
【数１２】
2007534035.tif 000014
【００６２】
上述のテーブルでは、NATURAL JOINまたはUSING句とは対照的に、列ｃ１は２回現われている。なぜなら、テーブルＴ１からの列ｃ１が現われ、テーブルＴ２からの列ｃ１が現われているためである。
【００６３】
ＯＮ句を有するステートメントにおいてSELECT句を用いて列を投影し出す一例として、以下のステートメントを考慮されたい。
【００６４】
【数１３】
2007534035.tif 000015
【００６５】
上述のステートメントは以下のテーブルをもたらす。
【００６６】
【数１４】
2007534035.tif 000016
【００６７】
ＯＮ句を使用する際、Ｔ１テーブルおよびＴ２テーブルの双方からのＣ１列は通常は戻されるが、選択句がＴ２．Ｃ１、Ｔ１．Ｃ２、Ｔ１．Ｃ３、Ｔ２．Ｃ４を特定しており、列Ｔ１．Ｃ１が特定されていないため、したがってＴ１テーブルからのＣ１列は、結果には現われていない。
【００６８】
PARTITIONED OUTER JOINに戻ると、標準ANSI準拠JOINとは対照的に、名前を付けられた列である区分化外部結合の結果は、（１）もしあれば、左オペランドからの区分化式の結果と、（２）もしあれば、右オペランドからの区分化式の結果と、（３）結合列と、（４）左オペランドからの非区分化列および非結合列と、（５）右オペランドからの非区分化列および非結合列とを含む。たとえば、句Ｔ１ PARTITION BY（Ｃ２）NATURAL RIGHT OUTER JOIN Ｔ２を考慮されたい。上述のステートメントの結果記録は、列（Ｔ１．ｃ２，ｃ１，Ｔ１．ｃ３，Ｔ２．ｃ４）から構成される。
【００６９】
同様に、ＯＮ句を介して特定された結合条件を有する区分化外部結合からの結果は、（１）もしあれば、左オペランドからの区分化式と、（２）もしあれば、右オペランドからの区分化式と、（３）左オペランドからの非区分化列と、（４）右オペランドからの非区分化列とを含む。たとえば、句Ｔ１ PARTITION BY（Ｃ２）RIGHT OUTER JOIN Ｔ２ ＯＮ Ｔ１．Ｃ１＝Ｔ２．Ｃ１を考慮されたい。この句の結果は、列（Ｔ１．ｃ２，Ｔ１．ｃ１，Ｔ１．ｃ３，Ｔ２．ｃ１，Ｔ２．ｃ４）を含む。
【００７０】
SELECT句において対象の列を投影し出す第一の例として、以下のステートメントを考慮されたい。
【００７１】
【数１５】
2007534035.tif 000017
【００７２】
このステートメントの結果は、以下のとおりである。
【００７３】
【数１６】
2007534035.tif 000018
【００７４】
上述の結果では、テーブルＴ１は列Ｃ２によって区分化された。次に、列Ｃ１を結合キーとして用いて、テーブルＴ１の各区分がテーブルＴ２に外部結合された。名前が付けられた結合が使用されたため、結果には結合列Ｃ１は１回しか現われていない。
【００７５】
ここで、以下のステートメントを考慮されたい。
【００７６】
【数１７】
2007534035.tif 000019
【００７７】
結果として生じるテーブルは、以下のとおりである。
【００７８】
【数１８】
2007534035.tif 000020
【００７９】
ＯＮ句において結合条件が特定されているため、上の表には列Ｃ１が２つ現われている。列Ｃ１の一方はテーブルＴ１に由来し、他方はテーブルＣ２に由来する。
【００８０】
対象の列を投影し出すためにSELECT句を用いる一例として、以下のステートメントを考慮されたい。
【００８１】
【数１９】
2007534035.tif 000021
【００８２】
結果として生じるテーブルは、以下のとおりである。
【００８３】
【数２０】
2007534035.tif 000022
【００８４】
テーブルＴ１の列Ｃ１とテーブルＴ２の列Ｃ４とは特定されなかったため、それらは、結果として生じるテーブルには現われていない。
【００８５】
別の例として、テーブルＴ１が以下の２つの行を有すると仮定する。
【００８６】
【数２１】
2007534035.tif 000023
【００８７】
また、テーブルＴ２が以下の３つの行を有すると仮定する。
【００８８】
【数２２】
2007534035.tif 000024
【００８９】
以下のステートメントを考慮されたい。
【００９０】
【数２３】
2007534035.tif 000025
【００９１】
上述のステートメントの結果は、以下のテーブルである。
【００９２】
【数２４】
2007534035.tif 000026
【００９３】
同様に、以下のステートメントを考慮されたい。
【００９４】
【数２５】
2007534035.tif 000027
【００９５】
上述のステートメントは、列Ｔ１．ａ、Ｔ１．ｃおよびＴ２．ｂに投影しており、以下のテーブルをもたらす。
【００９６】
【数２６】
2007534035.tif 000028
【００９７】
区分化外部結合
図２Ｃは、ブランチ２０２および２０４を有する拡張されたJOINシンタックスのブロック図である。ブランチ２０４は、区分化されたテーブル２０６、区分化されたテーブル２
０８、区分化されたテーブル２１０、外部結合タイプ２１２、外部結合タイプ２１４、および条件２１６を含み、それらは以下の説明で言及される。
【００９８】
ブランチ２０２は、INNER JOIN（内部結合）およびCROSS JOINについてシンタックスを与える。ブランチ２０４に関し、BNFフォーマットでのPARTITIONED OUTER JOINの対応するシンタックスは、以下のとおりである。
【００９９】
【数２７】
2007534035.tif 000029
【０１００】
このため、ブランチ２０４において、左から始まって、ユーザはまず、区分化されたテーブル２０６ａかテーブル参照２０６ｂかを特定し、次にユーザはブランチ２０４ｂ上でキーワード「NATURAL」を特定してもよく、または、ユーザはブランチ２０４ａを使用してキーワード「NATURAL」を使用しなくてもよい。次に続くのは、ブランチ２０６ａ上の外部結合タイプ２１２か、ブランチ２０６ｂ上の外部結合タイプ２１４かを特定するキーワードである。外部結合タイプ２３０は、外部結合タイプ２１２および２１４の一実施例である。外部結合タイプ２１２または外部結合タイプ２１４に続くのは、キーワードJOINである。ブランチ２０４ａ上では、区分化されたテーブル２０８ａかテーブル参照２０８ｂかが、キーワードJOINに続く。ブランチ２０４ｂ上では、区分化されたテーブル２１０ａかテーブル参照２１０ｂかが、キーワードJOINに続く。NATURAL OUTER JOINでは何の条件も適用されていないため、ブランチ２０４ｂ上では、OUTER JOIN句は、区分化されたテーブル２１０ａかテーブル参照２１０ｂかで終了する。区分化されたテーブル２０８ａまたはテーブル参照２０８ｂに続くのは、結合条件を特定するためのキーワード「ＯＮ」、または、結合キーを特定するための「USING」のいずれかである。既存のANSI結合演算子と同様に、PARTITIONED OUTER JOINは複雑な結合条件を可能にし、結合条件２１６（すなわち、キーワード「ＯＮ」に続くjoin_cond）は、任意に複雑なブール式であってもよい。join_condまたは結合条件２１６は、区分化されたテーブルの区分化式における任意の列を含む、結合のいずれかの側からのテーブルの列に適用可能である。
【０１０１】
キーワード「USING」に続いて、コンマ２２４によって示すように、結合演算に対して条件を出す式expr２２２が任意の数あってもよい。各expr２２２は、列、または、列に対して評価を行なう式のいずれかである。結合の結果は、OUTER JOINを区分の各々に適用することからの結果のUNION（和集合）である。一実施例では、OUTER JOINが行なわれた後で、区分化式は、対応する区分化されたテーブルを識別する値を呈する。区分化されたテーブル２０６ａの代わりに参照テーブル２０６ｂが使用され、かつ、区分化されたテーブル２０８ａの代わりに参照テーブル２０８ｂが使用されるかまたは区分化されたテーブル２１０ａの代わりに参照テーブル２１０ｂが使用される場合、PARTITIONED OUTER JOINは
標準OUTER JOINへ戻る。
【０１０２】
ブランチ２０４ａを用いた正当なPARTITIONED OUTER JOINのいくつかの例は、以下のとおりである。
【０１０３】
【数２８】
2007534035.tif 000030
【０１０４】
上述の例の各々は、SALESテーブルの同じ緻密化を行なっている。第１の例は右外部結合を用いており、一方、第２の例は左OUTER JOINを使用している。したがって、結果が同じになるように、SALESファクトテーブルおよびTIME次元テーブルの位置は、キーワード「OUTER JOIN」に対して反転されている。第３の例では、結合キーは、等式の形をした等価結合条件を表わすというよりもむしろ、名前によって特定されており、それは最初の２つの例の等価結合条件と同等である。ブランチ２０４ｂを用いたOUTER JOIN式のシンタックスの一例は、以下のとおりである。
【０１０５】
【数２９】
2007534035.tif 000031
【０１０６】
この例では、TIMESテーブルおよびSALESテーブルの共通の列が、結合キーとして使用されている。TIMESテーブルおよびSALESテーブルがたとえばたった１つの共通の列（time_id）しか持たない場合、結果は、上の３つのステートメントにおけるステートメントと同じである。
【０１０７】
緻密化演算における「PARTITION BY」演算子の使用
PARTITIONED OUTER JOINシンタックスを用いると、問合せＱ１は以下のように書換可能である。
【０１０８】
【数３０】
2007534035.tif 000032
【０１０９】
Ｑ１_new問合せは単一のPARTITIONED OUTER JOINだけを必要とし、それにより、緻密化を行なうために以前は必要であった（背景の項における）Ｑ１のコードと比較して、緻密化を行なうために必要なコード化を簡略化する。
【０１１０】
同様に、PARTITIONED OUTER JOINシンタックスを用いると、問合せＱ２は以下のように書換可能である。
【０１１１】
【数３１】
2007534035.tif 000033
【０１１２】
Ｑ２_new問合せは、ＹＴＤ窓関数を計算するために、（１）TIMESとのSALESのPARTITIONED OUTER JOINと、（２）「（１）」におけるPARTITIONED OUTER JOINの結果のソートとを必要とする。
【０１１３】
区分化外部結合を実施する方法
データベースサーバは、区分化外部結合を特定するステートメントを受取ることに応答して、区分化外部結合演算を行なうために１つ以上のルーチンを実行する。区分化外部結合を行なうために、さまざまな手法がデータベースサーバによって使用されてもよい。一実施例によれば、データベースサーバは、複数の手法の各々についてのルーチンを含み、次に、区分化外部結合演算を含む各ステートメントにとってどの手法が最も適切かを選択する。一実施例では、所与の問合せについて選択された方法は、その問合せを行なうためにどの方法がより効率的であるかに依存する。
【０１１４】
この発明は任意の特定の手法に限定されてはいないものの、区分化外部結合を行なうた
めの３つの手法をここで説明する。提示された３つの方法の各々において、一連の「ミニ結合」（すなわち、テーブル全体に対して一度には行なわれない結合）が行なわれる。これら３つの方法の各々は、３つの方法のうちの別のものがより効率的かどうかを判断するために計算コストに関する見積りを行なうことなく、互いに別々に使用されてもよい。また、これに代えて、上述の方法の任意の２つが互いに組合されて使用されてもよく、所与の問合せについてその２つの方法のうちのどちらを使用するかを決めるためにコスト計算が行なわれる。
【０１１５】
入れ子ループ
図３は、入れ子ループ区分化外部結合と呼ばれる方法３００を示すフローチャートである。
【０１１６】
入れ子ループ（たとえばｄｏ（ドゥ）ループ）は、入れ子関係の少なくとも２つのループを含むコードである。たとえば、最も外側のループは値の１つの集合全体にわたって反復し、入れ子ループは、値の第１の集合における各値について、値の第２の集合全体にわたって反復する。緻密化を行なうために、入れ子ループの最も外側のループのうちの１つ以上は、区分化次元に対応していてもよい。最も内側のループの各々は、異なる緻密化次元に対応していてもよい。各ループはインデックスを有する。ループの各反復中、ループインデックスは次の値に設定される。
【０１１７】
区分化次元に対応するループは区分化ループと呼ばれ、対応するループインデックスは区分化インデックスと呼ばれる。緻密化次元に対応するループは緻密化ループと呼ばれ、対応するループインデックスは緻密化インデックスと呼ばれる。或る特定の次元に対応するループのインデックスは、ループの各反復中、その次元からの新しい値を割当てられる。このため、区分化ループのインデックス値は、区分化次元の別個の次元値に対応する。たとえば、テーブルが３つの行を有し、これら３つの行の各々が区分化次元について同じ次元値を有する場合、区分化ループはその特定の次元値について１回だけ実行する。緻密化ループのインデックス値は、緻密化次元の次元値に対応している。このため、緻密化ループの各反復中、ループのインデックス値は一意的な次元値に対応している。ループの各々はその次元値を巡回するため、「ｉｆ」ステートメントは、ループの現在のインデックス値組合せに対応する次元値組合せを有するデータ（たとえばターゲットテーブル）にエントリ（たとえば行）が存在するかどうかをチェックする。エントリが存在する場合、それは出力データの集合に追加される。次元値についてエントリが存在しない場合、インデックス値組合せに対応する次元値組合せを有するヌル値のエントリが作成される。
【０１１８】
たとえば、Ｑ１_new問合せの根底にあるコードについて、以下のアルゴリズムが使用されてもよく、ここでは、PRODUCT次元が区分化次元のために使用され、TIME次元が緻密化次元のために使用される。
【０１１９】
【数３２】
2007534035.tif 000034
【０１２０】
ここで、インデックスＩは、SALESテーブルの製品次元の別個の値を使用し、インデックスＩＩは、TIMESテーブルの時間次元のフルスキャンを行なうか、または、既にセットアップされた時間次元についてのインデックスを使用する。
【０１２１】
入れ子ループ結合は、利用可能なインデックスをそのループインデックスとして使用しており、非等価結合で使用されてもよい。インデックスがループインデックスとしての使用のために存在してはいない場合、入れ子ループ外部結合またはソートマージ外部結合を行なうことができるようになるためにインデックスをセットアップすることが可能である。しかしながら、その場合、インデックスのセットアップに関連するコスト計算により、区分化された入れ子ループは、区分化外部結合を行なう他の方法よりも効率が落ちるかもしれない。
【０１２２】
図３を参照すると、ステップ３０２で、区分化ループのインデックス（インデックスＩ）が最初に、製品次元の第１の別個の値に設定される。ループのその後のサイクルで、インデックスＩは現在の値に設定され、それは製品次元の次の別個の次元値であってもよい。インデックスＩについて区分化次元の値を得る方法を以下に説明する。一実施例では、緻密化次元以外の任意の次元についてインデックスが存在し、そのインデックスが次元の別個の値からなる場合、それはインデックスＩ、つまり区分化インデックスのために使用されてもよい。
【０１２３】
ステップ３０４で、次のループのインデックスであるインデックスＩＩが現在の値に設定され、それは、ファクトテーブルが緻密化されつつあるインデックスの次の別個の次元値であってもよい。任意の数の区分化ループおよび／または緻密化ループがあってもよく、各々は異なる区分化次元および／または緻密化次元にそれぞれ対応している。データを区分化するために使用されるループが、データが十分に密な次元に対応している場合、対応ループは、次元値の各々に対応するインデックス値を有する。
【０１２４】
ステップ３０６で、現在のインデックス値の組合せに対応する次元値組合せを有する行があるかどうかについて、判断が（たとえば「ｉｆ」ステートメントを介して）下される。また、これに代えて、非等価結合について、現在の行の次元組合せとインデックス値組合せとが結合条件（たとえば条件２１６（図２Ｃ）またはjoin_cond）を満たすかどうかについて、判断が下される。そのような行がない場合（結合条件が満たされていない場合
）、方法３００はステップ３０８へ進み、そこで、その測度についてヌル値を有する行が作成される。ステップ３０８の後で、方法３００はステップ３１０へ進む。ステップ３０６の説明に戻ると、行が存在する場合、方法３００は（ステップ３０８を行なわずに）ステップ３１０へ進む。ステップ３１０で、ステップ３０６で見つかった行、またはステップ３０８で作成された行が、提示される最終結果（または出力テーブル）に追加される。ステップ３１２で、インデックスＩＩを有するループについてのインデックス値が他にあるかどうかが判断される。インデックスＩＩ値が他にある場合、方法３００はステップ３０４へ戻り、インデックスＩＩを有するループの別の実行を開始する。インデックスＩＩ値が他にない場合、方法３００はステップ３１４へ進み、インデックスＩ値が他にあるかどうかをチェックする。インデックスＩ値が他にある場合、方法３００はステップ３０２へ進み、インデックスＩを有するループの別の実行を開始する。インデックスＩ値が他にない場合、方法３００は終了する。ステップ３１０とステップ３１２との間の点線によって示すように、ステップ３１２および３１４に類似するステップが任意の数あってもよく、各ステップは異なるループに対応しており、各ループは異なる緻密化次元または区分化次元に対応している。
【０１２５】
このように、方法３００の演算を要約すると、区分化インデックス、つまりインデックスＩは、別個の次元値Ｉを巡回する。加えて、インデックスＩの或る特定の値について、ループが、緻密化次元の各値ＩＩについて「ｉｆ」ステートメントを適用しながら、値ＩＩのすべてについて実行され、それにより、区分化次元値Ｉを有するファクトテーブルの区分を緻密化する。
【０１２６】
方法３００についてのアルゴリズムのためのコードでは、「ｉｆ」ステートメントは、現在のインデックス値組合せに対応する行が存在するかどうかの判断を下す任意のステートメントまたは任意の群のステートメントと置き換えられてもよい。上述の例では、外部インデックスはPRODUCTS次元に基づいていてもよい。上述の例では、内部ループのインデックスはtime_idの全集合である。
【０１２７】
値を得るためのスキップスキャンの使用
方法３００のステップ３０２へ戻ると、一実施例では、存在する唯一のインデックスが区分化次元を複合インデックスの一部として使用し、複合インデックスが、複合インデックスの他の部分について他の次元を有する場合、区分化次元が複合インデックスの先頭列でなくても、区分化インデックス（たとえばインデックスＩ）のためにスキップスキャンが使用される。スキップスキャンの最中、複合インデックスの区分化次元は、１つ以上の先頭列の各値についてアクセスされる。一実施例では、区分化インデックスの第１の値を見つけた後で、その値を有するインデックスにおける他のエントリは、次に高い値が見つかるまでスキップされる。インデックスの次の値を見つけた後で、既に見つかったインデックス値すべてがスキップされる。区分化インデックスの各別個の値について、このプロセスを繰返すことが見つけられてもよい。区分化インデックスの新しい別個の値を見つけた後で、区分化ループが実行される。データ用の集合によってはフルテーブルスキャンよりもスキップスキャンの方が迅速であり得る１つの理由は、インデックスが次元値のシーケンスを追跡するように編成されているためである。インデックス値の編成は、スキップ可能なインデックス組合せを判断するために利用されてもよい。加えて、インデックスを記憶するディスク空間のサイズは、フルテーブルを記憶するディスク空間のサイズよりも小さく、より小さいディスク空間はより速いアクセス時間を有する。
【０１２８】
スキップスキャンを使用することにより、ファクトテーブルを区分化するために使用される必要があるのは、複合インデックスの１つの次元のみである。また、スキップスキャンを使用することにより、次元は、さもなければその次元の任意の所与の別個の値に対応する行をすべて見つけるためにテーブルスキャン（たとえばDISTINCT構文）を必要とする
であろうインデックスとして使用されてもよい。こうして、スキップスキャンを使用することにより、外部ループの新しい各値Ｉで、（区分化次元が次元値Ｉを有する）ファクトテーブルの対応する区分が見つけられる。スキップスキャンでは、ループは、ループが以前に実行されていない新しいprod_idに遭遇するたびに、繰返される。
【０１２９】
すなわち、PARTITIONED OUTER JOINは、インデックスを使用する別個のprod_id値すべてを、スキップスキャンを介して得ることによって、計算可能である。次に、各prod_id値およびtime_idからなり、time_id値はインデックスＩＩとしてのTIMESテーブルからの値であるタプルが、SALESテーブルをスキャンするために使用される。インデックス値ＩおよびＩＩの各組合せについて、２つの入れ子ループ内のステートメントは、対応するprod_id値およびtime_id値と整合する行があるかどうかを判断し、整合する行が見つかった場合、それは戻される。その他の場合、つまり整合が戻されない場合、ダミー行が生成される。
【０１３０】
ファクトテーブルの区分への分割
図４は、PARTITIONED OUTER JOINを行なう第２の方法である方法４００のためのフローチャートを示しており、以下の説明されるように、ターゲットテーブルは区分へと分割され、次に各区分はOUTER JOINされる。ファクトテーブルの区分への分割は、等価結合またはインデックスに頼ってはおらず、したがって、他の２つの方法よりも柔軟性があるかもしれないが、場合によっては効率が落ちるかもしれない。
【０１３１】
ステップ４０２で、ターゲットテーブルは、データが緻密化されつつある次元以外の次元に対してソートされる。ターゲットテーブルは、ファクトテーブルであっても任意の他のテーブルであってもよい。たとえば、ターゲットテーブルは、データベースステートメントの式によって行が生成される仮想テーブルであってもよい。ターゲットテーブル（たとえばSALESテーブル）のソーティングは、ターゲットテーブルを区分へと分割する効果を有し、各区分は、ターゲットテーブルがそれについてソートされる異なる次元値（たとえばprod_id）に対応している。方法４００は、区分の端を検出し、取扱うためのサポートを必要としている。したがって、区分境界を通過したかどうかを判断するために、行の区分化次元の次元値を、現在の区分値と比較してもよい。
【０１３２】
次に、ステップ４０４で、各区分は、密な次元テーブル（たとえばTIMESテーブル）とOUTER JOINされる。区分を密な次元と外部結合することは、密な次元テーブルの行（たとえばTIMES行）を取り、次にそれを各区分の行と整合させることを伴う。整合がない場合、所与の次元値組合せ（たとえば、prod_id，time_id）に対応するダミー行が作成される。方法４００のターゲットテーブルの分割による緻密化は柔軟性があり、ＯＮ句に非等価条件（すなわち、同等ではない条件）がある場合に使用されてもよい。非等価結合について使用可能であることに加え、方法４００はインデックスの使用を必要としない。一実施例では、方法４００は、多数の次元に関して緻密化するために使用されてもよい。ステップ４０４の出力も区分化される。したがって、ステップ４０４の最後のアプリケーションの出力を使用し、第２の次元に関してステップ４０４を繰返すことは、第２の次元に関してデータを緻密化する。こうして、ステップ４０４は、多数の次元に関して緻密化するために任意の回数繰返されてもよい。
【０１３３】
ソートマージ区分化外部結合
図５は、ソートマージ区分化外部結合と呼ばれ得るPARTITIONED OUTER JOINを行なう第３の方法である方法５００のフローチャートである。各区分内のソートマージ結合は、以下に説明されるように行なわれる。ソートマージ結合はインデックスを必要とせず、また、等価結合を使用する。
【０１３４】
ソートマージ区分化外部結合のステップ５０２で、ターゲットテーブル（たとえばSALESテーブル）が、その次元（たとえばprod_id、time_id）のすべてに関してソートされる。データが区分へと分割され、その各区分に、緻密化次元の次元値の各々についてその１つの次元値がもはや存在しないように、緻密化次元は最後にソートされる。他の次元はすべて、区分化次元になる。区分化次元のすべてのソーティングは、ターゲットテーブルを区分化する効果を有する。その場合、ターゲットテーブル（たとえばSALESテーブル）の各区分は、次元値の異なる組合せに対応している。言い換えれば、区分化次元値の一意的な各組合せについて、１つの区分が存在する。加えて、各区分は、区分化次元値の組合せを１つだけ有する。たとえば、SALESテーブルがtime_idの値を有する次元TIMESを有し、PRODUCTSが値prod_idを有し、REGIONが値regn_idを有すると仮定する。また、２つのprod_id値「１」および「２」、２つのregn_id値「１」および「２」、３つのtime_id値「８」、「９」、「１０」のみが存在すると仮定する。その場合、三次元すべてにおいてソートした後では、４つの区分がある。タプル（prod_id，regn_id，time_id）を使用すると、１つの区分はタプル（１，１，８）、（１，１，９）および（１，１，１０）を含む。第２の区分はタプル（１，２，８）、（１，２，９）および（１，２，１０）を含む。第３の区分はタプル（２，１，８）、（２，１，９）および（２，１，１０）を含む。最後に、第４の区分はタプル（２，２，８）、（２，２，９）および（２，２，１０）を含む。
【０１３５】
次にステップ５０４で、緻密化次元についての緻密化次元テーブル（たとえばTIMESテーブル）が、その次元値（たとえばtime_id）についてソートされる。ステップ５０６で、ターゲットテーブルの（たとえばSALESテーブルの）各区分内の各行が、ソートされた緻密化次元テーブル（たとえばTIMESテーブル）と個々に結合される。緻密化次元（たとえばTIMES）を含むソートされたターゲットテーブルの列は、ターゲットテーブルの行を次元テーブルに結合する際にキーとして使用されてもよく、それは結合キーと呼ばれてもよい。整合が見つからない場合、ダミー行が戻される。すべての次元がソートされたため、すべての次元値が順序付けられる。こうして、結合キーの連続する値を比較することにより、区分の端に到達したかどうかについて判断が下され得る。また、これに代えて、区分の端は、区分化次元の各々について１つの次元値を有する次元値組合せにおける変更を検出することによって検出されてもよい。一旦、区分の端に到達し、緻密化次元に対応するインデックスの端に到達すると、緻密化次元値についてのループは、次の区分について繰返される。ターゲットテーブルの個々の行を、緻密化されつつある次元へ結合することは、緻密化次元に対応するインデックスを有するループに「ｉｆステートメント」か「ｉｆブロック」を配置することによって行なわれてもよい。また、これに代えて、緻密化次元テーブル（たとえばTIMES次元テーブル）がソートされたため、ターゲットテーブル（たとえばSALESテーブル）の行に対する結合条件の各チェックの後で、カーソルが緻密化次元テーブルを介して緻密化次元テーブルの次の行へ進められてもよい。
【０１３６】
ソートマージ区分化外部結合の一実施例では、結合キーインデックスについてのカーソルは、等価結合の同等性条件が満たされるたびに、すなわち、緻密化次元テーブルの次元キーが、ソートされたターゲットテーブルの結合キーと等しくなるたびに、次の行へ動かされる。インデックスを使用する一実施例では、結合キーについてのカーソルは、インデックスが結合キーと等しくなるたびに、次の行へ進められる。したがって、この実施例では、カーソルを、それが既に越えて通ってきた位置へと後退させる必要性がなくてもよい。しかしながら、代替的な実施例では、非等価結合が使用されてもよいが、カーソルを位置付けるためにアルゴリズムが含まれ、カーソルが、緻密化次元の２つの異なる値について同じ結合キー上に配置されるか、または後退されるようにする。
【０１３７】
オプティマイザ
図６は、PARTITIONED OUTER JOINを実行可能なリレーショナルデータベース管理システムに含まれ得るオプティマイザの演算の方法６００のフローチャートである。一実施例で
は、オプティマイザは、PARTITIONED OUTER JOINを実行するリレーショナルデータベース管理システムに含まれている。オプティマイザは、さまざまな異なる演算を行なうさまざまな方法の中から、テーブルの集合、および演算が行なわれつつあるステートメントについての各方法の計算コストに基づいて、決める。一実施例では、オプティマイザは、どの方法が最も効率的かに基づいて、PARTITIONED OUTER JOINを行なうための方法を決める。
【０１３８】
たとえば、ステップ６０２で、オプティマイザはまず、ターゲットテーブルの次元にとって利用可能なインデックスがあるかどうかをチェックしてもよく、利用可能なインデックスを区分化次元または緻密化次元が持っていない場合、方法３００は使用できず、方法６００はステップ６０４へ進む。ステップ６０４で、非等価結合が存在するかどうか、判断が下される。非等価結合が存在する場合、方法５００は使用できず、そのため方法６００はステップ６０６へ進み、そこで、方法４００は図４のテーブル分割方法を実施する。
【０１３９】
ステップ６０４の説明に戻ると、非等価結合がない場合、方法６００はステップ６０８へ進み、そこで、方法４００と方法５００のどちらがより効率的であると予想されるか、決定が下される。方法４００がより効率的であると予想される場合、方法６００はステップ６０６へ進む。方法５００がより効率的であると予想される場合、方法はステップ６１０へ進み、そこで、方法５００のソートマージ外部結合が実施される。
【０１４０】
ステップ６０２の説明に戻ると、インデックスが存在する場合、３つの方法はすべて、依然として使用可能であり、方法はステップ６１２へ進む。ステップ６１２で（ステップ６０４と同様に）、非等価結合が存在するかどうか、判断が下される。非等価結合が存在する場合、方法５００は使用できず、そのため方法６００はステップ６１４へ進み、そこで、方法３００、４００、５００のうちのどれがより効率的であると予想されるか、判断が下される。方法５００がより効率的であると予想される場合、方法６００はステップ６１０へ進む。方法４００がより効率的であると予想される場合、方法６００はステップ６０６へ進む。方法３００がより効率的であると予想される場合、方法６００はステップ６１６へ進み、そこで、方法３００の入れ子ループ外部結合が実施される。
【０１４１】
ステップ６１２の説明に戻ると、非等価結合が存在する場合、ソートマージ外部結合は使用できず、方法６００はステップ６１８へ進む。ステップ６１８で、方法３００と４００のどちらがより効率的であると予想されるか、判断が下される。方法３００がより効率的であると予想される場合、方法６００はステップ６１６へ進み、そこで方法３００が実施される。方法４００がより効率的であると判断される場合、方法６００はステップ６２０へ進み、そこで方法４００が実施される。
【０１４２】
一実施例では、オプティマイザは、方法３００、４００、および５００のうちのいずれか１つ、または任意の組合せに加え、もしくはその代わりに、PARTITIONED OUTER JOINを行なう他の方法の中から選んでもよい。代替的な一実施例では、PARTITIONED OUTER JOINを行なう方法３００、４００または５００のうちのいずれか１つ、もしくは、方法３００、４００または５００のうちの２つだけがリレーショナルデータベースに含まれ、含まれたこの１つまたは２つの方法が適用できない場合には、PARTITIONED OUTER JOINは行なわれない。
【０１４３】
区分化外部結合のための最適化および強化
JOINおよびOUTER JOINで通常使用される最適化は、PARTITIONED OUTER JOINででも使用可能である。たとえば、述語押込みおよび区分刈込みも、PARTITIONED OUTER JOINで使用されてもよい。述語押込みに関しては、区分化式全体にわたって定義された述語のみが、ビューのために押下げられるかまたは押上げられるべきである。言い換えれば、次元値の或る集合への出力を制限する条件を或る述語が課する場合、プログラムは、対象ではない
次元値に関する不必要な計算が行なわれないよう、初期計算を行ないながらその述語を適用する。特定されたポイントで述語を適用する代わりに、述語は、同じ結果を得るために行なわれる必要がある計算の量を最小限に抑えるかまたは少なくとも減少させる、プログラムの１つ以上のポイントで適用される。
【０１４４】
たとえば、以下の問合せを仮定する。
【０１４５】
【数３３】
2007534035.tif 000035
【０１４６】
述語であるprod_id in （１，２，３）は、SALESテーブルの製品１、２、および３のみがTIMESテーブルと結合されるよう、SALESテーブルのテーブルスキャンにフィルタとして押込み可能である。したがって、SALESテーブルの他の製品に対しては、計算は行なわれない。
【０１４７】
同様に、PARTITION刈込みについては、PARTITIONED OUTER JOINの区分化されたオペランドである内部問合せブロックを刈込むために、外部問合せブロックの述語が使用されてもよい。テーブルの一部または区分が計算の一部を行なうことに関連していない場合、計算はその区分については行なわれない。述語押込みの例は、刈込みの一例でもある。なぜなら、ターゲットテーブルのデータに対して何らかの操作を行なう前に、製品１、２、または３に関連していないテーブルの部分はすべて、検討中のデータから除去されたためである。
【０１４８】
オプティマイザはまた、PARTITIONED OUTER JOINを用いてコストおよび基数を推定するために強化される。一実施例では、コストベースの最適化が、PARTITIONED OUTER JOINについてサポートされている。
【０１４９】
区分化外部結合の並行評価
上述の区分化外部結合実行手法は、各PARTITIONED OUTER JOIN計算が１組のスレーブに任され、それらが各々、他のスレーブから独立して結合演算を行なうことができるようになっているという点で、スケーラブルである。この文脈では、スレーブとは、任意のエンティティであって、他のそのようなエンティティと並行して命令を処理できるものである。たとえば、スレーブは、別のプロセッサ、プロセスまたはスレッドであってもよい。異なるスレーブが独立して区分を処理することを容易にするために、JOINの緻密化次元テーブルはスレーブのすべてにブロードキャストされる。JOIN演算の区分化されたターゲットテーブルは、プロセッサおよび／またはスレーブ全体にわたって、ハッシュ区分化または範囲区分化されてもよい。
【０１５０】
たとえば、コンピュータ装置が４つのプロセッサを有し、SALESテーブルが製品ＩＤ１〜６を有する６つの製品を有する場合、第１のプロセッサは、製品ＩＤ１および２に対応するSALESテーブルの区分を受取ってもよく、第２のプロセッサは、製品ＩＤ３および４に対応する区分のコピーを受取ってもよく、第３のプロセッサは、製品ＩＤ５に対応する製品テーブルの部分を受取ってもよく、第４のプロセッサは、製品ＩＤ６に対応するSALE
Sテーブルの部分を受取ってもよい。しかしながら、プロセッサ１〜６の各々は、TIMESテーブル全体を受取る。したがって、各スレーブおよび／またはプロセスは、区分化されたテーブルのその切片についてPARTITIONED OUTER JOIN演算を行なうために、それが必要とするターゲットテーブルの区分および次元テーブル全体へのアクセスを有する。第１のプロセッサはまず製品ＩＤ♯１の区分にOUTER JOINしてもよく、次に製品ＩＤ♯２の区分にOUTER JOINしてもよい。第１のプロセスの演算と並行して、第２のプロセッサはまず製品ＩＤ♯３の区分にOUTER JOINしてもよく、次にＩＤ♯４の区分にOUTER JOINしてもよい。同時に、第３のプロセッサは製品ＩＤ♯５区分にOUTER JOINしてもよい。また、並行して、第４のプロセッサは製品ＩＤ♯６区分にOUTER JOINしてもよい。
【０１５１】
たとえば、以下のステートメントを考慮されたい。
【０１５２】
【数３４】
2007534035.tif 000036
【０１５３】
この場合、区分化されていない次元テーブル「TIMES」は、スレーブのすべてにブロードキャストされてもよく、区分化されたターゲットテーブル「SALES」は、区分化列（たとえばprod_id）に基づいてハッシュ区分化または範囲区分化されてもよい。言い換えれば、この例では、テーブルが区分化される各prod_idに対して、異なるスレーブが作用してもよい。各スレーブは、prod_idによって識別されるSALESテーブルのいくつかの区分およびTIMESテーブル全体へのアクセスを有する。各スレーブはしたがって、他のスレーブから独立して、PARTITIONED OUTER JOINのその部分を行なうことができる。区分化列上の区分化されたテーブルを区分化するために使用される区分化手法は、ハッシュ区分化または範囲区分化されてもよい。
【０１５４】
代替的な実施例
PARTITIONED OUTER JOINの代わりに、緻密化のために適合された構文が使用されてもよい。たとえば、緻密化するための或る構文は、以下のシンタックスを有していてもよい。
【０１５５】
【数３５】
2007534035.tif 000037
【０１５６】
代替的な一実施例では、緻密化構文は以下のシンタックスを有していてもよい。
【０１５７】
【数３６】
2007534035.tif 000038
【０１５８】
上述のステートメントでは、table_referenceは、ターゲットテーブルへの参照であり、dimension_exprは、列、または、次元として使用される仮想列に対して評価を行なう式であり、仮想列は、テーブルの各行について１つの数を有する数の集合である。同様に、densifying_exprは、データが緻密化される次元または仮想次元である。一実施例では、dimension_exprは実際には、データを区分化するために使用される必要はないが、緻密化する際には非緻密化次元として使用される。言い換えれば、緻密化構文によって生成されたテーブルは、緻密化次元の各値と区分化次元の各別個の値との外積について１つの行を有する。大括弧および括弧によって示すように、同じ次元を有する任意の数のテーブルは、同じステートメントによって緻密化されてもよく、テーブルは、緻密化次元に加えて少なくとも１つの他の次元がある限り、任意の数の緻密化次元および任意の数の他の次元を有していてもよい。
【０１５９】
一例として、SALESテーブルが次元値組合せ（１，１，１）および（１，２，１）についてタプル（regn_id, prod_id, time_id）のみを有し、TIMEテーブルがtime_id１およびtime_id２を含む場合を仮定する。この場合、DENSIFY (SALES) BY (time_id) USING (prod_id）は、次元値組合せ（１，１，１）、（１，２，１）、（１，１，２）および（１，２，２）についての行を有するSALESテーブルをもたらす。対照的に、DENSIFY (SALES, regn_id) BY (time_id）は、次元値組合せ（１，１，１）、（１，２，１）および（１，１，２）についての行を有するSALESテーブルをもたらす。
【０１６０】
ハードウェア概要
図７は、この発明の一実施例が実施され得るコンピュータシステム７００を示すブロック図である。この発明は、多くの異なるタイプのマシンで実施されてもよい。コンピュータシステム７００はそのようなマシンのほんの一例である。コンピュータシステム７００は、情報を通信するためのバス７０２または他の通信機構と、情報を処理するためにバス７０２と結合されたプロセッサ７０４とを含む。コンピュータシステム７００はまた、プロセッサ７０４により実行されるべき命令および情報を記憶するためにバス７０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他のダイナミック記憶装置といったメインメモリ７０６も含む。メインメモリ７０６は、プロセッサ７０４により実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム７００はさらに、プロセッサ７０４用の命令およびスタティック情報を記憶するためにバス７０２に結合された読出専用メモリ（ＲＯＭ）７０８または他のスタティック記憶装置を含む。磁気ディスクまたは光ディスクといった記憶装置７１０が、情報および命令を記憶するために提供され、バス７０２に結合されている。
【０１６１】
コンピュータシステム７００は、情報をコンピュータユーザに表示するためのブラウン管（ＣＲＴ）などのディスプレイ７１２に、バス７０２を介して結合されていてもよい。英数字キーおよび他のキーを含む入力装置７１４が、情報およびコマンド選択をプロセッサ７０４に通信するためにバス７０２に結合されている。ユーザ入力装置の別の種類は、方向情報およびコマンド選択をプロセッサ７０４に通信するための、および、ディスプレイ７１２上のカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キーといったカーソル制御７１６である。この入力装置は通常、２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において２つの自由度を有しており、それによりこの装置は平面における場所を特定することができる。
【０１６２】
この発明は、ここに説明された手法を実施するためのコンピュータシステム７００の使用に関する。この発明の一実施例によれば、それらの手法は、プロセッサ７０４がメインメモリ７０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するのに応じて、コンピュータシステム７００によって実行される。そのような命令は、記憶装置７１０な
どの別のコンピュータ読み取り可能な媒体からメインメモリ７０６に読込まれてもよい。メインメモリ７０６に含まれる命令のシーケンスの実行により、プロセッサ７０４は、ここに説明された処理ステップを行なうようになる。代替的な実施例では、この発明を実施するために、ソフトウェア命令の代わりに、またはソフトウェア命令と組合わせて、配線接続回路が使用されてもよい。このため、この発明の実施例は、ハードウェア回路とソフトウェアとのどの特定の組合せにも限定されない。
【０１６３】
ここで使用されているような用語「コンピュータ読み取り可能な媒体」とは、プロセッサ７０４に命令を実行用に提供することに関与するあらゆる媒体を指す。コンピュータシステム７００はマシンのほんの一例であるため、コンピュータ読み取り可能な媒体は「マシン読み取り可能な媒体」のほんの一例である。そのような媒体は、不揮発性媒体、揮発性媒体、および通信媒体を含むもののそれらに限定されない多くの形態を取り得る。不揮発性媒体はたとえば、記憶装置７１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ７０６などのダイナミックメモリを含む。通信媒体は、バス７０２を構成する配線を含む、同軸ケーブル、銅線および光ファイバを含む。通信媒体はまた、電波および赤外線データ通信中に発生するものといった音波または光波の形も取り得る。
【０１６４】
コンピュータ読み取り可能な媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光媒体、パンチカード、紙テープ、孔のパターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップまたはカートリッジ、以下に説明するような搬送波、または、コンピュータがそこから読み取り可能な任意の他の媒体を含む。
【０１６５】
コンピュータ読み取り可能な媒体のさまざまな形態は、プロセッサ７０４への１つ以上の命令の１つ以上のシーケンスを実行用に保持することに関与していてもよい。たとえば、命令はまず、遠隔コンピュータの磁気ディスク上に保持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、電話回線を通してモデムを用いて命令を送信することができる。コンピュータシステム７００にとってローカルなモデムは、電話回線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器は、赤外線信号で搬送されたデータを受信でき、適切な回路が、データをバス７０２上に配置できる。バス７０２はデータをメインメモリ７０６に搬送し、そこからプロセッサ７０４が命令を検索して実行する。メインメモリ７０６によって受信された命令は、プロセッサ７０４による実行の前または後のいずれかで、記憶装置７１０上に随意に記憶されてもよい。たとえば、或る区分についての構文を実施するための命令、または、データを緻密化するための命令が、メインメモリ７０６に記憶されてもよく、および／または、ここに説明されたコンピュータ読み取り可能な媒体のいずれかによって搬送されてもよい。
【０１６６】
コンピュータシステム７００はまた、バス７０２に結合された通信インターフェイス７１８も含む。通信インターフェイス７１８は、ローカルネットワーク７２２に接続されたネットワークリンク７２０に双方向データ通信結合を提供する。たとえば、通信インターフェイス７１８は、データ通信接続を対応する種類の電話回線に提供するデジタル相互サービス網（ＩＳＤＮ）カード、またはモデムであってもよい。別の例として、通信インターフェイス７１８は、データ通信接続を互換性があるＬＡＮに提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現され得る。任意のそのような実現化例では、通信インターフェイス７１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
【０１６７】
ネットワークリンク７２０は通常、１つ以上のネットワークを介して、他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク７２０は、ローカルネットワーク７２２を介して、ホストコンピュータ７２４に、またはインターネットサービスプロバイダ（ＩＳＰ）７２６により運営されるデータ装置に、接続を提供してもよい。ＩＳＰ７２６は次に、現在一般に「インターネット」７２８と呼ばれている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク７２２およびインターネット７２８は双方とも、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を使用する。コンピュータシステム７００へ、またはコンピュータシステム７００からデジタルデータを搬送する、さまざまなネットワークを通る信号、ネットワークリンク７２０上の信号、および通信インターフェイス７１８を通る信号は、情報を運ぶ搬送波の例示的な形態である。
【０１６８】
コンピュータシステム７００は、ネットワーク、ネットワークリンク７２０および通信インターフェイス７１８を介して、メッセージを送信し、プログラムコードを含むデータを受信する。インターネットの例では、サーバ７３０は、アプリケーションプログラム用の要求されたコードを、インターネット７２８、ＩＳＰ７２６、ローカルネットワーク７２２、および通信インターフェイス７１８を介して送信してもよい。
【０１６９】
受信されたコードは、それが受信された際にプロセッサ７０４により実行されてもよく、および／または、後の実行用に記憶装置７１０または他の不揮発性ストレージに記憶されてもよい。このように、コンピュータシステム７００は、搬送波の形をしたアプリケーションコードを取得し得る。
【０１７０】
前述の明細書では、この発明を、その特定の実施例を参照して説明してきた。しかしながら、この発明のより幅広い精神および範囲を逸脱することなく、様々な修正および変更がそれに行なわれてもよいことは、明らかである。したがって、明細書および図面は、限定的な意味というよりもむしろ例示的な意味において見なされるべきである。
【図面の簡単な説明】
【０１７１】
【図１】緻密化を行なうための方法１００を示すフローチャートである。
【図２Ａ】区分化されたテーブルのシンタックスのブロック図である。
【図２Ｂ】図２Ｃの外部結合タイプのシンタックスのブロック図である。
【図２Ｃ】この発明の一実施例に従った、図２Ａの区分化されたテーブルを用いた拡張JOINシンタックスのブロック図である。
【図３】図２ＣのPARTITIONED OUTER JOINを実施するための方法の一例を示すフローチャートである。
【図４】図２ＣのPARTITIONED OUTER JOINを実施するための方法の別の例を示すフローチャートである。
【図５】図２ＣのPARTITIONED OUTER JOINを実施するための方法の別の例を示すフローチャートである。
【図６】図２ＣのPARTITIONED OUTER JOINを実行可能なリレーショナルデータベース管理システムに含まれ得るオプティマイザの演算の方法のフローチャートである。
【図７】この発明の一実施例が実施され得るコンピュータシステム７００を示すブロック図である。
【図１】
2007534035.tif 000039
【図２Ａ】
2007534035.tif 000040
【図２Ｂ】
2007534035.tif 000041
【図２Ｃ】
2007534035.tif 000042
【図３】
2007534035.tif 000043
【図４】
2007534035.tif 000044
【図５】
2007534035.tif 000045
【図６】
2007534035.tif 000046
【図７】
2007534035.tif 000047
【手続補正書】
【提出日】平成17年11月28日(2005.11.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マシンにより実施される方法であって、
外部結合演算が行なわれることを明白に示すデータ操作言語ステートメントを実行するステップと、
複数の次元に関連付けられたデータの第１の集合に基づいて、複数の次元のうちの第１の次元に関してデータの第１の集合よりも密なデータの第２の集合を生成するステップとを含み、
データの第１の集合はデータの複数の部分集合を含み、
生成するステップは、複数のミニ結合演算を行なうステップを含み、各ミニ結合演算は、データの第３の集合とデータの部分集合のうちの異なる１つとの間での外部結合を伴い、
外部結合を行なうステップは、前記実行するステップに応答して行なわれる、方法。
【請求項２】
データの第１の集合は、次元値組合せに関連付けられた行を含み、次元値組合せは、複数の次元から選択された次元値の組合せであり、
データの第２の集合は、データの第１の集合の行に対応する次元値組合せについて対応する行を含み、
対応する行は次元値組合せに関連付けられており、
生成するステップは、
次元値組合せの集合について、或る対応する行がデータの第２の集合に存在するかどうかをチェックするステップを含み、次元値組合せの集合は１つの次元に関して密であり、生成するステップはさらに、
対応する行が存在しない場合、行を作成するステップを含む、請求項１に記載の方法。
【請求項３】
チェックするステップは、次元値組合せの集合の各次元値組合せについて１つのループを行なう入れ子ループ命令の集合内で行なわれる、請求項２に記載の方法。
【請求項４】
データの部分集合の各々はデータの単一の行である、請求項１に記載の方法。
【請求項５】
データの部分集合の各々はデータの第１の集合の１区分であり、複数の次元のうちの１つの次元から選択された単一の次元値に関連付けられている、請求項１に記載の方法。
【請求項６】
生成するステップは、第１のプロセッサを用いて第１の部分集合に対して外部結合を行なうステップと、第１のプロセッサとは異なる第２のプロセッサを用いて第２の部分集合に対して外部結合を行なうステップとを含む、請求項１に記載の方法。
【請求項７】
外部結合は右外部結合である、請求項６に記載の方法。
【請求項８】
外部結合は左外部結合である、請求項６に記載の方法。
【請求項９】
生成するステップはＳＱＬエンジンによって行なわれる、請求項１に記載の方法。
【請求項１０】
生成するステップは、データの第１の集合を区分化するための区分化キーを示す式を受取るステップを含む、請求項１に記載の方法。
【請求項１１】
外部結合は、ブール式を含む結合条件に関連付けられている、請求項１に記載の方法。
【請求項１２】
データの前記第１の集合は、行の第１の集合を含み、
前記外部結合は、行の前記第１の集合と行の第２の集合との間でのものであり、生成するステップは、行の前記第１の集合の部分集合、および行の前記第２の集合のすべてを、複数のプロセスの各々に送るステップを含む、請求項１に記載の方法。
【請求項１３】
生成するステップは、
複数の次元のうちの少なくとも１つの次元を特定するステップと、
特定された次元に関してデータの第１の集合をハッシュ区分化するステップとを含む、請求項１２に記載の方法。
【請求項１４】
データの第２の集合にどの次元値組合せが含まれるかを限定する条件を含む構文を検出するステップと、
他の構文を検出することに応答して、データの第２の集合が限定されていた次元値組合せに関してのみ演算を行なうステップとをさらに含む、請求項１に記載の方法。
【請求項１５】
データの第１の集合は複数の次元に関連付けられ、第２の集合は複数の次元に関連付けられ、データの第２の集合は、複数の次元のうちの１つに関してより密である、請求項１に記載の方法。
【請求項１６】
マシンにより実施される方法であって、
複数の次元に関連付けられたデータの第１の集合に基づいて、複数の次元のうちの第１の次元に関してデータの第１の集合よりも密なデータの第２の集合を生成するステップを含み、
生成するステップは、複数の次元のうちの第２の次元の別個の値についてデータの第１の集合のソートの組合せを行なうことなく行なわれ、
前記方法はさらに、
見つかった別個の値と第１の次元の次元値の集合との外積を行なうことにより、行の第１の集合を生成するステップと、
行の第１の集合に行が存在しない次元値の集合の次元値に対応する行を、行の前記第１の集合に追加するステップとを含む、方法。
【請求項１７】
生成するステップは、データの第１の集合のソートを行なうことなく行なわれ、データの第１の集合のソートは、複数の次元のうちの第２の次元の別個の値を見つけるために使用される、請求項１７に記載の、マシンにより実施される方法。
【請求項１８】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項１９】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項２に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２０】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項３に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２１】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項４に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２２】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項５に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２３】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項６に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２４】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項７に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２５】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項８に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２６】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項９に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２７】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１０に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２８】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１１に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項２９】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１２に記載の方法を１つ以上のプロセッサに
行なわせる、マシン読み取り可能な媒体。
【請求項３０】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１３に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３１】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１４に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３２】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１５に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３３】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１６に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３４】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項１７に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【請求項３５】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【請求項３６】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１６に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【請求項３７】
システムであって、
１つ以上のプロセッサと、
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、１つ以上のプロセッサによって実行される際、請求項１７に記載の方法を１つ以上のプロセッサに行なわせる、システム。
【請求項３８】
データの第３の集合の全要素は、データの第３の集合の要素がミニ結合演算に関与する部分集合の任意の要素と整合するかどうかという各ミニ結合演算の結果に保存される、請求項１に記載の方法。
【請求項３９】
命令の１つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、１つ以上のプロセッサによって実行される際、請求項３８に記載の方法を１つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
【手続補正書】
【提出日】平成19年8月17日(2007.8.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１７
【補正方法】変更
【補正の内容】
【請求項１７】
生成するステップは、データの第１の集合のソートを行なうことなく行なわれ、データの第１の集合のソートは、複数の次元のうちの第２の次元の別個の値を見つけるために使用される、請求項１６に記載の、マシンにより実施される方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
図２Ａは、区分化されたテーブル２２０のシンタックスのブロック図である。区分化されたテーブル２２０はテーブル参照２２１とコンマ２２４とexpr２２２とを含み、それらは以下の説明で言及される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００７９
【補正方法】変更
【補正の内容】
【００７９】
ＯＮ句において結合条件が特定されているため、上の表には列Ｃ１が２つ現われている。列Ｃ１の一方はテーブルＴ１に由来し、他方はテーブルＴ２に由来する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１００
【補正方法】変更
【補正の内容】
【０１００】
このため、ブランチ２０４において、左から始まって、ユーザはまず、区分化されたテーブル２０６ａかテーブル参照２０６ｂかを特定し、次にユーザはブランチ２０４ｂ上でキーワード「NATURAL」を特定してもよく、または、ユーザはブランチ２０４ａを使用してキーワード「NATURAL」を使用しなくてもよい。次に続くのは、ブランチ２０４ａ上の
外部結合タイプ２１２か、ブランチ２０４ｂ上の外部結合タイプ２１４かを特定するキーワードである。外部結合タイプ２３０は、外部結合タイプ２１２および２１４の一実施例である。外部結合タイプ２１２または外部結合タイプ２１４に続くのは、キーワードJOINである。ブランチ２０４ａ上では、区分化されたテーブル２０８ａかテーブル参照２０８ｂかが、キーワードJOINに続く。ブランチ２０４ｂ上では、区分化されたテーブル２１０ａかテーブル参照２１０ｂかが、キーワードJOINに続く。NATURAL OUTER JOINでは何の条件も適用されていないため、ブランチ２０４ｂ上では、OUTER JOIN句は、区分化されたテーブル２１０ａかテーブル参照２１０ｂかで終了する。区分化されたテーブル２０８ａまたはテーブル参照２０８ｂに続くのは、結合条件を特定するためのキーワード「ＯＮ」、または、結合キーを特定するための「USING」のいずれかである。既存のANSI結合演算子と同様に、PARTITIONED OUTER JOINは複雑な結合条件を可能にし、結合条件２１６（すなわち、キーワード「ＯＮ」に続くjoin_cond）は、任意に複雑なブール式であってもよい。join_condまたは結合条件２１６は、区分化されたテーブルの区分化式における任意の列を含む、結合のいずれかの側からのテーブルの列に適用可能である。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１４０
【補正方法】変更
【補正の内容】
【０１４０】
ステップ６０２の説明に戻ると、インデックスが存在する場合、３つの方法はすべて、依然として使用可能であり、方法はステップ６１２へ進む。ステップ６１２で（ステップ６０４と同様に）、非等価結合が存在するかどうか、判断が下される。非等価結合が存在しない場合、方法５００は使用できず、そのため方法６００はステップ６１４へ進み、そこで、方法３００、４００、５００のうちのどれがより効率的であると予想されるか、判断が下される。方法５００がより効率的であると予想される場合、方法６００はステップ６１０へ進む。方法４００がより効率的であると予想される場合、方法６００はステップ６０６へ進む。方法３００がより効率的であると予想される場合、方法６００はステップ６１６へ進み、そこで、方法３００の入れ子ループ外部結合が実施される。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１５０
【補正方法】変更
【補正の内容】
【０１５０】
たとえば、コンピュータ装置が４つのプロセッサを有し、SALESテーブルが製品ＩＤ１〜６を有する６つの製品を有する場合、第１のプロセッサは、製品ＩＤ１および２に対応するSALESテーブルの区分を受取ってもよく、第２のプロセッサは、製品ＩＤ３および４に対応する区分のコピーを受取ってもよく、第３のプロセッサは、製品ＩＤ５に対応するSALESテーブルの部分を受取ってもよく、第４のプロセッサは、製品ＩＤ６に対応するSALESテーブルの部分を受取ってもよい。しかしながら、プロセッサ１〜４の各々は、TIMESテーブル全体を受取る。したがって、各スレーブおよび／またはプロセスは、区分化されたテーブルのその切片についてPARTITIONED OUTER JOIN演算を行なうために、それが必要とするターゲットテーブルの区分および次元テーブル全体へのアクセスを有する。第１のプロセッサはまず製品ＩＤ♯１の区分にOUTER JOINしてもよく、次に製品ＩＤ♯２の区分にOUTER JOINしてもよい。第１のプロセスの演算と並行して、第２のプロセッサはまず製品ＩＤ♯３の区分にOUTER JOINしてもよく、次にＩＤ♯４の区分にOUTER JOINしてもよい。同時に、第３のプロセッサは製品ＩＤ♯５区分にOUTER JOINしてもよい。また、並行して、第４のプロセッサは製品ＩＤ♯６区分にOUTER JOINしてもよい。
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図２Ｂ
【補正方法】変更
【補正の内容】
【図２Ｂ】
2007534035.tif 000048
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2007534035.tif 000049
【国際調査報告】
2007534035.tif 000050
2007534035.tif 000051
2007534035.tif 000052
2007534035.tif 000053