ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド
11g リリース1 (11.1.1)
B63028-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

12 Oracle BIサーバーの問合せ用の集計の作成および永続化

データ・ウェアハウスの多くの専門家は、高度に集約された問合せのパフォーマンスを大幅に向上させるために集計データ表を作成します。これらの集計表にはあらかじめ計算された結果が格納され、その結果はディメンションの一連の属性を範囲とする集計メジャー(通常は合計)です。集計表の使用は、意志決定サポート・システムにおいて問合せの応答時間を向上させるために一般的に使用されるテクニックです。

SQL問合せを使用する場合、またはどの表が存在するかのみを理解しその意味を理解していないツールを使用する場合、集計表の数が増加するにつれて集計表の使用がより複雑になります。Oracle BIサーバーの集計ナビゲーション機能を利用すると、問合せにおいて集計表に格納されている情報を自動的に使用することが可能になります。Oracle BIサーバーを利用することにより、ユーザーは適切なビジネス上の質問を行うことに集中でき、最も高速に回答を返す表がどれであるかはサーバーによって判断されます。

Oracle Business Intelligenceには、ソース・データベース内の集計を利用するための集計ナビゲーション機能があります(詳細は第10章を参照)。ただし、データ集計の作成と維持、およびデータベース・スクリプトのロードと対応するメタデータのマッピングには時間がかかることがあります。そのため、Oracle Business Intelligenceには、集計表の作成とロード、およびOracle Business Intelligenceの対応するメタデータのマッピングを自動化する、集計の永続性機能が用意されています。

この章では、Oracle Business Intelligenceで集計の永続性を設定し、使用する方法について説明します。

この章の内容は次のとおりです。

Oracle Business Intelligenceの集計の永続性について

集計の永続性を使用して、Oracle BIサーバーの問合せ用の集計を作成します。集計の永続性ウィザードを使用することにより、集計指定スクリプトの作成が自動化されます。このスクリプトを稼働中のOracle BIサーバーに対して実行すると、集計表が作成され、ナビゲーション用のメタデータにマップされます。集計の永続化を行うと、パフォーマンス向上のための索引および統計がリレーショナル表に作成されます。

集計の永続性ウィザードは、Oracle BIサーバーに対して定期的に実行されるSQLスクリプトを作成します。集計の永続性ウィザードでは、パフォーマンス設計に基づいて、メジャー、ディメンショナリティ、および各スターまたはキューブの他のパラメータを指定します。このスクリプトは、ベースレベル表のそれぞれのロードが終わった後に実行する必要があります。これにより、ロードの時間帯が完了してユーザーがクエリの実行を開始するときに、集計が詳細レベルのデータと常に同期しているようになります。

集計作成は、クラスタ内のマスター・サーバーに対して実行します。メタデータの変更がスレーブに伝播されるまで多少時間がかかります。クラスタのリフレッシュ時間はユーザーによる制御が可能なオプションですが、スレーブ・サーバーがリフレッシュされる前にスレーブ・サーバーに対する問合せが行われると、正しくない結果が返される可能性があります。適切なクラスタ・リフレッシュ間隔を設定するのは管理者の役目です。

集計の永続性では、集計が格納されるターゲット・データベースに表またはキューブを作成するための専用の接続プールが必要になります。Oracle BIリポジトリではフェデレーションが可能なため、集計のターゲットは、詳細ソースと同じデータベース、完全に別のデータベースのいずれでも構いません。この専用の接続プールは、集計の永続性ウィザードの手順の中で選択するため、このウィザードを実行する前に作成する必要があります。

ディメンション(レベル)の集計には、デフォルトの接頭辞SA_が自動的に追加されます。NQSConfig.INIファイルのAGGREGATE_PERSISTENCEセクションにあるAGGREGATE_PREFIXパラメータを更新することによって、このデフォルトの接頭辞を変更することができます。

AGGREGATE_PREFIX = "prefix_name" ;

集計を格納するのに使用されるターゲット・スキーマは適切に保護する必要があり、パブリック・アクセスを許可してはいけません。このスキーマには、表や索引への接続、およびそれらの作成や削除に関する権限を設定する必要があります。デフォルトでは、BIAdministratorsグループに属するユーザーのみが集計を管理できます。

仮想プライベート・データベース(VPD)のセキュリティ・フィルタがアクティブになっている表に対しては、集計の永続性を使用しないでください。VPDフィルタが適用されずに集計情報が永続化される可能性があり、セキュリティ上のリスクが生じます。

