ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

B DBMS_AW PL/SQLパッケージ

DBMS_AW PL/SQLパッケージには、アナリティック・ワークスペースを操作するためのプロシージャおよびファンクションが含まれています。

この付録は、次の項目に分かれています。

アナリティック・ワークスペースの管理

Oracle OLAPの操作を行うには、セッションにアナリティック・ワークスペースをアタッチする必要があります。DBMS_AW PL/SQLパッケージがインストールされている場合、SQL*Plusからこのタスクを実行できます。たとえば、次のコマンドを使用して、読取り専用アクセスでアナリティック・ワークスペースをアタッチすることが可能です。

EXECUTE dbms_aw.aw_attach ('awname');

各アナリティック・ワークスペースは、アナリティック・ワークスペースのリストに関連付けられています。読取り専用ワークスペースEXPRESS.AW(OLAPエンジン・コードを含む)は常に、このリストで最後にアタッチされます。ワークスペースを作成すると、デフォルトでこのリストの最初にアタッチされます。

FIRSTLASTなどのキーワードを使用して、リスト内のアナリティック・ワークスペースの位置を変更できます。たとえば、次のコマンドは、MYAW.TEST2というアナリティック・ワークスペースをリストの2番目の位置から1番目の位置に移動する方法を示しています。

EXECUTE dbms_aw.execute ('AW LIST');

TEST1 R/O UNCHANGED GLOBAL.TEST1 
TEST2 R/O UNCHANGED GLOBAL.TEST2 
EXPRESS R/O UNCHANGED SYS.EXPRESS 

EXECUTE dbms_aw.aw_attach ('test2', FALSE, FALSE, 'FIRST');
EXECUTE dbms_aw.execute ('AW LIST');

TEST2 R/O UNCHANGED GLOBAL.TEST2 
TEST1 R/O UNCHANGED GLOBAL.TEST1 
EXPRESS R/O UNCHANGED SYS.EXPRESS 

SQL*Plusから、ワークスペースの名前を変更したり、ワークスペースのコピーを作成したりできます。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチした場合、そのワークスペースを更新して、ワークスペースが格納されている永続データベース表に変更内容を保存できます。ワークスペースの変更内容をデータベース内に保存するには、SQL COMMITを実行する必要があります。

次のコマンドでは、ワークスペースtest2のオブジェクトおよびデータのコピーをtest3という新しいワークスペースに作成し、test3を更新して、変更内容をデータベースにコミットしています。

EXECUTE dbms_aw.aw_copy('test2', 'test3');
EXECUTE dbms_aw.aw_update('test3');
COMMIT;

SQL文へのOLAP DMLの埋込み

DBMS_AWパッケージにより、アナリティック・ワークスペース内であらゆるOLAP処理を実行できます。レガシー・ワークスペース、リレーショナル表またはフラット・ファイルから、データのインポートが可能です。OLAPオブジェクトの定義や、複雑な計算の実行もできます。


注意:

DBMS_AWパッケージを使用してアナリティック・ワークスペースを一から作成する場合、特定の構造のアナリティック・ワークスペースを必要とするOLAPユーティリティ(Analytic Workspace ManagerやDBMS_AW集計アドバイザなど)を使用できないことがあります。

OLAP DMLコマンドの実行方法

DBMS_AWパッケージには、非定型のOLAP DMLコマンドを実行するためのプロシージャが含まれています。EXECUTEプロシージャかINTERP_SILENTプロシージャ、またはINTERPファンクションかINTERCLOBファンクションを使用して、単一のOLAP DMLコマンドまたはセミコロンで区切られた一連のコマンドを実行できます。

使用するプロシージャは、出力の送信方法、および入力バッファと出力バッファのサイズによって異なります。たとえば、EXECUTEプロシージャは出力をプリンタ・バッファに送信し、INTERP_SILENTプロシージャは出力を抑止、INTERPファンクションはセッション・ログを返します。

また、DBMS_AWパッケージには、OLAP式を評価するためのファンクションも含まれています。EVAL_TEXTファンクションはテキスト式の結果を返し、EVAL_NUMBERは数式の結果を返します。


注意:

DBMS_AWEVAL_NUMBERファンクションおよびEVAL_TEXTファンクションを、SQLのOLAP_EXPRESSIONファンクションと混同しないでください。詳細は、「OLAP_EXPRESSION」を参照してください。

OLAP DMLコマンドで引用符を使用する場合のガイドライン

