JP2007534035A - リレーショナルデータベースシステムでデータを緻密化するためのdmlステートメント - Google Patents

リレーショナルデータベースシステムでデータを緻密化するためのdmlステートメント Download PDF

Info

Publication number
JP2007534035A
JP2007534035A JP2006524117A JP2006524117A JP2007534035A JP 2007534035 A JP2007534035 A JP 2007534035A JP 2006524117 A JP2006524117 A JP 2006524117A JP 2006524117 A JP2006524117 A JP 2006524117A JP 2007534035 A JP2007534035 A JP 2007534035A
Authority
JP
Japan
Prior art keywords
processors
data
dimension
perform
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006524117A
Other languages
English (en)
Other versions
JP4747094B2 (ja
JP2007534035A5 (ja
Inventor
グプタ,アブヒナブ
シェン,レイ
サブラマニアン,サンカー
フォルカート,ネイサン
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2007534035A publication Critical patent/JP2007534035A/ja
Publication of JP2007534035A5 publication Critical patent/JP2007534035A5/ja
Application granted granted Critical
Publication of JP4747094B2 publication Critical patent/JP4747094B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2445Data retrieval commands; View definitions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

データの緻密化のための方法および装置が提供される。DMLステートメント内にデータを区分化するための構文を含むための方法および装置が提供される。区分化データ用の構文は必ずしもデータの緻密化を行なわなくてもよく、データの緻密化は必ずしも区分化データ用の構文を含んでいなくてもよい。一実施例では、OUTER JOINのシンタックスは、データ緻密化に使用され得るPARTITION BY構文を含むよう拡張される。

Description

発明の分野
この発明はデータ操作に関する。より特定的には、この発明は、1つ以上の次元に関してデータの集合を緻密化するための手法に関する。
発明の背景
「次元」という用語は、別個の値の関連集合を指す。たとえば、TIMES(時間)次元は、1998年1月から2003年12月までのすべての日付を含み得る。同様に、PRODUCTS(製品)次元は、ある会社のあらゆる可能な製品を表わす値を含み得る。
データ項目の集合は、その集合の各データ項目が或る特定の次元からの値に関連付けられている場合、「次元的」である。たとえば、テーブルの各行が、或る特定の事象についてのデータ、たとえばその事象の日付といったデータを含むと仮定する。この例では、「事象データ」はTIMES次元に関して「次元的」である。
データ項目の集合は、それらデータ項目が2つ以上の次元に関して次元的である場合、「多次元的」である。たとえば、SALES(販売)テーブルの各行が或る特定の販売についてのデータ、たとえば(1)その販売の日付、(2)販売された製品、および(3)販売が行なわれた地域、といったデータを含むと仮定する。この例では、「販売データ」は、TIMES次元、PRODUCTS次元、およびREGION次元に関して次元的であるため、多次元的である。
多次元データを記憶するテーブルはしばしば「ファクトテーブル」と呼ばれる。或る特定の次元の次元値を記憶するテーブルは「次元テーブル」と呼ばれる。このため、上述のSALESテーブルを有する同じデータベースは通常、TIMESテーブル、PRODUCTSテーブル、およびREGIONテーブルも含んでいる。
ファクトテーブルの各行は、次元の各々について1つの値を含んでいる次元値組合せに対応している。たとえば、上述のSALESテーブルでは、各行は通常、TIMES次元値とPRODUCTS次元値とREGION次元値との組合せに対応している。所与のSALESテーブル行に関連付けられた次元値の集合は(t,p,r)として表わされてもよく、ここで、tはTIMES次元についての値であり、pはPRODUCTS次元についての値であり、rはREGION次元についての値である。
通常、すべての次元値組合せが対応する行をファクトテーブルに有するとは限らない。このため、ファクトテーブルの行に関連付けられた次元値組合せの集合は、次元の各々からの次元値の外積の部分集合である。
ファクトテーブルが、次元「D」のあらゆる可能な値を、ファクトテーブルの他の次元値の任意の所与の組合せについて含む場合、ファクトテーブルは次元「D」に沿って「密である」といわれる。たとえば、REGION次元が3つの可能な値RGN1、RGN2およびRGN3のみを有すると仮定する。SALESテーブルに反映されたすべての組合せ(t,p)について、SALESテーブルが次元値組合せ(t,p,RGN1)、(t,p,RGN2)および(t,p,RGN3)についての行を含む場合、SALESテーブルはREGION次元に関して密である。
「緻密化」とは、データの集合を、対象の次元に沿って、元々のものより密にするプロセスである。行の集合は、たとえば、次元値の欠落した組合せについてダミー行を作成することによって緻密化されてもよい。密度が増加したデータは「緻密化された」といわれ、密度が増加した、または増加しつつある次元は、「緻密化」次元といわれる。
緻密化はさまざまな状況にとって有用である。たとえば、いくつかの多次元データベースシステム(たとえばオンライン分析処理(OLAP))における問合せは、データが時間次元に沿って緻密化されることを必要とする。また、OLAPユーザといったユーザの中には、特に窓関数が計算され提示される際に、データを緻密化されたフォーマットで見ることに慣れている者もいる。たとえば、或る特定の日について販売がない場合、ユーザの中には依然として、ディスプレイが販売の現在高、その日、および販売列における空白空間を示しているのを見たがる者もいる(なぜなら、現在高は、緻密化されたデータを通常表示するOLAPにおける窓関数であるためである)。
構造化問合せ言語(SQL)を用いると、緻密化は、DISTINCT(別個の)演算、CROSS JOIN(交差結合)演算、およびOUTER JOIN(外部結合)演算を含む一連の演算によって行なわれてもよい。一例として、以下のテーブルを含むデータベーススキーマを考慮されたい。
Figure 2007534035
テーブルの上述の集合では、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データを緻密化する問合せQ1は、以下のとおりである。
Figure 2007534035
Q1において、V2は、(1)実際にSALESテーブルにあるprod_id値と(2)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との間で外積がとられるようにする。
V1(SALESテーブル)とV2との間のRIGHT OUTER JOIN(右外部結合)演算は、(1)SALESテーブルの行のすべてと、(2)SALESテーブルには見つからない、V2からのtime_idとprod_idとの組合せに対応する空の行とを含む結果集合を生成する。
図1は、Q1において使用される、緻密化を行なうための方法100を示すフローチャートである。ステップ102で、SALESテーブルにおけるprod_idのすべてのDISTINCT値を得るために、ソートが行なわれる。ステップ104で、TIMESテーブルにおけるtime_id値とのすべてのprod_id値のCROSS JOINが行なわれ、それにより、時間次元においては密ではあるがSALESテーブルに見つかるprod_idの値しか含まない、(prod_id,time_id)次元値組合せの集合を得る。ステップ106で、ステップ104のCROSS JOINの結果とのSALESファクトテーブルのOUTER JOINが行なわれ、それにより、元のSALESテーブルに見つからないCROSS JOINの任意の(prod_id,time_id)次元値組合せについて、空白の行をSALESテーブルに追加する。
同じファクトテーブルおよび次元テーブルを用いた別の例として、ユーザが日毎、製品毎の年度累計(YTD)売上の現在値に関心があると仮定する。データがまばらであると仮定すると、YTD売上データを生成するSQLで表わされた問合せQ2は、以下のとおりである。
Figure 2007534035
Q2において、「FROM SALES…」ステートメントはQ1と同一であり、演算の同じシーケンスが起こるようにする。「SELECT V2.prod_id…」ステートメントは、売上値を合計する。この合計はYTD_sales変数で戻される。戻されたデータは、標準SQL PARTITION BY(〜によって区分化する)構文によって、製品および年に従って区分化され、次に、ORDER BY(〜によって順序付ける)構文を用いて、time_idによって順序付けられる。
Q1の例と同様に、年度累計売上を計算することは、SALESテーブルにおけるprod_idのすべてのDISTINCT値を得るためのソートと、(2)TIMESテーブルにおけるtime_id値とのすべてのprod_id値の交差結合と、(3)(2)でのCROSS JOINの結果とのSALESテーブルのOUTER JOINとを必要とする。加えて、この問合せは、(4)YTDに関連付けられた窓関数を計算するために、列(product_id,year,time_id)に対して(3)のOUTER JOIN結果のソートを行なう。
この発明の発明者らは、ステップ102(またはステップ(1))のソートは、最終結果には必要ない余分の計算ではあるが、先行技術では避けることができない、ということを認識していた。加えて、この発明の発明者らは、Q1が直感的に理解できるものではないことを認識していた。特に、より複雑な緻密化問合せでは、緻密化を行なうために使用される一連の演算が直感的に理解できない性質のものであるため、ステートメントを調べることによってユーザの意図を解読することは非常に困難であり得る。このため、問合せ内で緻密化を行なう現在のやり方の構造は複雑であり、理解が難しく、計算が非効率的である。
この発明を、添付図面の図において、限定のためではなく例示のために説明する。図中、同じ参照番号は同じ要素を指す。
発明の詳細な説明
データを緻密化するためのDMLステートメントを提供するための方法および装置を記
載する。以下の記載では、説明のため、多数の特定の詳細がこの発明の完全な理解を提供するために述べられる。しかしながら、この発明がこれらの特定の詳細なしで実践され得ることは明らかである。他の点では、この発明を不必要に不明瞭にしないよう、周知の構造および装置はブロック図の形で示す。
この発明の方法および装置は、各々互いから独立して使用可能な、または他の特徴の任意の組合せとともに使用可能ないくつかの特徴を提供する。データを緻密化するためのDMLステートメントを提供するこの発明の装置および方法の特徴の多くは、上に説明した問題によって動機付けられているが、どの個々の特徴も、上述の問題のどれにも対処していないかもしれず、または、上述の問題のうちの1つにしか対処していないかもしれない。上述の問題の中には、ファクトテーブルに関連するデータを記憶して編成するこの発明の方法のどの特徴によっても十分に対処されないものがあるかもしれない。見出しが提供されているが、或る特定の見出しに関連するもののその見出しを有する項に見つからない情報も、明細書の別の箇所に見つかるかもしれない。
機能的概要
DISTINCT演算、CROSS JOIN演算、およびOUTER JOIN演算の組合せを行なう必要なくデータを緻密化するための手法をここに説明する。たとえば、この発明の一実施例は、DISTINCT演算を行なうことなくデータを緻密化する。特に、データは、データが緻密化されていない次元の別個の値を見つけるためにソート演算を行なうことなく、緻密化される。
この発明の一実施例によれば、データベースサーバによってサポートされるデータベース言語は、DMLステートメントにおいて使用され得る、少なくとも他の構文と組合せて緻密化演算を引起す構文をサポートするよう拡張される。たとえば、DMLステートメントについての新しい構文が、別の構文に関連付けられた演算に対して使用されるデータの集合を区分化するために提供され、データを緻密化する。すなわち、一実施例では、OUTER JOINステートメントのシンタックスおよびセマンティクスは、区分化構文を含むよう拡張される。区分化構文を用いたCROSS JOINは、PARTITIONED OUTER JOIN(区分化された外部結合)と呼ばれる。PARTITIONED OUTER JOINは、或る特定された次元に関して区分化されたデータを戻し、各区分は値の別の集合にOUTER JOINされる。
区分が次元値の密な集合にOUTER JOINされる場合、密なテーブルが形成されてもよい。同様に、区分が、元のテーブルにおける次元値の対応する集合よりも次元値のより密な集合である値の集合にOUTER JOINされる場合、結果として生じるテーブルは元の集合より密であってもよい。下に説明する例示的な実施例では、或る次元に関してデータを緻密化するために、データを区分化するための構文が、OUTER JOINに関与するデータに対して演算するために使用される。これらの例では、区分化構文はOUTER JOINの一部として緻密化を行なうが、この明細書は、緻密化が区分化構文またはOUTER JOINを介して行なわれる実施例に限定されていない。窓関数およびスプレッドシート関数の外部でDMLステートメントのデータを区分化するための構文、およびデータの緻密化のための構文は、当該技術分野への独立した寄与である。OUTER JOINステートメントを必ずしも伴わない、データを緻密化するための異なる構文が使用されてもよい。
緻密化されつつあるデータの元の集合はテーブルであってもよく、それはターゲットテーブルと呼ばれてもよい。ターゲットテーブルは、ファクトテーブルまたは任意の他のタイプのテーブルであってもよい。たとえば、ターゲットテーブルは、データベース式によって形成される仮想テーブルであってもよい。
PARTITIONED_TABLE参照
データベースサーバは、それらがサポートするデータベース言語に準拠するデータベー
スステートメントを実行するよう設計されている。SQLは、多くのデータベースサーバによってサポートされているデータベース言語である。データベース言語は通常、(1)演算を識別するための構文と、(2)演算を行なう対象となっているデータを識別するための構文とを含む。多くのデータベース演算はテーブルに対して行なわれるよう設計されているため、データベースステートメントは通常、演算を行なう対象となっているテーブルを特定するテーブル識別子を含む。データベース言語のシンタックスを記述する際、そのようなテーブル識別子はラベルtable_referenceによって表わされる。
図2Aは、区分化されたテーブル220のシンタックスのブロック図である。区分化されたテーブル210はテーブル参照221とコンマ224とexpr210とを含み、それらは以下の説明で言及される。
一実施例によれば、データベースサーバの問合せ実行エンジンは、言語が以前にtable_referenceのみをサポートしていた1つ以上のコンテキストにpartitioned_table参照(区分テーブル220)を有するデータベースステートメントをサポートするよう拡張されている。一実施例によれば、partitioned_table参照のメタシンタックスは図2Aに例示されており、バッカス−ナウア記法(BNF)で以下のように定義される。
Figure 2007534035
図2Aを参照すると、区分テーブル220のシンタックスにおいて、テーブル参照221はキーワード「PARTITION BY」の左に配置されている。テーブル参照221は任意のテーブルであってもよい。同様に、キーワード「PARTITION BY」の右にはexpr222があり、それは、列への参照、または、列に対して評価を行なう式、たとえばCol1+Col2(Col1およびCol2は列への参照である)への参照であってもよい。キーワード「PARTITION BY」に続き、expr222は1つあってもよく、または、expr222などの式は任意の数あってもよく、各式は、コンマ224などのコンマによって隣接する式から分離される。たとえば、販売の地域(regn_id)、販売の時間(time_id)、販売された製品を供給する倉庫(warehouse_id)、および販売された製品を配送する会社(deliv_id)に対応する次元を有するSALESテーブルについて、おそらく、warehouse_idとdeliv_idとの積は全製品を一意的に識別するために使用可能であり、データベースは或る製品を識別するためにprod_id=warehouse_id*deliv_idを使用する。区分化されたテーブル220は、SALES PARTITION BY(warehouse_id*deliv_id,time_id)であってもよい。区分テーブル220などのpartitioned_table参照は、以前にテーブル参照を必要としたさまざまなコンテキストにおいて使用されてもよい。一実施例では、PARTITIONED OUTER JOINのシンタックスは、標準OUTER JOINのシンタックスと同様であるが、標準OUTER JOINにおいてtable_referenceが要請される場合はいつでも、PARTITIONED OUTER JOINがpartitioned_tableかtable_referenceかを受入れる点が異なっている。
「PARTITION BY」句
図2Aに示すように、partitioned_table参照は、table_referenceとPARTITION BY句とを含む。PARTITION BY句の前にあるtable_referenceによって特定されるテーブルをここに、PARTITION BY句の「ターゲットテーブル」と呼ぶこととする。ターゲットテーブルは、ファクトテーブルであっても、または任意の他のタイプのテーブルであってもよい。PARTITION BY句における式および列はそれぞれ、区分化式および区分化列と呼ばれる。
PARTITION BY句を含むステートメントの実行中、データベースサーバは、テーブル参照
221によって特定されたターゲットテーブルを区分へと分割し、各区分は、expr222に起因する列の次元値に対応している。たとえば、ターゲットテーブルがSALESファクトテーブルであり、exprがPRODUCT次元に対応する列である場合、SALESテーブルはprod_idによって区分化される。P1、P2およびP3という3つのprod_idがある場合、区分化された製品テーブルの第1の区分は、prod_idP1を有する行であり、第2の区分は、prod_idP2を有する行であり、第3の区分は、prod_idP3を有する行である。同様に、コンマ224を用いると、各prod_id値についてR1およびR2という2つの地域ID(regn_id)を有する地域次元がある場合、区分化テーブル句「SALES PARTITION BY{prod_id,regn_id}」は、テーブルを6つの区分に区分化する。第1の区分は製品ID P1と地域ID R1とを有し、第2の区分は製品ID P1と地域ID R2とを有し、第3の区分は製品ID P2と地域ID R1とを有し、第4の区分は製品ID P2と地域ID R2とを有し、第5の区分は製品ID P3と地域ID R1とを有し、第6の区分は製品ID P3と地域ID R2とを有する。
このため、上述の実施例での区分の階層構造は、リストされた第1の区分化インデックスがターゲットテーブルを主要区分へと分割し、次の区分化インデックスが各主要区分をより小さい区分へと分割するようになっている。しかしながら、他の実施例では、任意の他の区分化階層構造が使用されてもよい。たとえば、主要区分を作るために、リストされた最後の区分化次元が使用されてもよく、主要区分をより小さな区分へと分割するために、リストされた次の区分化次元が使用されてもよい。この実施例では、区分化テーブル句「SALES PARTITION BY{prod_id,regn_id}」は、製品ID P1と地域ID R1とを有する第1の区分、製品ID P2と地域ID R1とを有する第2の区分、製品ID P3と地域ID R1とを有する第3の区分、製品ID P1と地域ID R2とを有する第4の区分、製品ID P2と地域ID R2とを有する第5の区分、および、製品ID P3と地域ID R2とを有する第6の区分をもたらす。
外部結合タイプ
図2Bは、図2Cの外部結合タイプ230のシンタックスのブロック図である。外部結合タイプ230はオプション242を含む。
一実施例では、OUTER JOINのシンタックスは、区分化されたテーブルまたはテーブル参照のいずれかがOUTER JOINのどちらか一方の側で起こるようにする。したがって、図2Bのオプション242によって示すように、外部結合タイプは、結果として生じるテーブルが、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される。
たとえば、(P1,S1)、(P3,S2)、(P3,S3)、(P5,−)および(P10,−)についての行を有するテーブルAと、S1、S2、S3およびS4についての行を有するテーブルBという2つのテーブルを考慮し、列A.s_idおよびB.p_idにOUTER JOIN結果を投影する条件A.s_id=B.p_idに従ってこれらのテーブルをOUTER JOINすることを考慮する(ここで、s_idは、値S1、S2、S3およびS4を有する次元を指し、p_idは、値P1、P3、P5およびP10を有する次元を指す)。どちらのテーブルも区分化されたテーブルではなく、テーブルAがキーワード「OUTER JOIN」の左にあり、テーブルBがキーワード「OUTER JOIN」の右にある場合、LEFT OUTER JOINの結果は、(P1,S1)、(P3,S2)、(P3,S3)、(P5,−)および(P10,−)についての行を有するテーブルである。同様に、RIGHT OUTER JOINの結果は、(P1,S1)、(P3,S2)、(P3,S3)および(−,S4)についての行を有するテーブルである。また、FULL OUTER JOINの結果は、(P1,S1)、(P3,S2)、(P3,S3)、(P5,−)、(P10,−)および(−,S4)についての行を有するテーブルである。テーブルAがp_idに対して区分化されている場合、LEFT OUTER JOINの結果は、(P1,S1)、(P3,S2)、(P3,S3)、(P5,−)および(P10,−)についての行を有するテーブルである。LEFT OUTER JOINの結果は、テーブルAが区分化されなかった場合と同じである。テーブルBは区分化されなかったため、テーブルBの緻密化は起こらない。RIGHT OUTER JOINの結果は、(P1,S1)、(P1,S2)、(P1,S3)、(P1,S4)、(P3,S1)、(P3,S2)、(P3,S3)、(P3,S4)、(P5,S1)、(P5,S2)、(P5,S3)、(P5,S4)、(P10,S1)、(P10,S2)、(P10,S3)および(P10,S4)についての行を有するテーブルである。RIGHT OUTER JOINでは、区分P1、P3、P5およびP10の各々は、第2の列の値(S1、S2、S3およびS4)の各々について1つの行を含むよう緻密化される。FULL OUTER JOINの結果は、(P1,S1)、(P1,S2)、(P1,S3)、(P1,S4)、(P3,S1)、(P3,S2)、(P3,S3)、(P3,S4)、(P5,S1)、(P5,S2)、(P5,S3)、(P5,S4)、(P5,−)、(P10,S1)、(P10,S2)、(P10,S3)、(P10,S4)および(P10,−)についての行を有するテーブルである。RIGHT OUTER JOINに含まれる行に加え、FULL OUTER JOINの結果は、RIGHT OUTER JOINには含まれていない行(P5,−)および(P10,−)を含んでいる。テーブルAの第2の列の次元を緻密化して、同じ次元を含む列の各値をテーブルBに含めるようにすることに加え、行(P5,−)および(P10,−)が追加される。なぜなら、それらは、LEFT OUTER JOINで行なわれた外積において追加されるためである。

上述の事項を明確化するため、まず、正規ANSI準拠JOIN記法の結果記録に配置される列を説明し、次に、PARTITIONED OUTER JOIN記法の結果記録に配置される列を説明する。ANSI準拠記法において、2つのテーブルT1(c1,c2,c3)およびT2(c1,c4)があると仮定する。ここで、c1、c2、c3およびc4は列を表わす。名前を付けられたJOIN(たとえばUSING(使用する)句を有するJOIN、またはnatural(自然)JOIN)を使用する際、結果記録は、(1)結合キーとして使用される列と、(2)JOINオペランドの左からの非結合キーの列と、(3)JOINオペランドの右からの非結合キーの列とから構成される。たとえば、句T1 RIGHT OUTER JOIN T2 USING(c1)、または句T1 NATURAL RIGHT OUTER JOIN T2の結果は、列(c1,T1.C2,T1.C3,T2.c4
)から構成される。列c1はテーブルT1およびT2の双方に現われるが、列c1は結合キーとして使用されたため、結果には列c1のコピーが1つだけ配置される。
対照的に、結合条件がON(オン:〜に対して)句を介して特定されるANSI準拠結合については、結果は(1)T1からの列と、(2)T2からの列とから構成され、結合キーの列は2回現われ、1回はT1からの列により、1回はT2からの列により現われる。たとえば、句T1 RIGHT OUTER JOIN T2 ON T1.c1=T2.c1の結果は、行が列(T1.c1,T1.c2,T1.c3,T2.c1,T2.c2)を有しているテーブルである。しかしながら、対象の列を投影し出すためにSELECT(選択)句が使用されてもよい。たとえば、テーブルT1が以下のようであると仮定する。
Figure 2007534035
また、テーブルT2が以下のようであると仮定する。
Figure 2007534035
名前を付けられた列結合の一例として、ステートメント
Figure 2007534035
は以下を戻す。
Figure 2007534035
上述の結果では、2つのテーブルT1およびT2からのすべての列が現われているが、列C1は2つ、列C2は2つ(各テーブルに1つ)あるものの、列C1およびC4は結合キーであるため、1回しか現われていない。列を投影し出すためにSELECT句を使用する際、ステートメント
Figure 2007534035
は以下のテーブルをもたらす。
Figure 2007534035
選択句は列C1、T1.C3、T2.C4のみを特定したため、結果には列C2が現われていない。
ON句を使用する一例として、以下のステートメントを考慮されたい。
Figure 2007534035
上述のステートメントによって戻される結果は、以下のとおりである。
Figure 2007534035
上述のテーブルでは、NATURAL JOINまたはUSING句とは対照的に、列c1は2回現われている。なぜなら、テーブルT1からの列c1が現われ、テーブルT2からの列c1が現われているためである。
ON句を有するステートメントにおいてSELECT句を用いて列を投影し出す一例として、以下のステートメントを考慮されたい。
Figure 2007534035
上述のステートメントは以下のテーブルをもたらす。
Figure 2007534035
ON句を使用する際、T1テーブルおよびT2テーブルの双方からのC1列は通常は戻されるが、選択句がT2.C1、T1.C2、T1.C3、T2.C4を特定しており、列T1.C1が特定されていないため、したがってT1テーブルからのC1列は、結果には現われていない。
PARTITIONED OUTER JOINに戻ると、標準ANSI準拠JOINとは対照的に、名前を付けられた列である区分化外部結合の結果は、(1)もしあれば、左オペランドからの区分化式の結果と、(2)もしあれば、右オペランドからの区分化式の結果と、(3)結合列と、(4)左オペランドからの非区分化列および非結合列と、(5)右オペランドからの非区分化列および非結合列とを含む。たとえば、句T1 PARTITION BY(C2)NATURAL RIGHT OUTER JOIN T2を考慮されたい。上述のステートメントの結果記録は、列(T1.c2,c1,T1.c3,T2.c4)から構成される。
同様に、ON句を介して特定された結合条件を有する区分化外部結合からの結果は、(1)もしあれば、左オペランドからの区分化式と、(2)もしあれば、右オペランドからの区分化式と、(3)左オペランドからの非区分化列と、(4)右オペランドからの非区分化列とを含む。たとえば、句T1 PARTITION BY(C2)RIGHT OUTER JOIN T2 ON T1.C1=T2.C1を考慮されたい。この句の結果は、列(T1.c2,T1.c1,T1.c3,T2.c1,T2.c4)を含む。
SELECT句において対象の列を投影し出す第一の例として、以下のステートメントを考慮されたい。
Figure 2007534035
このステートメントの結果は、以下のとおりである。
Figure 2007534035
上述の結果では、テーブルT1は列C2によって区分化された。次に、列C1を結合キーとして用いて、テーブルT1の各区分がテーブルT2に外部結合された。名前が付けられた結合が使用されたため、結果には結合列C1は1回しか現われていない。
ここで、以下のステートメントを考慮されたい。
Figure 2007534035
結果として生じるテーブルは、以下のとおりである。
Figure 2007534035
ON句において結合条件が特定されているため、上の表には列C1が2つ現われている。列C1の一方はテーブルT1に由来し、他方はテーブルC2に由来する。
対象の列を投影し出すためにSELECT句を用いる一例として、以下のステートメントを考慮されたい。
Figure 2007534035
結果として生じるテーブルは、以下のとおりである。
Figure 2007534035
テーブルT1の列C1とテーブルT2の列C4とは特定されなかったため、それらは、結果として生じるテーブルには現われていない。
別の例として、テーブルT1が以下の2つの行を有すると仮定する。
Figure 2007534035
また、テーブルT2が以下の3つの行を有すると仮定する。
Figure 2007534035
以下のステートメントを考慮されたい。
Figure 2007534035
上述のステートメントの結果は、以下のテーブルである。
Figure 2007534035
同様に、以下のステートメントを考慮されたい。
Figure 2007534035
上述のステートメントは、列T1.a、T1.cおよびT2.bに投影しており、以下のテーブルをもたらす。
Figure 2007534035
区分化外部結合
図2Cは、ブランチ202および204を有する拡張されたJOINシンタックスのブロック図である。ブランチ204は、区分化されたテーブル206、区分化されたテーブル2
08、区分化されたテーブル210、外部結合タイプ212、外部結合タイプ214、および条件216を含み、それらは以下の説明で言及される。
ブランチ202は、INNER JOIN(内部結合)およびCROSS JOINについてシンタックスを与える。ブランチ204に関し、BNFフォーマットでのPARTITIONED OUTER JOINの対応するシンタックスは、以下のとおりである。
Figure 2007534035
このため、ブランチ204において、左から始まって、ユーザはまず、区分化されたテーブル206aかテーブル参照206bかを特定し、次にユーザはブランチ204b上でキーワード「NATURAL」を特定してもよく、または、ユーザはブランチ204aを使用してキーワード「NATURAL」を使用しなくてもよい。次に続くのは、ブランチ206a上の外部結合タイプ212か、ブランチ206b上の外部結合タイプ214かを特定するキーワードである。外部結合タイプ230は、外部結合タイプ212および214の一実施例である。外部結合タイプ212または外部結合タイプ214に続くのは、キーワードJOINである。ブランチ204a上では、区分化されたテーブル208aかテーブル参照208bかが、キーワードJOINに続く。ブランチ204b上では、区分化されたテーブル210aかテーブル参照210bかが、キーワードJOINに続く。NATURAL OUTER JOINでは何の条件も適用されていないため、ブランチ204b上では、OUTER JOIN句は、区分化されたテーブル210aかテーブル参照210bかで終了する。区分化されたテーブル208aまたはテーブル参照208bに続くのは、結合条件を特定するためのキーワード「ON」、または、結合キーを特定するための「USING」のいずれかである。既存のANSI結合演算子と同様に、PARTITIONED OUTER JOINは複雑な結合条件を可能にし、結合条件216(すなわち、キーワード「ON」に続くjoin_cond)は、任意に複雑なブール式であってもよい。join_condまたは結合条件216は、区分化されたテーブルの区分化式における任意の列を含む、結合のいずれかの側からのテーブルの列に適用可能である。
キーワード「USING」に続いて、コンマ224によって示すように、結合演算に対して条件を出す式expr222が任意の数あってもよい。各expr222は、列、または、列に対して評価を行なう式のいずれかである。結合の結果は、OUTER JOINを区分の各々に適用することからの結果のUNION(和集合)である。一実施例では、OUTER JOINが行なわれた後で、区分化式は、対応する区分化されたテーブルを識別する値を呈する。区分化されたテーブル206aの代わりに参照テーブル206bが使用され、かつ、区分化されたテーブル208aの代わりに参照テーブル208bが使用されるかまたは区分化されたテーブル210aの代わりに参照テーブル210bが使用される場合、PARTITIONED OUTER JOINは
標準OUTER JOINへ戻る。
ブランチ204aを用いた正当なPARTITIONED OUTER JOINのいくつかの例は、以下のとおりである。
Figure 2007534035
上述の例の各々は、SALESテーブルの同じ緻密化を行なっている。第1の例は右外部結合を用いており、一方、第2の例は左OUTER JOINを使用している。したがって、結果が同じになるように、SALESファクトテーブルおよびTIME次元テーブルの位置は、キーワード「OUTER JOIN」に対して反転されている。第3の例では、結合キーは、等式の形をした等価結合条件を表わすというよりもむしろ、名前によって特定されており、それは最初の2つの例の等価結合条件と同等である。ブランチ204bを用いたOUTER JOIN式のシンタックスの一例は、以下のとおりである。
Figure 2007534035
この例では、TIMESテーブルおよびSALESテーブルの共通の列が、結合キーとして使用されている。TIMESテーブルおよびSALESテーブルがたとえばたった1つの共通の列(time_id)しか持たない場合、結果は、上の3つのステートメントにおけるステートメントと同じである。
緻密化演算における「PARTITION BY」演算子の使用
PARTITIONED OUTER JOINシンタックスを用いると、問合せQ1は以下のように書換可能である。
Figure 2007534035
Q1_new問合せは単一のPARTITIONED OUTER JOINだけを必要とし、それにより、緻密化を行なうために以前は必要であった(背景の項における)Q1のコードと比較して、緻密化を行なうために必要なコード化を簡略化する。
同様に、PARTITIONED OUTER JOINシンタックスを用いると、問合せQ2は以下のように書換可能である。
Figure 2007534035
Q2_new問合せは、YTD窓関数を計算するために、(1)TIMESとのSALESのPARTITIONED OUTER JOINと、(2)「(1)」におけるPARTITIONED OUTER JOINの結果のソートとを必要とする。
区分化外部結合を実施する方法
データベースサーバは、区分化外部結合を特定するステートメントを受取ることに応答して、区分化外部結合演算を行なうために1つ以上のルーチンを実行する。区分化外部結合を行なうために、さまざまな手法がデータベースサーバによって使用されてもよい。一実施例によれば、データベースサーバは、複数の手法の各々についてのルーチンを含み、次に、区分化外部結合演算を含む各ステートメントにとってどの手法が最も適切かを選択する。一実施例では、所与の問合せについて選択された方法は、その問合せを行なうためにどの方法がより効率的であるかに依存する。
この発明は任意の特定の手法に限定されてはいないものの、区分化外部結合を行なうた
めの3つの手法をここで説明する。提示された3つの方法の各々において、一連の「ミニ結合」(すなわち、テーブル全体に対して一度には行なわれない結合)が行なわれる。これら3つの方法の各々は、3つの方法のうちの別のものがより効率的かどうかを判断するために計算コストに関する見積りを行なうことなく、互いに別々に使用されてもよい。また、これに代えて、上述の方法の任意の2つが互いに組合されて使用されてもよく、所与の問合せについてその2つの方法のうちのどちらを使用するかを決めるためにコスト計算が行なわれる。
入れ子ループ
図3は、入れ子ループ区分化外部結合と呼ばれる方法300を示すフローチャートである。
入れ子ループ(たとえばdo(ドゥ)ループ)は、入れ子関係の少なくとも2つのループを含むコードである。たとえば、最も外側のループは値の1つの集合全体にわたって反復し、入れ子ループは、値の第1の集合における各値について、値の第2の集合全体にわたって反復する。緻密化を行なうために、入れ子ループの最も外側のループのうちの1つ以上は、区分化次元に対応していてもよい。最も内側のループの各々は、異なる緻密化次元に対応していてもよい。各ループはインデックスを有する。ループの各反復中、ループインデックスは次の値に設定される。
区分化次元に対応するループは区分化ループと呼ばれ、対応するループインデックスは区分化インデックスと呼ばれる。緻密化次元に対応するループは緻密化ループと呼ばれ、対応するループインデックスは緻密化インデックスと呼ばれる。或る特定の次元に対応するループのインデックスは、ループの各反復中、その次元からの新しい値を割当てられる。このため、区分化ループのインデックス値は、区分化次元の別個の次元値に対応する。たとえば、テーブルが3つの行を有し、これら3つの行の各々が区分化次元について同じ次元値を有する場合、区分化ループはその特定の次元値について1回だけ実行する。緻密化ループのインデックス値は、緻密化次元の次元値に対応している。このため、緻密化ループの各反復中、ループのインデックス値は一意的な次元値に対応している。ループの各々はその次元値を巡回するため、「if」ステートメントは、ループの現在のインデックス値組合せに対応する次元値組合せを有するデータ(たとえばターゲットテーブル)にエントリ(たとえば行)が存在するかどうかをチェックする。エントリが存在する場合、それは出力データの集合に追加される。次元値についてエントリが存在しない場合、インデックス値組合せに対応する次元値組合せを有するヌル値のエントリが作成される。
たとえば、Q1_new問合せの根底にあるコードについて、以下のアルゴリズムが使用されてもよく、ここでは、PRODUCT次元が区分化次元のために使用され、TIME次元が緻密化次元のために使用される。
Figure 2007534035
ここで、インデックスIは、SALESテーブルの製品次元の別個の値を使用し、インデックスIIは、TIMESテーブルの時間次元のフルスキャンを行なうか、または、既にセットアップされた時間次元についてのインデックスを使用する。
入れ子ループ結合は、利用可能なインデックスをそのループインデックスとして使用しており、非等価結合で使用されてもよい。インデックスがループインデックスとしての使用のために存在してはいない場合、入れ子ループ外部結合またはソートマージ外部結合を行なうことができるようになるためにインデックスをセットアップすることが可能である。しかしながら、その場合、インデックスのセットアップに関連するコスト計算により、区分化された入れ子ループは、区分化外部結合を行なう他の方法よりも効率が落ちるかもしれない。
図3を参照すると、ステップ302で、区分化ループのインデックス(インデックスI)が最初に、製品次元の第1の別個の値に設定される。ループのその後のサイクルで、インデックスIは現在の値に設定され、それは製品次元の次の別個の次元値であってもよい。インデックスIについて区分化次元の値を得る方法を以下に説明する。一実施例では、緻密化次元以外の任意の次元についてインデックスが存在し、そのインデックスが次元の別個の値からなる場合、それはインデックスI、つまり区分化インデックスのために使用されてもよい。
ステップ304で、次のループのインデックスであるインデックスIIが現在の値に設定され、それは、ファクトテーブルが緻密化されつつあるインデックスの次の別個の次元値であってもよい。任意の数の区分化ループおよび/または緻密化ループがあってもよく、各々は異なる区分化次元および/または緻密化次元にそれぞれ対応している。データを区分化するために使用されるループが、データが十分に密な次元に対応している場合、対応ループは、次元値の各々に対応するインデックス値を有する。
ステップ306で、現在のインデックス値の組合せに対応する次元値組合せを有する行があるかどうかについて、判断が(たとえば「if」ステートメントを介して)下される。また、これに代えて、非等価結合について、現在の行の次元組合せとインデックス値組合せとが結合条件(たとえば条件216(図2C)またはjoin_cond)を満たすかどうかについて、判断が下される。そのような行がない場合(結合条件が満たされていない場合
)、方法300はステップ308へ進み、そこで、その測度についてヌル値を有する行が作成される。ステップ308の後で、方法300はステップ310へ進む。ステップ306の説明に戻ると、行が存在する場合、方法300は(ステップ308を行なわずに)ステップ310へ進む。ステップ310で、ステップ306で見つかった行、またはステップ308で作成された行が、提示される最終結果(または出力テーブル)に追加される。ステップ312で、インデックスIIを有するループについてのインデックス値が他にあるかどうかが判断される。インデックスII値が他にある場合、方法300はステップ304へ戻り、インデックスIIを有するループの別の実行を開始する。インデックスII値が他にない場合、方法300はステップ314へ進み、インデックスI値が他にあるかどうかをチェックする。インデックスI値が他にある場合、方法300はステップ302へ進み、インデックスIを有するループの別の実行を開始する。インデックスI値が他にない場合、方法300は終了する。ステップ310とステップ312との間の点線によって示すように、ステップ312および314に類似するステップが任意の数あってもよく、各ステップは異なるループに対応しており、各ループは異なる緻密化次元または区分化次元に対応している。
このように、方法300の演算を要約すると、区分化インデックス、つまりインデックスIは、別個の次元値Iを巡回する。加えて、インデックスIの或る特定の値について、ループが、緻密化次元の各値IIについて「if」ステートメントを適用しながら、値IIのすべてについて実行され、それにより、区分化次元値Iを有するファクトテーブルの区分を緻密化する。
方法300についてのアルゴリズムのためのコードでは、「if」ステートメントは、現在のインデックス値組合せに対応する行が存在するかどうかの判断を下す任意のステートメントまたは任意の群のステートメントと置き換えられてもよい。上述の例では、外部インデックスはPRODUCTS次元に基づいていてもよい。上述の例では、内部ループのインデックスはtime_idの全集合である。
値を得るためのスキップスキャンの使用
方法300のステップ302へ戻ると、一実施例では、存在する唯一のインデックスが区分化次元を複合インデックスの一部として使用し、複合インデックスが、複合インデックスの他の部分について他の次元を有する場合、区分化次元が複合インデックスの先頭列でなくても、区分化インデックス(たとえばインデックスI)のためにスキップスキャンが使用される。スキップスキャンの最中、複合インデックスの区分化次元は、1つ以上の先頭列の各値についてアクセスされる。一実施例では、区分化インデックスの第1の値を見つけた後で、その値を有するインデックスにおける他のエントリは、次に高い値が見つかるまでスキップされる。インデックスの次の値を見つけた後で、既に見つかったインデックス値すべてがスキップされる。区分化インデックスの各別個の値について、このプロセスを繰返すことが見つけられてもよい。区分化インデックスの新しい別個の値を見つけた後で、区分化ループが実行される。データ用の集合によってはフルテーブルスキャンよりもスキップスキャンの方が迅速であり得る1つの理由は、インデックスが次元値のシーケンスを追跡するように編成されているためである。インデックス値の編成は、スキップ可能なインデックス組合せを判断するために利用されてもよい。加えて、インデックスを記憶するディスク空間のサイズは、フルテーブルを記憶するディスク空間のサイズよりも小さく、より小さいディスク空間はより速いアクセス時間を有する。
スキップスキャンを使用することにより、ファクトテーブルを区分化するために使用される必要があるのは、複合インデックスの1つの次元のみである。また、スキップスキャンを使用することにより、次元は、さもなければその次元の任意の所与の別個の値に対応する行をすべて見つけるためにテーブルスキャン(たとえばDISTINCT構文)を必要とする
であろうインデックスとして使用されてもよい。こうして、スキップスキャンを使用することにより、外部ループの新しい各値Iで、(区分化次元が次元値Iを有する)ファクトテーブルの対応する区分が見つけられる。スキップスキャンでは、ループは、ループが以前に実行されていない新しいprod_idに遭遇するたびに、繰返される。
すなわち、PARTITIONED OUTER JOINは、インデックスを使用する別個のprod_id値すべてを、スキップスキャンを介して得ることによって、計算可能である。次に、各prod_id値およびtime_idからなり、time_id値はインデックスIIとしてのTIMESテーブルからの値であるタプルが、SALESテーブルをスキャンするために使用される。インデックス値IおよびIIの各組合せについて、2つの入れ子ループ内のステートメントは、対応するprod_id値およびtime_id値と整合する行があるかどうかを判断し、整合する行が見つかった場合、それは戻される。その他の場合、つまり整合が戻されない場合、ダミー行が生成される。
ファクトテーブルの区分への分割
図4は、PARTITIONED OUTER JOINを行なう第2の方法である方法400のためのフローチャートを示しており、以下の説明されるように、ターゲットテーブルは区分へと分割され、次に各区分はOUTER JOINされる。ファクトテーブルの区分への分割は、等価結合またはインデックスに頼ってはおらず、したがって、他の2つの方法よりも柔軟性があるかもしれないが、場合によっては効率が落ちるかもしれない。
ステップ402で、ターゲットテーブルは、データが緻密化されつつある次元以外の次元に対してソートされる。ターゲットテーブルは、ファクトテーブルであっても任意の他のテーブルであってもよい。たとえば、ターゲットテーブルは、データベースステートメントの式によって行が生成される仮想テーブルであってもよい。ターゲットテーブル(たとえばSALESテーブル)のソーティングは、ターゲットテーブルを区分へと分割する効果を有し、各区分は、ターゲットテーブルがそれについてソートされる異なる次元値(たとえばprod_id)に対応している。方法400は、区分の端を検出し、取扱うためのサポートを必要としている。したがって、区分境界を通過したかどうかを判断するために、行の区分化次元の次元値を、現在の区分値と比較してもよい。
次に、ステップ404で、各区分は、密な次元テーブル(たとえばTIMESテーブル)とOUTER JOINされる。区分を密な次元と外部結合することは、密な次元テーブルの行(たとえばTIMES行)を取り、次にそれを各区分の行と整合させることを伴う。整合がない場合、所与の次元値組合せ(たとえば、prod_id,time_id)に対応するダミー行が作成される。方法400のターゲットテーブルの分割による緻密化は柔軟性があり、ON句に非等価条件(すなわち、同等ではない条件)がある場合に使用されてもよい。非等価結合について使用可能であることに加え、方法400はインデックスの使用を必要としない。一実施例では、方法400は、多数の次元に関して緻密化するために使用されてもよい。ステップ404の出力も区分化される。したがって、ステップ404の最後のアプリケーションの出力を使用し、第2の次元に関してステップ404を繰返すことは、第2の次元に関してデータを緻密化する。こうして、ステップ404は、多数の次元に関して緻密化するために任意の回数繰返されてもよい。
ソートマージ区分化外部結合
図5は、ソートマージ区分化外部結合と呼ばれ得るPARTITIONED OUTER JOINを行なう第3の方法である方法500のフローチャートである。各区分内のソートマージ結合は、以下に説明されるように行なわれる。ソートマージ結合はインデックスを必要とせず、また、等価結合を使用する。
ソートマージ区分化外部結合のステップ502で、ターゲットテーブル(たとえばSALESテーブル)が、その次元(たとえばprod_id、time_id)のすべてに関してソートされる。データが区分へと分割され、その各区分に、緻密化次元の次元値の各々についてその1つの次元値がもはや存在しないように、緻密化次元は最後にソートされる。他の次元はすべて、区分化次元になる。区分化次元のすべてのソーティングは、ターゲットテーブルを区分化する効果を有する。その場合、ターゲットテーブル(たとえばSALESテーブル)の各区分は、次元値の異なる組合せに対応している。言い換えれば、区分化次元値の一意的な各組合せについて、1つの区分が存在する。加えて、各区分は、区分化次元値の組合せを1つだけ有する。たとえば、SALESテーブルがtime_idの値を有する次元TIMESを有し、PRODUCTSが値prod_idを有し、REGIONが値regn_idを有すると仮定する。また、2つのprod_id値「1」および「2」、2つのregn_id値「1」および「2」、3つのtime_id値「8」、「9」、「10」のみが存在すると仮定する。その場合、三次元すべてにおいてソートした後では、4つの区分がある。タプル(prod_id,regn_id,time_id)を使用すると、1つの区分はタプル(1,1,8)、(1,1,9)および(1,1,10)を含む。第2の区分はタプル(1,2,8)、(1,2,9)および(1,2,10)を含む。第3の区分はタプル(2,1,8)、(2,1,9)および(2,1,10)を含む。最後に、第4の区分はタプル(2,2,8)、(2,2,9)および(2,2,10)を含む。
次にステップ504で、緻密化次元についての緻密化次元テーブル(たとえばTIMESテーブル)が、その次元値(たとえばtime_id)についてソートされる。ステップ506で、ターゲットテーブルの(たとえばSALESテーブルの)各区分内の各行が、ソートされた緻密化次元テーブル(たとえばTIMESテーブル)と個々に結合される。緻密化次元(たとえばTIMES)を含むソートされたターゲットテーブルの列は、ターゲットテーブルの行を次元テーブルに結合する際にキーとして使用されてもよく、それは結合キーと呼ばれてもよい。整合が見つからない場合、ダミー行が戻される。すべての次元がソートされたため、すべての次元値が順序付けられる。こうして、結合キーの連続する値を比較することにより、区分の端に到達したかどうかについて判断が下され得る。また、これに代えて、区分の端は、区分化次元の各々について1つの次元値を有する次元値組合せにおける変更を検出することによって検出されてもよい。一旦、区分の端に到達し、緻密化次元に対応するインデックスの端に到達すると、緻密化次元値についてのループは、次の区分について繰返される。ターゲットテーブルの個々の行を、緻密化されつつある次元へ結合することは、緻密化次元に対応するインデックスを有するループに「ifステートメント」か「ifブロック」を配置することによって行なわれてもよい。また、これに代えて、緻密化次元テーブル(たとえばTIMES次元テーブル)がソートされたため、ターゲットテーブル(たとえばSALESテーブル)の行に対する結合条件の各チェックの後で、カーソルが緻密化次元テーブルを介して緻密化次元テーブルの次の行へ進められてもよい。
ソートマージ区分化外部結合の一実施例では、結合キーインデックスについてのカーソルは、等価結合の同等性条件が満たされるたびに、すなわち、緻密化次元テーブルの次元キーが、ソートされたターゲットテーブルの結合キーと等しくなるたびに、次の行へ動かされる。インデックスを使用する一実施例では、結合キーについてのカーソルは、インデックスが結合キーと等しくなるたびに、次の行へ進められる。したがって、この実施例では、カーソルを、それが既に越えて通ってきた位置へと後退させる必要性がなくてもよい。しかしながら、代替的な実施例では、非等価結合が使用されてもよいが、カーソルを位置付けるためにアルゴリズムが含まれ、カーソルが、緻密化次元の2つの異なる値について同じ結合キー上に配置されるか、または後退されるようにする。
オプティマイザ
図6は、PARTITIONED OUTER JOINを実行可能なリレーショナルデータベース管理システムに含まれ得るオプティマイザの演算の方法600のフローチャートである。一実施例で
は、オプティマイザは、PARTITIONED OUTER JOINを実行するリレーショナルデータベース管理システムに含まれている。オプティマイザは、さまざまな異なる演算を行なうさまざまな方法の中から、テーブルの集合、および演算が行なわれつつあるステートメントについての各方法の計算コストに基づいて、決める。一実施例では、オプティマイザは、どの方法が最も効率的かに基づいて、PARTITIONED OUTER JOINを行なうための方法を決める。
たとえば、ステップ602で、オプティマイザはまず、ターゲットテーブルの次元にとって利用可能なインデックスがあるかどうかをチェックしてもよく、利用可能なインデックスを区分化次元または緻密化次元が持っていない場合、方法300は使用できず、方法600はステップ604へ進む。ステップ604で、非等価結合が存在するかどうか、判断が下される。非等価結合が存在する場合、方法500は使用できず、そのため方法600はステップ606へ進み、そこで、方法400は図4のテーブル分割方法を実施する。
ステップ604の説明に戻ると、非等価結合がない場合、方法600はステップ608へ進み、そこで、方法400と方法500のどちらがより効率的であると予想されるか、決定が下される。方法400がより効率的であると予想される場合、方法600はステップ606へ進む。方法500がより効率的であると予想される場合、方法はステップ610へ進み、そこで、方法500のソートマージ外部結合が実施される。
ステップ602の説明に戻ると、インデックスが存在する場合、3つの方法はすべて、依然として使用可能であり、方法はステップ612へ進む。ステップ612で(ステップ604と同様に)、非等価結合が存在するかどうか、判断が下される。非等価結合が存在する場合、方法500は使用できず、そのため方法600はステップ614へ進み、そこで、方法300、400、500のうちのどれがより効率的であると予想されるか、判断が下される。方法500がより効率的であると予想される場合、方法600はステップ610へ進む。方法400がより効率的であると予想される場合、方法600はステップ606へ進む。方法300がより効率的であると予想される場合、方法600はステップ616へ進み、そこで、方法300の入れ子ループ外部結合が実施される。
ステップ612の説明に戻ると、非等価結合が存在する場合、ソートマージ外部結合は使用できず、方法600はステップ618へ進む。ステップ618で、方法300と400のどちらがより効率的であると予想されるか、判断が下される。方法300がより効率的であると予想される場合、方法600はステップ616へ進み、そこで方法300が実施される。方法400がより効率的であると判断される場合、方法600はステップ620へ進み、そこで方法400が実施される。
一実施例では、オプティマイザは、方法300、400、および500のうちのいずれか1つ、または任意の組合せに加え、もしくはその代わりに、PARTITIONED OUTER JOINを行なう他の方法の中から選んでもよい。代替的な一実施例では、PARTITIONED OUTER JOINを行なう方法300、400または500のうちのいずれか1つ、もしくは、方法300、400または500のうちの2つだけがリレーショナルデータベースに含まれ、含まれたこの1つまたは2つの方法が適用できない場合には、PARTITIONED OUTER JOINは行なわれない。
区分化外部結合のための最適化および強化
JOINおよびOUTER JOINで通常使用される最適化は、PARTITIONED OUTER JOINででも使用可能である。たとえば、述語押込みおよび区分刈込みも、PARTITIONED OUTER JOINで使用されてもよい。述語押込みに関しては、区分化式全体にわたって定義された述語のみが、ビューのために押下げられるかまたは押上げられるべきである。言い換えれば、次元値の或る集合への出力を制限する条件を或る述語が課する場合、プログラムは、対象ではない
次元値に関する不必要な計算が行なわれないよう、初期計算を行ないながらその述語を適用する。特定されたポイントで述語を適用する代わりに、述語は、同じ結果を得るために行なわれる必要がある計算の量を最小限に抑えるかまたは少なくとも減少させる、プログラムの1つ以上のポイントで適用される。
たとえば、以下の問合せを仮定する。
Figure 2007534035
述語であるprod_id in (1,2,3)は、SALESテーブルの製品1、2、および3のみがTIMESテーブルと結合されるよう、SALESテーブルのテーブルスキャンにフィルタとして押込み可能である。したがって、SALESテーブルの他の製品に対しては、計算は行なわれない。
同様に、PARTITION刈込みについては、PARTITIONED OUTER JOINの区分化されたオペランドである内部問合せブロックを刈込むために、外部問合せブロックの述語が使用されてもよい。テーブルの一部または区分が計算の一部を行なうことに関連していない場合、計算はその区分については行なわれない。述語押込みの例は、刈込みの一例でもある。なぜなら、ターゲットテーブルのデータに対して何らかの操作を行なう前に、製品1、2、または3に関連していないテーブルの部分はすべて、検討中のデータから除去されたためである。
オプティマイザはまた、PARTITIONED OUTER JOINを用いてコストおよび基数を推定するために強化される。一実施例では、コストベースの最適化が、PARTITIONED OUTER JOINについてサポートされている。
区分化外部結合の並行評価
上述の区分化外部結合実行手法は、各PARTITIONED OUTER JOIN計算が1組のスレーブに任され、それらが各々、他のスレーブから独立して結合演算を行なうことができるようになっているという点で、スケーラブルである。この文脈では、スレーブとは、任意のエンティティであって、他のそのようなエンティティと並行して命令を処理できるものである。たとえば、スレーブは、別のプロセッサ、プロセスまたはスレッドであってもよい。異なるスレーブが独立して区分を処理することを容易にするために、JOINの緻密化次元テーブルはスレーブのすべてにブロードキャストされる。JOIN演算の区分化されたターゲットテーブルは、プロセッサおよび/またはスレーブ全体にわたって、ハッシュ区分化または範囲区分化されてもよい。
たとえば、コンピュータ装置が4つのプロセッサを有し、SALESテーブルが製品ID1〜6を有する6つの製品を有する場合、第1のプロセッサは、製品ID1および2に対応するSALESテーブルの区分を受取ってもよく、第2のプロセッサは、製品ID3および4に対応する区分のコピーを受取ってもよく、第3のプロセッサは、製品ID5に対応する製品テーブルの部分を受取ってもよく、第4のプロセッサは、製品ID6に対応するSALE
Sテーブルの部分を受取ってもよい。しかしながら、プロセッサ1〜6の各々は、TIMESテーブル全体を受取る。したがって、各スレーブおよび/またはプロセスは、区分化されたテーブルのその切片についてPARTITIONED OUTER JOIN演算を行なうために、それが必要とするターゲットテーブルの区分および次元テーブル全体へのアクセスを有する。第1のプロセッサはまず製品ID♯1の区分にOUTER JOINしてもよく、次に製品ID♯2の区分にOUTER JOINしてもよい。第1のプロセスの演算と並行して、第2のプロセッサはまず製品ID♯3の区分にOUTER JOINしてもよく、次にID♯4の区分にOUTER JOINしてもよい。同時に、第3のプロセッサは製品ID♯5区分にOUTER JOINしてもよい。また、並行して、第4のプロセッサは製品ID♯6区分にOUTER JOINしてもよい。
たとえば、以下のステートメントを考慮されたい。
Figure 2007534035
この場合、区分化されていない次元テーブル「TIMES」は、スレーブのすべてにブロードキャストされてもよく、区分化されたターゲットテーブル「SALES」は、区分化列(たとえばprod_id)に基づいてハッシュ区分化または範囲区分化されてもよい。言い換えれば、この例では、テーブルが区分化される各prod_idに対して、異なるスレーブが作用してもよい。各スレーブは、prod_idによって識別されるSALESテーブルのいくつかの区分およびTIMESテーブル全体へのアクセスを有する。各スレーブはしたがって、他のスレーブから独立して、PARTITIONED OUTER JOINのその部分を行なうことができる。区分化列上の区分化されたテーブルを区分化するために使用される区分化手法は、ハッシュ区分化または範囲区分化されてもよい。
代替的な実施例
PARTITIONED OUTER JOINの代わりに、緻密化のために適合された構文が使用されてもよい。たとえば、緻密化するための或る構文は、以下のシンタックスを有していてもよい。
Figure 2007534035
代替的な一実施例では、緻密化構文は以下のシンタックスを有していてもよい。
Figure 2007534035
上述のステートメントでは、table_referenceは、ターゲットテーブルへの参照であり、dimension_exprは、列、または、次元として使用される仮想列に対して評価を行なう式であり、仮想列は、テーブルの各行について1つの数を有する数の集合である。同様に、densifying_exprは、データが緻密化される次元または仮想次元である。一実施例では、dimension_exprは実際には、データを区分化するために使用される必要はないが、緻密化する際には非緻密化次元として使用される。言い換えれば、緻密化構文によって生成されたテーブルは、緻密化次元の各値と区分化次元の各別個の値との外積について1つの行を有する。大括弧および括弧によって示すように、同じ次元を有する任意の数のテーブルは、同じステートメントによって緻密化されてもよく、テーブルは、緻密化次元に加えて少なくとも1つの他の次元がある限り、任意の数の緻密化次元および任意の数の他の次元を有していてもよい。
一例として、SALESテーブルが次元値組合せ(1,1,1)および(1,2,1)についてタプル(regn_id, prod_id, time_id)のみを有し、TIMEテーブルがtime_id1およびtime_id2を含む場合を仮定する。この場合、DENSIFY (SALES) BY (time_id) USING (prod_id)は、次元値組合せ(1,1,1)、(1,2,1)、(1,1,2)および(1,2,2)についての行を有するSALESテーブルをもたらす。対照的に、DENSIFY (SALES, regn_id) BY (time_id)は、次元値組合せ(1,1,1)、(1,2,1)および(1,1,2)についての行を有するSALESテーブルをもたらす。
ハードウェア概要
図7は、この発明の一実施例が実施され得るコンピュータシステム700を示すブロック図である。この発明は、多くの異なるタイプのマシンで実施されてもよい。コンピュータシステム700はそのようなマシンのほんの一例である。コンピュータシステム700は、情報を通信するためのバス702または他の通信機構と、情報を処理するためにバス702と結合されたプロセッサ704とを含む。コンピュータシステム700はまた、プロセッサ704により実行されるべき命令および情報を記憶するためにバス702に結合された、ランダムアクセスメモリ(RAM)または他のダイナミック記憶装置といったメインメモリ706も含む。メインメモリ706は、プロセッサ704により実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム700はさらに、プロセッサ704用の命令およびスタティック情報を記憶するためにバス702に結合された読出専用メモリ(ROM)708または他のスタティック記憶装置を含む。磁気ディスクまたは光ディスクといった記憶装置710が、情報および命令を記憶するために提供され、バス702に結合されている。
コンピュータシステム700は、情報をコンピュータユーザに表示するためのブラウン管(CRT)などのディスプレイ712に、バス702を介して結合されていてもよい。英数字キーおよび他のキーを含む入力装置714が、情報およびコマンド選択をプロセッサ704に通信するためにバス702に結合されている。ユーザ入力装置の別の種類は、方向情報およびコマンド選択をプロセッサ704に通信するための、および、ディスプレイ712上のカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キーといったカーソル制御716である。この入力装置は通常、2つの軸、つまり第1の軸(たとえばx)および第2の軸(たとえばy)において2つの自由度を有しており、それによりこの装置は平面における場所を特定することができる。
この発明は、ここに説明された手法を実施するためのコンピュータシステム700の使用に関する。この発明の一実施例によれば、それらの手法は、プロセッサ704がメインメモリ706に含まれる1つ以上の命令の1つ以上のシーケンスを実行するのに応じて、コンピュータシステム700によって実行される。そのような命令は、記憶装置710な
どの別のコンピュータ読み取り可能な媒体からメインメモリ706に読込まれてもよい。メインメモリ706に含まれる命令のシーケンスの実行により、プロセッサ704は、ここに説明された処理ステップを行なうようになる。代替的な実施例では、この発明を実施するために、ソフトウェア命令の代わりに、またはソフトウェア命令と組合わせて、配線接続回路が使用されてもよい。このため、この発明の実施例は、ハードウェア回路とソフトウェアとのどの特定の組合せにも限定されない。
ここで使用されているような用語「コンピュータ読み取り可能な媒体」とは、プロセッサ704に命令を実行用に提供することに関与するあらゆる媒体を指す。コンピュータシステム700はマシンのほんの一例であるため、コンピュータ読み取り可能な媒体は「マシン読み取り可能な媒体」のほんの一例である。そのような媒体は、不揮発性媒体、揮発性媒体、および通信媒体を含むもののそれらに限定されない多くの形態を取り得る。不揮発性媒体はたとえば、記憶装置710などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ706などのダイナミックメモリを含む。通信媒体は、バス702を構成する配線を含む、同軸ケーブル、銅線および光ファイバを含む。通信媒体はまた、電波および赤外線データ通信中に発生するものといった音波または光波の形も取り得る。
コンピュータ読み取り可能な媒体の一般的な形態は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁気媒体、CD−ROM、任意の他の光媒体、パンチカード、紙テープ、孔のパターンを有する任意の他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROM、任意の他のメモリチップまたはカートリッジ、以下に説明するような搬送波、または、コンピュータがそこから読み取り可能な任意の他の媒体を含む。
コンピュータ読み取り可能な媒体のさまざまな形態は、プロセッサ704への1つ以上の命令の1つ以上のシーケンスを実行用に保持することに関与していてもよい。たとえば、命令はまず、遠隔コンピュータの磁気ディスク上に保持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、電話回線を通してモデムを用いて命令を送信することができる。コンピュータシステム700にとってローカルなモデムは、電話回線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器は、赤外線信号で搬送されたデータを受信でき、適切な回路が、データをバス702上に配置できる。バス702はデータをメインメモリ706に搬送し、そこからプロセッサ704が命令を検索して実行する。メインメモリ706によって受信された命令は、プロセッサ704による実行の前または後のいずれかで、記憶装置710上に随意に記憶されてもよい。たとえば、或る区分についての構文を実施するための命令、または、データを緻密化するための命令が、メインメモリ706に記憶されてもよく、および/または、ここに説明されたコンピュータ読み取り可能な媒体のいずれかによって搬送されてもよい。
コンピュータシステム700はまた、バス702に結合された通信インターフェイス718も含む。通信インターフェイス718は、ローカルネットワーク722に接続されたネットワークリンク720に双方向データ通信結合を提供する。たとえば、通信インターフェイス718は、データ通信接続を対応する種類の電話回線に提供するデジタル相互サービス網(ISDN)カード、またはモデムであってもよい。別の例として、通信インターフェイス718は、データ通信接続を互換性があるLANに提供するローカルエリアネットワーク(LAN)カードであってもよい。無線リンクも実現され得る。任意のそのような実現化例では、通信インターフェイス718は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
ネットワークリンク720は通常、1つ以上のネットワークを介して、他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク720は、ローカルネットワーク722を介して、ホストコンピュータ724に、またはインターネットサービスプロバイダ(ISP)726により運営されるデータ装置に、接続を提供してもよい。ISP726は次に、現在一般に「インターネット」728と呼ばれている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク722およびインターネット728は双方とも、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を使用する。コンピュータシステム700へ、またはコンピュータシステム700からデジタルデータを搬送する、さまざまなネットワークを通る信号、ネットワークリンク720上の信号、および通信インターフェイス718を通る信号は、情報を運ぶ搬送波の例示的な形態である。
コンピュータシステム700は、ネットワーク、ネットワークリンク720および通信インターフェイス718を介して、メッセージを送信し、プログラムコードを含むデータを受信する。インターネットの例では、サーバ730は、アプリケーションプログラム用の要求されたコードを、インターネット728、ISP726、ローカルネットワーク722、および通信インターフェイス718を介して送信してもよい。
受信されたコードは、それが受信された際にプロセッサ704により実行されてもよく、および/または、後の実行用に記憶装置710または他の不揮発性ストレージに記憶されてもよい。このように、コンピュータシステム700は、搬送波の形をしたアプリケーションコードを取得し得る。
前述の明細書では、この発明を、その特定の実施例を参照して説明してきた。しかしながら、この発明のより幅広い精神および範囲を逸脱することなく、様々な修正および変更がそれに行なわれてもよいことは、明らかである。したがって、明細書および図面は、限定的な意味というよりもむしろ例示的な意味において見なされるべきである。
緻密化を行なうための方法100を示すフローチャートである。 区分化されたテーブルのシンタックスのブロック図である。 図2Cの外部結合タイプのシンタックスのブロック図である。 この発明の一実施例に従った、図2Aの区分化されたテーブルを用いた拡張JOINシンタックスのブロック図である。 図2CのPARTITIONED OUTER JOINを実施するための方法の一例を示すフローチャートである。 図2CのPARTITIONED OUTER JOINを実施するための方法の別の例を示すフローチャートである。 図2CのPARTITIONED OUTER JOINを実施するための方法の別の例を示すフローチャートである。 図2CのPARTITIONED OUTER JOINを実行可能なリレーショナルデータベース管理システムに含まれ得るオプティマイザの演算の方法のフローチャートである。 この発明の一実施例が実施され得るコンピュータシステム700を示すブロック図である。

Claims (39)

  1. マシンにより実施される方法であって、
    複数の次元に関連付けられたデータの第1の集合に基づいて、複数の次元のうちの第1の次元に関してデータの第1の集合よりも密なデータの第2の集合を生成するステップを含み、
    データの第1の集合はデータの複数の部分集合を含み、
    生成するステップは、データの部分集合の各々とデータの第3の集合との間で外部結合を行なうことを含む、方法。
  2. データの第1の集合は、次元値組合せに関連付けられた行を含み、次元値組合せは、複数の次元から選択された次元値の組合せであり、
    データの第2の集合は、データの第1の集合の行に対応する次元値組合せについて対応する行を含み、
    対応する行は次元値組合せに関連付けられており、
    生成するステップは、
    次元値組合せの集合について、或る対応する行がデータの第2の集合に存在するかどうかをチェックするステップを含み、次元値組合せの集合は1つの次元に関して密であり、生成するステップはさらに、
    対応する行が存在しない場合、行を作成するステップを含む、請求項1に記載の方法。
  3. チェックするステップは、次元値組合せの集合の各次元値組合せについて1つのループを行なう入れ子ループ命令の集合内で行なわれる、請求項2に記載の方法。
  4. データの部分集合の各々はデータの単一の行である、請求項1に記載の方法。
  5. データの部分集合の各々はデータの第1の集合の1区分であり、複数の次元のうちの1つの次元から選択された単一の次元値に関連付けられている、請求項1に記載の方法。
  6. 生成するステップは、データ操作言語ステートメントの検出に応答して行なわれる、請求項1に記載の方法。
  7. 生成するステップは、第1のプロセッサを用いて第1の部分集合に対して外部結合を行なうステップと、第1のプロセッサとは異なる第2のプロセッサを用いて第2の部分集合に対して外部結合を行なうステップとを含む、請求項1に記載の方法。
  8. 外部結合は右外部結合である、請求項7に記載の方法。
  9. 外部結合は左外部結合である、請求項8に記載の方法。
  10. 生成するステップはSQLエンジンによって行なわれる、請求項1に記載の方法。
  11. 生成するステップは、データの第1の集合を区分化するための区分化キーを示す式を受取るステップを含む、請求項1に記載の方法。
  12. 外部結合は、ブール式を含む結合条件に関連付けられている、請求項1に記載の方法。
  13. データの前記第1の集合は、行の第1の集合を含み、
    前記外部結合は、行の前記第1の集合と行の第2の集合との間でのものであり、生成するステップは、行の前記第1の集合の部分集合、および行の前記第2の集合のすべてを、
    複数のプロセスの各々に送るステップを含む、請求項1に記載の方法。
  14. 生成するステップは、
    複数の次元のうちの少なくとも1つの次元を特定するステップと、
    特定された次元に関してデータの第1の集合をハッシュ区分化するステップとを含む、請求項13に記載の方法。
  15. データの第2の集合にどの次元値組合せが含まれるかを限定する条件を含む構文を検出するステップと、
    他の構文を検出することに応答して、データの第2の集合が限定されていた次元値組合せに関してのみ演算を行なうステップとをさらに含む、請求項1に記載の方法。
  16. データの第1の集合は複数の次元に関連付けられ、第2の集合は複数の次元に関連付けられ、データの第2の集合は、複数の次元のうちの1つに関してより密である、請求項1に記載の方法。
  17. マシンにより実施される方法であって、
    複数の次元に関連付けられたデータの第1の集合に基づいて、複数の次元のうちの第1の次元に関してデータの第1の集合よりも密なデータの第2の集合を生成するステップを含み、
    生成するステップは、複数の次元のうちの第2の次元の別個の値についてデータの第1の集合のソートの組合せを行なうことなく行なわれ、
    前記方法はさらに、
    見つかった別個の値と第1の次元の次元値の集合との外積を行なうことにより、行の第1の集合を生成するステップと、
    行の第1の集合に行が存在しない次元値の集合の次元値に対応する行を、行の前記第1の集合に追加するステップとを含む、方法。
  18. 生成するステップは、データの第1の集合のソートを行なうことなく行なわれ、データの第1の集合のソートは、複数の次元のうちの第2の次元の別個の値を見つけるために使用される、請求項17に記載の、マシンにより実施される方法。
  19. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項1に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  20. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項2に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  21. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項3に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  22. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項4に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  23. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項5に記載の方法を1つ以上のプロセッサに行
    なわせる、マシン読み取り可能な媒体。
  24. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項6に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  25. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項7に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  26. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項8に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  27. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項9に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  28. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項10に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  29. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項11に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  30. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項12に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  31. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項13に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  32. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項14に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  33. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項15に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  34. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項16に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  35. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項17に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  36. 命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体であって、1つ以上のプロセッサによって実行される際、請求項18に記載の方法を1つ以上のプロセッサに行なわせる、マシン読み取り可能な媒体。
  37. システムであって、
    1つ以上のプロセッサと、
    命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、1つ以上のプロセッサによって実行される際、請求項1に記載の方法を1つ以上のプロセッサに行なわせる、システム。
  38. システムであって、
    1つ以上のプロセッサと、
    命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、1つ以上のプロセッサによって実行される際、請求項17に記載の方法を1つ以上のプロセッサに行なわせる、システム。
  39. システムであって、
    1つ以上のプロセッサと、
    命令の1つ以上のシーケンスを保持するマシン読み取り可能な媒体とを含み、マシン読み取り可能な媒体は、1つ以上のプロセッサによって実行される際、請求項18に記載の方法を1つ以上のプロセッサに行なわせる、システム。
JP2006524117A 2003-08-22 2004-08-19 リレーショナルデータベースシステムでデータを緻密化するためのdmlステートメント Active JP4747094B2 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US49711103P 2003-08-22 2003-08-22
US60/497,111 2003-08-22
US49907803P 2003-08-28 2003-08-28
US60/499,078 2003-08-28
US10/796,217 2004-03-08
US10/796,217 US7356542B2 (en) 2003-08-22 2004-03-08 DML statements for densifying data
PCT/US2004/027406 WO2005020105A1 (en) 2003-08-22 2004-08-19 Dml statements for densifying data in a relational database system

Publications (3)

Publication Number Publication Date
JP2007534035A true JP2007534035A (ja) 2007-11-22
JP2007534035A5 JP2007534035A5 (ja) 2008-01-10
JP4747094B2 JP4747094B2 (ja) 2011-08-10

Family

ID=34198989

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006524117A Active JP4747094B2 (ja) 2003-08-22 2004-08-19 リレーショナルデータベースシステムでデータを緻密化するためのdmlステートメント

Country Status (6)

Country Link
US (1) US7356542B2 (ja)
EP (1) EP1658572A1 (ja)
JP (1) JP4747094B2 (ja)
AU (1) AU2004267850B2 (ja)
CA (1) CA2534788C (ja)
WO (1) WO2005020105A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7356542B2 (en) 2003-08-22 2008-04-08 Oracle International Corporation DML statements for densifying data
US7539667B2 (en) * 2004-11-05 2009-05-26 International Business Machines Corporation Method, system and program for executing a query having a union operator
US8645313B1 (en) * 2005-05-27 2014-02-04 Microstrategy, Inc. Systems and methods for enhanced SQL indices for duplicate row entries
US20070094233A1 (en) * 2005-10-24 2007-04-26 Wolfgang Otter Translating time-independent data using database operations
US8027969B2 (en) * 2005-12-29 2011-09-27 Sap Ag Efficient calculation of sets of distinct results in an information retrieval service
US20090063527A1 (en) * 2007-08-31 2009-03-05 International Business Machines Corporation Processing of database statements with join predicates on range-partitioned tables
IL195956A0 (en) 2008-12-15 2009-09-01 Hyperroll Israel Ltd Automatic data store architecture detection
IL197961A0 (en) * 2009-04-05 2009-12-24 Guy Shaked Methods for effective processing of time series
US8370316B2 (en) 2010-07-12 2013-02-05 Sap Ag Hash-join in parallel computation environments
US8880503B2 (en) * 2011-06-21 2014-11-04 Microsoft Corporation Value-based positioning for outer join queries
US8468150B2 (en) 2011-10-31 2013-06-18 International Business Machines Corporation Accommodating gaps in database index scans
US8996544B2 (en) * 2012-09-28 2015-03-31 Oracle International Corporation Pruning disk blocks of a clustered table in a relational database management system
US9514187B2 (en) 2012-09-28 2016-12-06 Oracle International Corporation Techniques for using zone map information for post index access pruning
US9430550B2 (en) 2012-09-28 2016-08-30 Oracle International Corporation Clustering a table in a relational database management system
US9275111B2 (en) 2013-03-15 2016-03-01 International Business Machines Corporation Minimizing result set size when converting from asymmetric to symmetric requests
US10642837B2 (en) 2013-03-15 2020-05-05 Oracle International Corporation Relocating derived cache during data rebalance to maintain application performance
US9892158B2 (en) * 2014-01-31 2018-02-13 International Business Machines Corporation Dynamically adjust duplicate skipping method for increased performance
US9852184B2 (en) * 2014-11-03 2017-12-26 Sap Se Partition-aware distributed execution of window operator
US10387395B2 (en) 2014-11-03 2019-08-20 Sap Se Parallelized execution of window operator
US10157193B2 (en) 2016-03-03 2018-12-18 International Business Machines Corporation Switching between a non-partitioned hash join and a partitioned hash join based on an amount of available memory
US10776349B2 (en) * 2017-01-31 2020-09-15 Salesforce.Com, Inc. Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language
US10803062B2 (en) * 2017-01-31 2020-10-13 Salesforce.Com, Inc. Systems, methods, and apparatuses for implementing a by partition command term within a multi-tenant aware structured query language
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US11954605B2 (en) * 2020-09-25 2024-04-09 Sap Se Systems and methods for intelligent labeling of instance data clusters based on knowledge graph

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH077422B2 (ja) 1991-08-23 1995-01-30 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ処理データベース・システムにおけるジョインの実行方法及びシステム
US5423035A (en) * 1992-12-23 1995-06-06 Hughes Aircraft Company Method for evaluating relational database queries with automatic indexing and ordering of join components
US6073134A (en) * 1997-05-29 2000-06-06 Oracle Corporation Method article of manufacture, and apparatus for generating a multi-dimensional record management index
US5905985A (en) * 1997-06-30 1999-05-18 International Business Machines Corporation Relational database modifications based on multi-dimensional database modifications
US6112198A (en) 1997-06-30 2000-08-29 International Business Machines Corporation Optimization of data repartitioning during parallel query optimization
US6298342B1 (en) * 1998-03-16 2001-10-02 Microsoft Corporation Electronic database operations for perspective transformations on relational tables using pivot and unpivot columns
US6625593B1 (en) * 1998-06-29 2003-09-23 International Business Machines Corporation Parallel query optimization strategies for replicated and partitioned tables
US6397214B1 (en) 1998-11-03 2002-05-28 Computer Associates Think, Inc. Method and apparatus for instantiating records with missing data
US5991754A (en) * 1998-12-28 1999-11-23 Oracle Corporation Rewriting a query in terms of a summary based on aggregate computability and canonical format, and when a dimension table is on the child side of an outer join
US6282544B1 (en) * 1999-05-24 2001-08-28 Computer Associates Think, Inc. Method and apparatus for populating multiple data marts in a single aggregation process
US6397204B1 (en) * 1999-06-25 2002-05-28 International Business Machines Corporation Method, system, and program for determining the join ordering of tables in a join query
US6446063B1 (en) * 1999-06-25 2002-09-03 International Business Machines Corporation Method, system, and program for performing a join operation on a multi column table and satellite tables
US6345272B1 (en) * 1999-07-27 2002-02-05 Oracle Corporation Rewriting queries to access materialized views that group along an ordered dimension
US6665663B2 (en) * 2001-03-15 2003-12-16 International Business Machines Corporation Outerjoin and antijoin reordering using extended eligibility lists
US6606621B2 (en) * 2001-05-30 2003-08-12 Oracle International Corp. Methods and apparatus for aggregating sparse data
US7356542B2 (en) 2003-08-22 2008-04-08 Oracle International Corporation DML statements for densifying data

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN7010000553, WITKOWSIKI, "Spreadsheets in RDBMS for OLAP", PROCEEDINGS OF THE ACM SIGMOD 2003 CONFERENCE, 20030609, pp.52−63, US *

Also Published As

Publication number Publication date
JP4747094B2 (ja) 2011-08-10
CA2534788A1 (en) 2005-03-03
AU2004267850B2 (en) 2010-04-08
US7356542B2 (en) 2008-04-08
US20050044102A1 (en) 2005-02-24
WO2005020105A1 (en) 2005-03-03
AU2004267850A1 (en) 2005-03-03
EP1658572A1 (en) 2006-05-24
CA2534788C (en) 2009-12-08

Similar Documents

Publication Publication Date Title
JP4747094B2 (ja) リレーショナルデータベースシステムでデータを緻密化するためのdmlステートメント
US10572484B2 (en) Duplicate reduction or elimination with hash join operations
EP2901313B1 (en) Pruning disk blocks of a clustered table in a relational database management system
US9390115B2 (en) Tables with unlimited number of sparse columns and techniques for an efficient implementation
US7246108B2 (en) Reusing optimized query blocks in query processing
US9430550B2 (en) Clustering a table in a relational database management system
US8332389B2 (en) Join order for a database query
US5557791A (en) Outer join operations using responsibility regions assigned to inner tables in a relational database
US6792420B2 (en) Method, system, and program for optimizing the processing of queries involving set operators
US7814042B2 (en) Selecting candidate queries
US9740718B2 (en) Aggregating dimensional data using dense containers
JP3640346B2 (ja) データベース管理システムにおける集合述部および検索
US9836519B2 (en) Densely grouping dimensional data
CA2327167C (en) Method and system for composing a query for a database and traversing the database
CN111367954A (zh) 数据查询处理方法、装置及系统、计算机可读存储介质
US20060161525A1 (en) Method and system for supporting structured aggregation operations on semi-structured data
US6253197B1 (en) System and method for hash loops join of data using outer join and early-out join
US7010539B1 (en) System and method for schema method
Wi et al. Towards multi-way join aware optimizer in SAP HANA
Schneider et al. SimDataMapper: An Architectural Pattern to Integrate Declarative Similarity Matching into Database Applications.
Bertino et al. Towards a Language for Pattern Manipulation and Querying.
CN115563148A (zh) 数据库查询方法和装置
Sciore et al. Materialization and Sorting
Gupta et al. Data densification in a relational database system

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070817

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070817

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100302

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100527

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100603

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100802

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110322

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110330

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110510

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110516

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140520

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4747094

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250