集計の問合せの候補の特定

集計の作成時には、集計データによって大きな利点が得られるのはどの問合せであるかを特定する必要があります。可能なかぎり高いレベルで集計することによって、最良の結果が得られます。遅い問合せを特定するには、次のタスクを実行します。

集計の永続性ウィザードを使用した集計指定の生成

集計の永続性ウィザードを使用してSQLファイルを作成することができます。このSQLファイルは、集計表の作成とロード、およびそれらのメタデータへのマップに使用されます。作成されたSQLファイルは、実行中のOracle BIサーバーに対して実行する必要があります。


注意:

集計の永続性ウィザードは集計指定の生成時に必要な多くの制約を自動的に適用するため、このウィザードの使用を強くお薦めします。ただし、このウィザードを使用せずに、集計論理SQLを手動で記述することもできます。独自の集計指定を記述する場合は、「集計指定作成の手動での記述」に記載されているガイドラインに従ってください。

集計の永続性ウィザードを使用するには:

  1. 管理ツールで「ツール」→「ユーティリティ」→「集計の永続性」を選択し、「実行」をクリックします。

  2. 「ファイルの場所の選択」画面で、集計作成スクリプトの完全なパスおよびファイル名を指定します。新しいファイル名、既存のファイル名のいずれも指定することができます。

    通常、Oracle BIサーバーに対してSQLスクリプトを実行する場合、DDLが作成され、それがターゲット・データベース・スキーマに対して実行され、集計表が作成されます。次に、ソースからそれらがロードされ、最後にOracle BIサーバーのメタデータが作成されます。これにより、集計ナビゲーション機能で新しい表が使用できるようになります。

    また、Oracle BIサーバーのSQLスクリプトとは別のファイルにDDLを保存する場合は、ターゲットDDLを別のファイルに生成を選択することもできます。このオプションを選択すると、次の2つのSQLスクリプトが生成されます。

    • 集計作成スクリプト(script_name)

    • 集計準備スクリプト(script_name_DDL)

    いずれのファイルも、次の場所に格納されます。

    ORACLE_INSTANCE\bifoundation\OracleBIServerComponent\coreapplication_obisn\
    aggr
    

    ターゲットDDLを別のファイルに生成を選択すると、自動生成されたDDLを変更して、それをOracle BIサーバーから独立して実行することが可能になり、柔軟性が向上します。たとえば、記憶域パラメータや索引の設定を変更することができます。このオプションを選択する場合は、最初にDDLファイルに対して手動で更新を行ってからそのDDLファイル(集計準備)を実行し、次に集計作成スクリプトを実行します。

    「ファイルの場所の選択」画面でオプションの指定が完了したら、「次へ」をクリックします。

  3. 「ビジネス・メジャーの選択」画面で、集計するメジャーを選択します。これを行うには、上部ペインでビジネス・モデルを選択し、次に下部ペインで1つのファクト表またはメジャーのセットを選択します。複数のファクト表にまたがるメジャーを選択することはできません。複数のメジャーを選択するには、[Ctrl]キーを押しながらクリックします。連続する範囲のメジャーを選択するには、[Shift]キーを押しながらクリックします。

    最初の集計表ブロックの作成時には、「スクリプトの表示」ボタンは利用できないことに注意してください。

    図12-1は、「ビジネス・メジャーの選択」画面を示しています。

    図12-1 「集計の永続性」ウィザード: 「ビジネス・メジャーの選択」画面

    図12-1の説明が続きます
    「図12-1 「集計の永続性」ウィザード: 「ビジネス・メジャーの選択」画面」の説明

    適切なメジャーを選択したら、「次へ」をクリックします。

  4. 「レベルの選択」画面で、1つ以上のディメンションの論理レベルを選択することによって集計のレベルを指定します。ファクト-ディメンションの結合で使用される代理キーを指定することができます。

    集計対象のファクト表とディメンション表の間のデフォルトの結合オプションは、選択した論理レベルに定義されている主キーです。このレベルの主キーが大きくて複雑である場合、ファクト表への結合はコストが高くなります。したがって、この場合は代理キーを使用することをお薦めします。代理キーは人工的に生成されたキーであり、通常は数字です。たとえば、レベル集計表内の代理キーはこの結合を簡素化させ、ファクト表から不要な(レベルの主キーの)列が削除されます。これにより、ファクト表は軽量化されます。

    代理キーの使用によって変化するのは問合せの応答時間のみであり、問合せの論理的な結果に違いはありません。ただし、代理キーの生成によって集計表のロード時間が長くなるという副作用が生じる場合があります。したがって、推奨設定は次のようになります。

    • 選択した論理レベルの主キーが単一の数値列である場合、通常は代理キーを使用するオプションは選択しません。なぜなら、これを選択してもパフォーマンス上のメリットはなく、ロード処理にかかる時間が増えるだけだからです。

    • 選択した論理レベルの主キーがテキスト文字列であるか、または複数の論理列から構成されている場合は、この集計ディメンションに結合される問合せのパフォーマンスを向上させるため、通常は代理キーを使用します。ただし、代理キーの生成によって、その集計ディメンション表のロード時間が長くなる場合があることに注意してください。

    代理キーの詳細は、「ディメンション集計表への代理キーの追加」を参照してください。

    図12-2は、「レベルの選択」画面を示しています。

    図12-2 「集計の永続性」ウィザード: 「レベルの選択」画面

    図12-2の説明が続きます
    「図12-2 「集計の永続性」ウィザード: 「レベルの選択」画面」の説明

    適切な集計レベルを選択したら、「次へ」をクリックします。

  5. 「接続プールの選択」画面で、集計表の場所を指定するための適切な項目を選択します。

    デフォルトの集計表の名前が設定されており、表の名前に接頭辞が付加されています。生成されるファクト表のデフォルトの接頭辞はagです。ディメンション(レベル)集計用に作成される表のデフォルトの接頭辞はSA_であり、これはNQSConfig.INIのAGGREGATE_PREFIXプロパティを更新することによって変更できます。構成設定の変更の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。

    図12-3は、「接続プールの選択」画面を示しています。

    図12-3 「集計の永続性」ウィザード: 「接続プールの選択」画面

    図12-3の説明が続きます
    「図12-3 「集計の永続性」ウィザード: 「接続プールの選択」画面」の説明

    接続プールの情報を設定したら、「次へ」をクリックします。

  6. 「終了」画面では、「スクリプトの表示」ボタンが利用可能になっており、論理SQLスクリプトを表示して確認することができます。別の集計を定義するか(デフォルト)、またはウィザードを終了するかを選択し、「次へ」をクリックします。

  7. 「スクリプトの終了」画面に、完全なパスとファイル名が表示されます。「終了」をクリックします。

