この付録では、アナリティック・ワークスペースから多次元データを抽出して2次元のリレーショナル表の形式で表示できる次のSQLファンクションについて説明します。
OLAP_TABLE
は、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLE
によって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返すSQLファンクションです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLE
ファンクション・コールを指定できます。
OLAP_TABLE
は、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT
文のWHERE
句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。
OLAP_TABLE
では、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。
制限マップでのディメンション階層のマッピングをサポートするためには、アナリティック・ワークスペース内で次のオブジェクトが事前定義されている必要があります。
親リレーション: 階層内の各ディメンション・メンバーの親を識別します。詳細は、「parentrelリレーション」を参照してください。
階層ディメンション: ディメンションの階層を表します。詳細は、「hierlistディメンション」を参照してください。
階層内変数または値セット: 階層の各レベルに属するディメンション・メンバーを表します。詳細は、「inhier値セットまたは変数」を参照してください。
グルーピングID変数: 各ディメンション・メンバーの階層内の深さを識別します。詳細は、「gidrelリレーション」を参照してください。
ファミリ・リレーション: 階層内の各ディメンション・メンバーの完全な親子関係を表します。詳細は、「familyrelリレーション」を参照してください。
レベル・ディメンション: ディメンションのレベルを表します。詳細は、「levellistディメンション」を参照してください。
OLAP_TABLE
によって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。
ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。
CREATE TYPE object_name AS OBJECT ( attribute1 datatype, attribute2 datatype, attributen datatype);
表型はオブジェクト型の集合で、この集合は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。
CREATE TYPE table_name AS TABLE OF object_name;
OLAP_TABLE
では、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。
関連項目:
|
オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLE
をコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。
例A-1「事前定義されたADTを使用してビューを作成するためのテンプレート」は、事前定義されたADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。
例A-1 事前定義されたADTを使用してビューを作成するためのテンプレート
SET ECHO ON SET SERVEROUT ON DROP TYPE table_obj; DROP TYPE row_obj; CREATE TYPE row_obj AS OBJECT ( column_first datatype, column_next datatype, column_n datatype); / CREATE TYPE table_obj AS TABLE OF row_obj; / CREATE OR REPLACE VIEW view_name AS SELECT column_first, column_next, column_n FROM TABLE(OLAP_TABLE( 'analytic_workspace', 'table_obj', 'olap_command', 'limit_map')); / COMMIT; / GRANT SELECT ON view_name TO PUBLIC;
例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」では、OLAP_TABLE
と事前定義された表型を使用して、MYAW_AW
スキーマ内のMYAW
というアナリティック・ワークスぺースのTIME
ディメンションのリレーショナル・ビューを作成します。
OLAP_TABLE
コールの1番目のパラメータはアナリティック・ワークスペースの名前です。2番目は事前定義された表型の名前です。4番目は、ワークスペース・ディメンションと事前定義された表型の列とのマッピングを指定する制限マップです。3番目のパラメータは指定されていません。
例A-2 事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー
CREATE TYPE time_cal_row AS OBJECT ( time_id varchar2(32), cal_short_label varchar2(32), cal_end_date date, cal_timespan number(6)); CREATE TYPE time_cal_table AS TABLE OF time_cal_row; CREATE OR REPLACE VIEW time_cal_view AS SELECT time_id, cal_short_label, cal_end_date, cal_timespan FROM TABLE(OLAP_TABLE( 'myaw_aw.myaw duration session', 'time_cal_table', '', 'DIMENSION time_id from time with HIERARCHY time_parentrel INHIERARCHY time_inhier ATTRIBUTE cal_short_label from time_short_description ATTRIBUTE cal_end_date from time_end_date ATTRIBUTE cal_timespan from time_time_span'));
表型の名前が引数として指定されていない場合、OLAP_TABLE
は、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT
文をコールするコンテキスト内で、実行時にしか使用できません。
例A-3「自動ADTを使用してビューを作成するためのテンプレート」は、自動ADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。
例A-3 自動ADTを使用してビューを作成するためのテンプレート
SET ECHO ON SET SERVEROUT ON CREATE OR REPLACE VIEW view_name AS SELECT column_first, column_next, column_n FROM TABLE(OLAP_TABLE( 'analytic_workspace', '', 'olap_command', 'limit_map')); / COMMIT; / GRANT SELECT ON view_name TO PUBLIC;
例A-4「自動ADTを使用するTIMEディメンションのビュー」では例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS
句を使用してターゲット列のデータ型を指定しています。
例A-4 自動ADTを使用するTIMEディメンションのビュー
CREATE OR REPLACE VIEW time_cal_view AS SELECT time_id, cal_short_label, cal_end_date, cal_timespan FROM TABLE(OLAP_TABLE( 'myaw_aw.myaw duration session', null, null, 'DIMENSION time_id AS varchar2(32) FROM time WITH HIERARCHY time_parentrel INHIERARCHY time_inhier ATTRIBUTE cal_short_label AS VARCHAR2(32) from time_short_description ATTRIBUTE cal_end_date AS DATE from time_end_date ATTRIBUTE cal_timespan AS NUMBER(6) from time_time_span'));
ユーザーが制限マップのAS
句でデータ型を指定しなかった場合、OLAP_TABLE
がADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。OLAP_TABLE
で使用されるデフォルトのデータ型変換については、表A-1「デフォルトのデータ型変換」を参照してください。
OLAP_TABLE
では、アナリティック・ワークスペースの多次元データを表形式で表すために制限マップを使用します。制限マップによって、論理表の列が特定されます。OLAP_EXPRESSION
ファンクションを指定するか、または問合せのSELECT構文のリストにブール・ファンクション、テキスト・ファンクション、日付ファンクションのいずれかを指定することによって、計算された列をリレーショナル・ビューに追加できます。SELECT構文のリストにいずれかのファンクションを指定した場合は、そのファンクションの結果に対応する追加の列がOLAP_TABLE
によって生成されます。
これらの式のいずれかを使用する前に、OLAP_TABLE
で使用される制限マップにROW2CELL
句を指定して、OLAP単一行ファンクションによって使用される情報を移入する
RAW
列を指定する必要があります。
OLAP DMLコマンドは、SELECT FROM OLAP_TABLE文内で使用できます。詳細は次の項で説明します。
一般に、SQLファンクションは、問い合された表またはビューのすべての行について単独の結果行を返す単一行ファンクションです。Oracleでは、事前定義された複数のSQL単一行ファンクションをサポートしており、たとえば、数値データを返すCOS
、LOG
、ROUND
、文字データを返すUPPER
やLOWER
などがあります。
SELECT FROM OLAP_TABLE
文のコンテキストには、OLAP DMLファンクションが単一行ファンクションとして機能するようにOLAP DMLファンクションをラップするための、4つのSQLファンクションがあります。これらのファンクションは、それぞれデータ型が異なる4種類のOLAP DML式の結果を戻しますが、具体的には、Oracle OLAPの数式に使用するOLAP_EXPRESSION、Oracle OLAPのブール式に使用するOLAP_EXPRESSION_BOOL、Oracle OLAPの日時式に使用するOLAP_EXPRESSION_DATE、Oracle OLAPのテキスト式に使用するOLAP_EXPRESSION_TEXTです。これらの各SQLファンクションの引数の1つが、OLAP DMLファンクションです。
OLAP_EXPRESSIONファンクションおよびこれに類するファンクションは、他のOracle単一行ファンクションと同じ方法で(特にSELECT構文のリスト内や、WHERE
句およびORDER BY
句内で)指定できます。
OLAP_TABLE
の実行中にアナリティック・ワークスペースを即時に変更するためのメカニズムは複数あります。
OLAP_CONDITION
SQLファンクションを使用すると、SELECT FROM OLAP_TABLE
文のコンテキスト内でアナリティック・ワークスペースを変更できます。OLAP_CONDITION
は、(特にWHERE
句で)他のOracleファンクションと同じように指定できます。OLAP_CONDITION
を使用して、オプションを設定したり、LIMIT
コマンドを実行したり、OLAPのモデルや予測を実行したり、プログラムを実行したりできます。ワークスペースに対する変更は、一時的なものにすることも、問合せの完了時にセッションに残しておくこともできます。
OLAP_CONDITION
以外にも、たとえば、制限マップでのPREDMLCMD
句やPOSTDMLCMD
句、olap_commandパラメータなどのOLAP_TABLE
ファンクション自体によってサポートされている構文が使用できます。OLAP_CONDITION
はOLAP_TABLE
内に埋め込まれていないため移植が可能で、様々な入力ポイントで適用できるので汎用性があります。
OLAP_TABLE
は、問合せの結果セットを生成するLIMIT
コマンドの実行前に、制限マップ内のディメンションのステータスを保存します。データがフェッチされた後、OLAP_TABLE
はディメンションのステータスをリストアします。ディメンションのステータスが保存される前にOLAP DMLコマンドが実行されるようにするには、制限マップでPREDMLCMD
句を指定します。PREDMLCMD
句による変更は、OLAP_TABLE
の実行後もワークスペース内に保持されます(POSTDMLCMD
句で変更を無効にする場合を除く)。詳細は、limit_mapを参照してください。
OLAP_TABLE
のolap_commandパラメータには、結果セットがフェッチされる直前に実行されるOLAP DMLコマンドを指定します。一部の環境では、olap_commandパラメータにOLAP DML FETCHコマンドが含まれていることがあり、その場合はこのコマンドによってフェッチが管理されます。olap_commandパラメータによって設定された制限は、OLAP_TABLE
の実行中のみ有効です。詳細は、olap_commandを参照してください。