SQLプロセッサは、処理する埋込みOLAP DMLコマンドをOracle OLAPへ送信する前に、そのコマンドの全体または一部を評価します。DBMS_AWプロシージャのolap-commandsパラメータでOLAP DMLコマンドの書式を設定する際には、次のガイドラインに従ってください。

  • OLAP DMLコマンドで通常であれば一重引用符(')を使用する箇所は必ず、2つの一重引用符('')を使用します。SQLプロセッサにより、OLAP DMLコマンドをOracle OLAPに送信する前に、一重引用符が1つ削除されます。

  • OLAP DMLでは、二重引用符(")はコメントの開始を示します。

スパーシティ・アドバイザの使用

データは、稠密、スパース、非常にスパースのいずれであるかに応じて、様々な形式でアナリティック・ワークスペースに格納できます。スパース性アドバイザはDBMS_AWのサブプログラムのグループであり、これを使用して、リレーショナル・ソース・データを分析し、そのデータをアナリティック・ワークスペースに格納する際の推奨事項を取得できます。

アナリティック・ワークスペースにおけるデータ格納オプション

アナリティック・ワークスペースでは、ディメンション・メンバーの組合せごとに1つのセルを割り当てる多次元形式でデータを分析および操作します。セルには、データ値またはNA(NULL)を含めることができます。セルのサイズは、その内容に関係なく、データ型によって定義されますが、たとえば、DECIMAL変数の各セルは8バイトです。

変数は、稠密(データ値を持つセルを30%以上含む)またはスパース(データ値が30%未満)のいずれかとなります。ほとんどの変数はスパースであり、その多くが非常にスパースです。

データは分析用の多次元形式で保存することもできますが、他の方法を使用してスパースな変数を格納することにより、ディスク領域を効率よく使用してパフォーマンスを向上させることが可能です。スパースなデータは、コンポジット・ディメンションで定義される変数に格納できます。コンポジットは、そのメンバーとして、データの存在するディメンション値の組合せ(タプルと呼ばれる)を持ちます。コンポジットによってディメンション化された変数にデータ値が追加されると、コンポジット・タプルが作成されます。コンポジット・ディメンションは、1つ以上のスパースなデータ変数を格納する索引で、スパースなデータを稠密に格納します。非常にスパースなデータは、圧縮コンポジットで定義された変数に格納でき、圧縮コンポジットでは、通常のコンポジットとは異なるアルゴリズムを使用してデータが格納されます。

最適なデータ格納方法の選択

次元データとは対照的に、リレーショナル・データは、実際のデータ値についてのみ行を持つ非常にコンパクトな形式の表に格納されます。アナリティック・ワークスペースを設計する際、ソース・データのスパース性を手動で識別して最適な格納方法を決定するのが難しい場合があります。スパース性アドバイザにより、リレーショナル表のソース・データが分析され、格納方法がお薦めされます。推奨事項には、データ変数のパーティション化およびコンポジットの定義も含まれます。

スパース性アドバイザは、次のプロシージャとファンクションから構成されます。


SPARSITY_ADVICE_TABLEプロシージャ
ADD_DIMENSION_SOURCEプロシージャ
ADVISE_SPARSITYプロシージャ
ADVISE_DIMENSIONALITYファンクション
ADVISE_DIMENSIONALITYプロシージャ

また、スパース性アドバイザは、分析されるファクトのディメンションに関する情報を格納するためのパブリックな表型も提供します。表型の定義には、次の3つのオブジェクトが使用されます。


DBMS_AW$_COLUMNLIST_T
DBMS_AW$_DIMENSION_SOURCE_T
DBMS_AW$_DIMENSION_SOURCES_T

次のSQL DESCRIBE文は、オブジェクト定義を示しています。

DESCRIBE dbms_aw$_columnlist_t
dbms_aw$_columnlist_t TABLE OF VARCHAR2(100)
 
DESCRIBE dbms_aw$_dimension_source_t
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DIMNAME                                            VARCHAR2(100)
 COLUMNNAME                                         VARCHAR2(100)
 SOURCEVALUE                                        VARCHAR2(32767)
 DIMTYPE                                            NUMBER(3)
 HIERCOLS                                           DBMS_AW$_COLUMNLIST_T
 PARTBY                                             NUMBER(9)

DESCRIBE dbms_aw$_dimension_sources_t
dbms_aw$_dimension_sources_t TABLE OF DBMS_AW$_DIMENSION_SOURCE_T

スパーシティ・アドバイザの使用

スパース性アドバイザを使用するには、次の手順を実行します。

  1. SPARSITY_ADVICE_TABLEをコールして、スパース性アドバイザの評価を格納する表を作成します。

  2. 1つ以上の列によって評価対象のファクト表に関連付けられた各ディメンションについて、ADD_DIMENSION_SOURCEをコールします。

    これらのディメンションについて入力した情報は、DBMS_AW$_DIMENSION_SOURCES_T変数に格納されます。

  3. ADVISE_SPARSITYをコールして、ファクト表を評価します。

    その推奨事項は、SPARSITY_ADVICE_TABLEにより作成された表に格納されます。これらの推奨事項を使用して、アナリティック・ワークスペースでの変数の定義について判断を下すか、または次の手順を続行できます。

  4. ADVISE_DIMENSIONALITYプロシージャをコールして、推奨されるコンポジット、パーティション化、変数の定義について、OLAP DMLオブジェクト定義を取得します。

    または

    ADVISE_DIMENSIONALITYファンクションを使用して、推奨されるコンポジットおよび特定のパーティションの変数定義に関するディメンションの順序について、OLAP DMLオブジェクト定義を取得します。

例: GLOBALスキーマでのスパース性の評価

例B-1「スパース性アドバイザのGLOBAL用スクリプト」に、GLOBALスキーマでUNITS_HISTORY_FACT表のスパース性を評価するためのSQLスクリプトを示します。GLOBALアナリティック・ワークスペースでは、UNITS_HISTORY_FACTがUnitsキューブを定義し、UNITS変数のソースとなります。UNITS_HISTORY_FACTは、4つのディメンション表からの外部キーで構成される主キーを持つファクト表です。5番目の列には、売上数量のファクトが含まれています。

CHANNEL_DIM表とCUSTOMER_DIM表には、基本的なスター構成のチャネルおよび顧客ディメンションの情報がすべて含まれます。スノーフレーク構成の3つの表により、時間ディメンションのデータとしてMONTH_DIMQUARTER_DIMおよびYEAR_DIMが提供されます。PRODUCT_CHILD_PARENT表は、親子表であり、製品ディメンションを定義します。

例B-1 スパース性アドバイザのGLOBAL用スクリプト

CONNECT global/global
SET ECHO ON
SET LINESIZE 300
SET PAGESIZE 300
SET SERVEROUT ON FORMAT WRAPPED
 
-- Define and initialize an advice table named AW_SPARSITY_ADVICE
BEGIN
     dbms_aw.sparsity_advice_table();
EXCEPTION
     WHEN OTHERS THEN NULL;
END;
/
 
TRUNCATE TABLE aw_sparsity_advice;
 
DECLARE
     dimsources dbms_aw$_dimension_sources_t;
     dimlist VARCHAR2(500);
     sparsedim VARCHAR2(500);
     defs CLOB;
BEGIN
-- Provide information about all dimensions in the cube
     dbms_aw.add_dimension_source('channel', 'channel_id', dimsources, 
         'channel_dim', dbms_aw.hier_levels,
          dbms_aw$_columnlist_t('channel_id', 'total_channel_id'));
     dbms_aw.add_dimension_source('product', 'item_id', dimsources, 
          'product_child_parent', dbms_aw.hier_parentchild, 
           dbms_aw$_columnlist_t('product_id', 'parent_id'));
     dbms_aw.add_dimension_source('customer', 'ship_to_id', dimsources,
         'customer_dim', dbms_aw.hier_levels,
          dbms_aw$_columnlist_t('ship_to_id', 'warehouse_id', 'region_id',
               'total_customer_id'));
     dbms_aw.add_dimension_source('time', 'month_id', dimsources,
           'SELECT m.month_id, q.quarter_id, y.year_id
                FROM time_month_dim m, time_quarter_dim q, time_year_dim y
                WHERE m.parent=q.quarter_id AND q.parent=y.year_id',
            dbms_aw.hier_levels, 
            dbms_aw$_columnlist_t('month_id', 'quarter_id', 'year_id'));
 
-- Analyze fact table and provide advice without partitioning
     dbms_aw.advise_sparsity('units_history_fact', 'units_cube', 
          dimsources, dbms_aw.advice_default, dbms_aw.partby_none);
 
COMMIT;
 
-- Generate OLAP DML for composite and variable definitions
dimlist := dbms_aw.advise_dimensionality('units_cube', sparsedim, 
           'units_cube_composite');
dbms_output.put_line('Dimension list:  ' || dimlist);
dbms_output.put_line('Sparse dimension:  ' || sparsedim);
dbms_aw.advise_dimensionality(defs, 'units_cube');
dbms_output.put_line('Definitions:  ');
dbms_aw.printlog(defs);
 
END;
/

サンプル・プログラムからのアドバイス

例B-1「スパース性アドバイザのGLOBAL用スクリプト」のスクリプトで次の情報が生成されます。

Dimension list:  <channel units_cube_composite<product customer time>>
Sparse dimension:  DEFINE units_cube_composite COMPOSITE <product customer time>
Definitions:
DEFINE units_cube.cp COMPOSITE <product customer time>
DEFINE units_cube NUMBER VARIABLE <channel units_cube.cp<product customer time>>
PL/SQL procedure successfully completed.

AW_SPARSITY_ADVICE表に格納される情報

このSQL SELECT文により、推奨されるOLAP DMLオブジェクト定義の基礎である、AW_SPARSITY_ADVICE表の列の一部が表示されます。

SELECT fact, dimension, dimcolumn, membercount nmem, leafcount nleaf, 
     advice, density
     FROM aw_sparsity_advice
     WHERE cubename='units_cube';
 

この問合せは、次の結果セットを返します。

FACT                 DIMENSION    DIMCOLUMN     NMEM  NLEAF ADVICE        DENSITY
-------------------- ------------ ------------ ----- ------ ------------ --------
units_history_fact   channel      channel_id       3      3 DENSE          .46182
units_history_fact   product      item_id         48     36 SPARSE         .94827
units_history_fact   customer     ship_to_id      61     61 SPARSE         .97031
units_history_fact   time         month_id        96     79 SPARSE         .97664

集計アドバイザの使用

アナリティック・ワークスペースでの集計データの管理は、パフォーマンスに大きく影響することがあります。DBMS_AWパッケージのADVISE_RELプロシージャおよびADVISE_CUBEプロシージャを使用すると、事前集計するディメンション・メンバーの最適な組合せを決定できます。これらのプロシージャは、集計アドバイザとして知られています。

指定した割合に基づき、ADVISE_RELは事前集計するディメンション・メンバーのセットを提示します。ADVISE_CUBEは、キューブの各ディメンションについてメンバーのセットを提示します。

ワークスペースの集計機能

集計データを格納する手順は、aggmapというアナリティック・ワークスペース・オブジェクトで指定されます。OLAP DML AGGREGATEコマンドは、aggmapを使用してデータを事前計算します。事前集計されないデータは、データの問合せ時にAGGREGATEファンクションで動的に集計されます。

静的な集計と動的な集計のバランスの選択は、ディスク領域、使用可能なメモリー、データに対して実行される問合せの特性と頻度など、多くの要素によって異なります。これらの要素を検討して、事前集計するデータの割合を決定します。

事前集計するデータの割合を決定したら、集計アドバイザを使用できます。これらのプロシージャで、階層内のディメンション・メンバーの分布を分析し、事前集計するディメンション・メンバーの最適な組合せを特定します。

例: ADVISE_RELプロシージャの使用

指定した事前計算の割合に基づいて、ADVISE_RELプロシージャは、すべての階層関係を持つディメンションを表すファミリ・リレーションを分析し、ディメンション・メンバーのリストを返します。

ADVISE_CUBEは、キューブのaggmapで各ディメンションに同様の経験則を適用します。

例B-2では、次に示す顧客ディメンションのサンプルを使用して、ADVISE_RELプロシージャを説明します。

サンプル・ディメンション: Globalアナリティック・ワークスペースの顧客

GLOBAL_AW.GLOBALの顧客ディメンションには、4つのレベルを持つSHIPMENTS_ROLLUPと3つのレベルを持つMARKET_ROLLUPの2つの階層があります。ディメンションは106のメンバーを持ちます。この数には、各レベルの全メンバーおよびすべてのレベル名が含まれています。

顧客ディメンションのメンバーは、テキスト値が詳細な説明および簡単な説明で定義された整数キーです。

次のOLAP DMLコマンドは、データベースの標準形式である顧客ディメンションの表現に関する情報を示しています。

SET serveroutput ON
---- Number of members of Customer dimension
EXECUTE dbms_aw.execute('SHOW STATLEN(customer)')
106

---- Hierarchies in Customer dimension;
EXECUTE dbms_aw.execute('REPORT W 40 customer_hierlist');
CUSTOMER_HIERLIST
----------------------------------------
MARKET_ROLLUP
SHIPMENTS_ROLLUP

---- Levels in Customer dimension
EXECUTE dbms_aw.execute('REPORT W 40 customer_levellist');

CUSTOMER_LEVELLIST
----------------------------------------
TOTAL_CUSTOMER
REGION
WAREHOUSE
TOTAL_MARKET
MARKET_SEGMENT
ACCOUNT
SHIP_TO
---- Levels in each hierarchy from leaf to highest
EXECUTE dbms_aw.execute('REPORT W 20 customer_hier_levels');
 
CUSTOMER_HIERL
IST            CUSTOMER_HIER_LEVELS
-------------- --------------------
SHIPMENTS      SHIP_TO
               WAREHOUSE
               REGION
               TOTAL_CUSTOMER
MARKET_SEGMENT SHIP_TO
               ACCOUNT
               MARKET_SEGMENT
               TOTAL_MARKET

---- Parent relation showing parent-child relationships in the Customer dimension
---- Only show the last 20 members
EXECUTE dbms_aw.execute('LIMIT customer TO LAST 20');
EXECUTE dbms_aw.execute('REPORT W 10 DOWN customer W 20 customer_parentrel');

           -----------CUSTOMER_PARENTREL------------
           ------------CUSTOMER_HIERLIST------------
CUSTOMER      MARKET_ROLLUP       SHIPMENTS_ROLLUP
---------- -------------------- --------------------
103        44                   21
104        45                   21
105        45                   21
106        45                   21
7          NA                   NA
1          NA                   NA
8          NA                   1
9          NA                   1
10         NA                   1
11         NA                   8
12         NA                   10
13         NA                   9
14         NA                   9
15         NA                   8
16         NA                   9
17         NA                   8
18         NA                   8
19         NA                   9
20         NA                   9
21         NA                   10

---- Show text descriptions for the same twenty dimension members 
EXECUTE dbms_aw.execute('REPORT W 15 DOWN customer W 35 ACROSS customer_hierlist: <customer_short_description>');
ALL_LANGUAGES: AMERICAN_AMERICA
                ---------------------------CUSTOMER_HIERLIST---------------------------
                -----------MARKET_ROLLUP----------- ---------SHIPMENTS_ROLLUP----------
CUSTOMER            CUSTOMER_SHORT_DESCRIPTION          CUSTOMER_SHORT_DESCRIPTION
--------------- ----------------------------------- -----------------------------------
103             US Marine Svcs Washington           US Marine Svcs Washington
104             Warren Systems New York             Warren Systems New York
105             Warren Systems Philladelphia        Warren Systems Philladelphia
106             Warren Systems Boston               Warren Systems Boston
7               Total Market                        NA
1               NA                                  All Customers
8               NA                                  Asia Pacific
9               NA                                  Europe
10              NA                                  North America
11              NA                                  Australia
12              NA                                  Canada
13              NA                                  France
14              NA                                  Germany
15              NA                                  Hong Kong
16              NA                                  Italy
17              NA                                  Japan
18              NA                                  Singapore
19              NA                                  Spain
20              NA                                  United Kingdom
21              NA                                  United States

例B-2 ADVISE_REL: 推奨される顧客ディメンションの事前集計

この例では、サンプル・ディメンション: Globalアナリティック・ワークスペースの顧客で説明したGLOBAL顧客ディメンションを使用しています。

次のPL/SQL文は、顧客ディメンションの25%を事前集計することを前提としています。ADVISE_RELは、値セットで推奨されるメンバーのセットを返します。

SET serveroutput ON
EXECUTE dbms_aw.execute('AW ATTACH global_aw.global');
EXECUTE dbms_aw.execute('DEFINE customer_preagg VALUESET customer');
EXECUTE dbms_aw.advise_rel('customer_parentrel', 'customer_preagg', 25);
EXECUTE dbms_aw.execute('SHOW VALUES(customer_preagg)');
31
2
4
5
6
7
1
8
9
20
21

返される顧客メンバーと、説明文、関連するレベルおよび階層は、次に示すとおりです。

顧客メンバー 説明 階層 レベル
31 Kosh Enterprises MARKET_ROLLUP ACCOUNT
2 Consulting MARKET_ROLLUP MARKET_SEGMENT
4 Government MARKET_ROLLUP MARKET_SEGMENT
5 Manufacturing MARKET_ROLLUP MARKET_SEGMENT
6 Reseller MARKET_ROLLUP MARKET_SEGMENT
7 TOTAL_MARKET MARKET_ROLLUP TOTAL_MARKET
1 TOTAL_CUSTOMER SHIPMENTS_ROLLUP TOTAL_CUSTOMER
8 Asia Pacific SHIPMENTS_ROLLUP REGION
9 Europe SHIPMENTS_ROLLUP REGION
20 United Kingdom SHIPMENTS_ROLLUP WAREHOUSE
21 United States SHIPMENTS_ROLLUP WAREHOUSE