SQLファイルを使用した集計表の作成の詳細は、「Oracle BIに対する集計指定の実行」を参照してください。

集計指定作成の手動での記述

スクリプト・ファイルの作成に集計の永続性ウィザードを使用しないことを選択した場合、このファイルを手動で記述することができます。ただし、集計の永続性ウィザードを使用することをお薦めします。

集計の作成時にOracle BIサーバーによってデータベースが変更されるのを望まない場合は、集計の永続性ウィザードでターゲットDDLを別のファイルに生成オプションを選択することによって、それを指定することができます。集計の永続性ウィザードによって、空の集計表を作成するためのDDLファイル(集計準備スクリプト)が作成されます。この後、集計表にデータを移入するために、集計作成スクリプトを実行する必要があります。このオプションは、表作成のためのデータベースへのアクセスが制限されている場合に柔軟性を提供します。集計作成スクリプトを実行する前に集計準備スクリプトを実行する必要があることに注意してください。

この項の項目は次のとおりです。

作成プロセス時に課される制約

作成プロセス時には次の制約が課されます。

  • 有効なメジャー。有効なメジャーは有効な集計ルールを持っている必要があります。レベルベース・メジャーには次の制約が適用されます。

    • レベルが総計のエイリアスである場合、その集計指定のレベルのリスト内にそのディメンションが存在してはいけません。

    • このメジャーに定義される他のすべてのレベルは、その集計指定のレベルのリスト内に存在している必要があります。

    前述の制約が満たされない場合、集計指定全体が破棄されます。また、次のいずれかの条件に当てはまる場合、作成プロセスにおいてメジャーは無視されます。

    • メジャーがセッションまたはリポジトリ変数にマップされています。

    • メジャーが導出メジャーです。

    • メジャーにデフォルトの集計ルール(なし)が設定されています。

    無視されたメジャーは、必ずしも集計指定に影響するとは限りません。集計の作成には残りのメジャーが使用されます。

  • 有効なレベル。有効なレベルは有効な主キーを持つ必要があります。レベルが無効である場合、集計指定は破棄されます。また、次のいずれかの条件に当てはまる場合、レベルまたはその主キーの属性は無視されます。

    • 属性がセッションまたはリポジトリ変数にマップされています。

    • 属性が同一の論理表からのものではありません。

  • 有効な集計指定。有効な集計指定は次のプロパティを持ちます。

    • 名前の長さが1 - 18文字です(1文字、18文字も可)。

    • 1つ以上の有効なレベルが指定されています。

    • 1つ以上の有効なメジャーが指定されています。

    • 有効な接続プールを持つ必要があります。

    • 有効な出力コンテナを持つ必要があります(データベース/カタログ/スキーマ)。

    • 接続プールとコンテナは同一のデータベースに属する必要があります。

    • 各ディメンションに指定可能なレベルは1つのみです。

    • メジャーは同一のファクト表からのものでなくてはなりません。

    • 指定内のすべての論理コンポーネントは、同一のサブジェクト・エリアのものでなくてはなりません。

    レベルの集計はデータベース全体をスコープとするため、出力コンテナ内に同じ名前がすでに存在する場合、集計指定は無視されます。ただし、同一のファクト集計名に対して異なるカタログまたはスキーマが指定される場合、同一のデータベース内の別のスコープであれば、同じ名前の複数のファクトを持つことが許可されます。

    ファクトに結合されていないディメンションが存在する場合、集計指定は破棄されることに注意してください。

