ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

スパース性アドバイザの使用

データは、稠密、スパース、非常にスパースのいずれであるかに応じて、様々な形式でアナリティック・ワークスペースに格納できます。スパース性アドバイザは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