集計指定作成を記述する方法

すべてのメタデータの名前(論理ファクト列を除く)は完全修飾です。操作には、作成と削除の2つのモードがあります。すべての集計指定を1つの集計作成文に含めることを強くお薦めします。

集計指定を記述する際は、次のガイドラインに従ってください。

  • スクリプト・ファイルの最初にはDelete文を置きます。新しい集計を作成する前にシステムによって生成された集計を削除することが不可欠です。これにより、データの一貫性が保たれること、および作成操作の実行前に無効な集計や不完全な集計が削除されることが保証されます。集計を削除する文の構文は次のとおりです。

    Delete aggregates;
    
  • 次にCreate文を配置します。集計を作成する文の構文は次のとおりです。

    Create|Prepare aggregates 
    aggr_name_1
    for  logical_fact_table_1 [(logical_fact_column_1, logical_fact_column_2,…)]   
    at levels (level_1, level_2, …)
    using connection pool connection_pool_name_1
    in schema_name_1
    [ ,aggr_name_2
    for logical_fact_table_3 [(logical_fact_column_5, logical_fact_column_2,…)]   
    at levels (level_3, level_2, …)
    using connection pool connection_pool_name_2
    in schema_name_2] ;
    
  • 1つの集計作成の文の中に複数の集計を指定する場合は、次のガイドラインに従ってください。

    • 複数の集計指定はカンマで区切り、集計作成スクリプト全体の終わりにはセミコロンを入力します。

    • このファイルでは、集計削除文は先頭に1つのみ指定するようにします。1回のETLの実行で削除は1回のみ実行されるようにします(リセットが要求される場合を除く)。


      注意:

      初回以降に実行されるすべての集計スクリプトでは、集計削除文は含めないようにするか、または以前に作成したすべての集計を削除するようにしてください。

代理キーを使用する集計の作成は、次の項を参照してください。

ディメンション集計表への代理キーの追加

ファクトとレベル集計表の間のデフォルトの結合オプションでは、レベル集計の主キーが使用されます。このレベルの主キーが大きくて複雑である場合(多数の列のコンポジット)、ファクト表への結合はコストが高くなります。代理キーは人工的に生成されたキーであり、通常は数字です。レベルの集計表内の代理キーはこの結合を簡素化させ、ファクト表から不要な列(レベルの主キー)が削除されます。これにより、ファクト表のサイズは小さくなります。ディメンション(レベル)集計表に代理キーを追加すると、ファクト表への結合が簡素化され、問合せのパフォーマンスが向上する可能性があります。また、代理キーを使用することにより、各集計表に一意の識別子が必ず存在するようになります。

複数のファクト表間でレベルが共有される場合があります。この場合、あるファクトでは代理キーが使用され、別のファクトではディメンション集計の主キーがされる可能性があります。この状況を解決するためのいくつかのオプションを次に示します。

  • レベルに対して、代理キー、主キーのいずれが使用されるかを示すメタデータ・プロパティを設定します。

  • レベルの集計では常に代理キーを作成します(処理のコストは比較的低い)。ファクト集計をそれに結合する際に代理キーと主キーのいずれを使用するかについては、後で決定します。

各ディメンションに対して結合タイプを指定する方法の他に、スター全体で代理キーを使用するかどうかを指定する方法があります。これにより構文が簡潔になる場合がありますが、ユーザー・オプションの利用に制限が生じたり、集計作成プロセスの速度が低下したりすることがあります。

集計の作成/準備の構文について

集計の作成/準備のための次の構文には、変更箇所[Using_Surrogate_Key]が含まれています。各レベルに代理キー・オプションを指定することができます。このオプションを指定しないと、ファクト表およびディメンション表は、レベル集計の主キーを使用して結合されます。

Create|Prepare aggregates 
aggr_name_1
[file output_file_name]
for  logical_fact_table_1 [(logical_fact_column_1, logical_fact_column_2,…)]   
at levels (level_1 [Using_Surrogate_Key], level_2, …)
using connection pool connection_pool_name_1
in schema_name_1
[ ,aggr_name_2
for logical_fact_table_3 [(logical_fact_column_5, logical_fact_column_2,…)]   
at levels (level_3, level_2, …)
using connection pool connection_pool_name_2
in schema_name_2] ;

集計の作成/準備からの代理キーの出力について

現在のプロセスへの変更は、リポジトリおよびデータベース内の物理メタデータ・レイヤーに制限されています。

Using_Surrogate_Key結合オプションを使用すると、次のような結果になります。

  • レベル集計の場合、次のようになります。

    • 物理メタデータでは次のようになります。

      • レベル集計表は、levelName_upgradeIDSKという名前の新しい列を持ちます(競合がチェックされます)。これは、ディメンション集計の代理キーの列です。全文字数が18文字を超える場合、levelNameは切り詰められることに注意してください。

      • この列の型はSMALLUINTです。

    • データベースでは次のようになります。

      • レベル集計表は、levelName_upgradeIDSKという名前の対応する列を持ちます。ここでも、全文字数が18文字を超える場合、levelNameは切り詰められます。

      • これはRCOUNT()を使用してデータが設定されます。

  • ファクト集計の場合、次のようになります。

    • 物理メタデータでは次のようになります。

      • ファクト集計表には、レベルの主キーの列は含まれません。

      • かわりに、レベル集計の代理キーに対応する新しい列が表に追加されます。

      • この列の型はレベルの代理キーと同じです。

      • この列の名前は、レベル集計の列の名前と同じです(競合がチェックされます)。

      • ファクト表とレベル表は、この代理キーのみを使用して結合されます。

    • データベースでは次のようになります。

      • ファクト集計表も対応する代理キーを持ちます。

      • 移入を通じて利用可能な新機能を使用してデータを設定します。

Oracle BIに対する集計指定の実行

Oracle BIサーバーに対して集計指定を実行する前に、適切なログ・レベルを設定する必要があります。ログ・レベルを2以上にすると、nqquery.logにトレース・ログが記録されます。ログの対象となるイベントには、集計の実行計画や、集計の作成および削除の順序が含まれます。ログ・レベルを高くすると、問合せや実行計画に関するより詳細なログが得られます。ログ・レベルを1以上にすると、nqquery.logにエラー・ログが記録されます。また、nqserver.logにはログ・レベルに関係なくログが記録されます。

SQLスクリプト・ファイルを生成し、ログ・レベルを設定した後、nqcmdを使用してSQLスクリプトを実行できます。このSQLファイルは、実行中のOracle BIサーバーに対して実行する必要があります。nqcmdの実行の詳細は、「リポジトリのテストおよび絞り込み」を参照してください。

SQLスクリプトを実行すると、Oracle BIサーバーのメタデータ内、およびバックエンド・データベース内に集計が作成され、永続化されます。

集計の永続性のトラブルシューティング

エラーが発生するいくつかの原因を次に示します。

集計の作成においてエラーが発生すると、集計リクエスト全体が中断され、以降の集計は作成されません。すでに作成されチェックインされた集計は、チェックインされたままになります。エラーが発生した場合は、エラーの発生時または次回のETLの実行時に、次のいずれかの方法によって集計を削除する必要があります。