CHGDFNコマンドは、アナリティック・ワークスペース・オブジェクトの定義の一部を変更するコマンドです。
CHGDFNでオブジェクトの定義を変更するには、まずCONSIDERを使用して、該当するオブジェクトの定義を現行の定義にする必要があります。
注意: CHGDFNでは、マルチライタ・モードでアタッチされているアナリティック・ワークスペースのオブジェクト定義は変更できません。 |
構文
CHGDFN desired-change
ここで、desired-changeは次のいずれかです。
varname SEGWIDTH length dim...
partitioned-varname {DROP | ADD } (partition-instance...)
partition-template {DEFINE | DELETE [CLEAR] } (partition-instance...)
partition-template RENAME PARTITION old-name new-name
{conjoint | composite} {HASH | BTREE | NOHASH}
concat BASE ADD dimensionlist
conjoint COMPOSITE
composite DIMENSION
dimension NTEXT | TEXT | NUMBER [p, s]
dwmqy-dimname { {BEGINNING | ENDING} phase | {EARLIER | LATER} n}
concat [NOT] UNIQUE
varname {ADD |DROP} AGGCOUNT
varname [DROP] NULLTRACKING
パラメータ
セグメント・サイズを設定する対象の変数名。
変数のセグメントの明示的なサイズを指定します。詳細は、「変数セグメントの理解」を参照してください。
パーティションを変更する、パーティション変数の名前を指定します。
指定されたパーティションを、パーティション変数から削除または追加します。partition-instance引数の詳細は、DEFINE VARIABLEコマンドを参照してください。
指定されたパーティションを、パーティション・テンプレート・オブジェクトから削除または追加します。partition-instance引数の詳細は、DEFINE PARTITION TEMPLATEコマンドを参照してください。
オプションのCLEARキーワードを含めると、Oracle OLAPでは、パーティション・テンプレート・オブジェクトを使用してパーティション化されている変数内の対応するパーティションも削除します。つまり、CLEARを含めることは、パーティション・テンプレート・オブジェクトによってパーティション変数からパーティションをDROPするために、別のCHGDFN文を発行することと同義です。
パーティション・テンプレート・オブジェクト内の指定されたパーティションの名前を変更します。
dimensionlistに指定された1つまたは複数のディメンションを連結ディメンションのベース・ディメンションに追加します。1つ以上のディメンションを連結のベース・ディメンションとして追加する場合、Oracle OLAPでは、そのディメンションを連結の既存のベース・ディメンション・リストに追加します。連結でディメンション化されたオブジェクト、またはベース・ディメンションとして変更された連結を持つ連結でディメンション化されたオブジェクトでは、追加のNA
値が取得されます。すでに連結ディメンションの構成要素であるディメンションは、ベース・ディメンションとして追加できません。
セグメントの幅は、変数のディメンション・リストにある各ディメンションまたはコンポジットの各セグメント内の値の最大数として指定されます。最初のlength-dimは、変数の定義内のディメンション・リストの最初に位置しているディメンションまたはコンポジット(つまり、最も変化の速いディメンションまたはコンポジット)の値の数で、2番目のlength-dimは、ディメンション・リスト内の2番目に位置しているディメンションまたはコンポジットの値の数、というように続きます。
index構文では、索引アルゴリズムを変更する対象の結合ディメンションまたはコンポジットの名前です。conjoint-to-composite構文では、コンポジットへ変更する対象の結合ディメンションの名前です。composite-to-dim構文では、結合ディメンションへ変更する対象のコンポジットの名前です。結合が計算式のディメンションである場合は、結合ディメンションをコンポジットへ変更できません。
結合またはコンポジットで定義されているオブジェクト内のデータを失うことなく、結合ディメンションまたはコンポジットの値をロードおよびアクセスするために使用される索引アルゴリズムを示します。コンポジットはNOHASHへ変更できません。結合は、当初、HASHとして定義されたものである場合にのみ、NOHASHに変更できます。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。
HASH、NOHASHおよびBTREEは、結合ディメンションまたはコンポジットの値のロードおよびアクセスに使用される、それぞれ異なる索引アルゴリズムです (BTREE64はコンポジットでのみ使用できます)。HASHは結合に対するデフォルトです。コンポジットのデフォルトは、SPARSEINDEXオプションにより決まります。これには、BTREEのデフォルト値が含まれます。索引アルゴリズムは、サイズの大きい結合またはコンポジットをロードまたはアクセスする際のパフォーマンスに影響します。パフォーマンスは、使用しているシステムの構成、データ編成およびアプリケーション設計により異なります。
BTREEは、コンポジットおよび結合ディメンションについて推奨される標準的な索引付けメソッドです。上級ユーザーであり、かつHASHまたはNOHASHを特に必要とするとき以外は、BTREEをデフォルトとして使用してください。BTREEは類似する値をグループ化するため、アクセスの局所性に優れています。
BTREE 64は、コンポジットでのみ使用できます。コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。
HASHは、2つまたは3つのベース・ディメンションのみを持つコンポジットまたは結合ディメンションに対し使用できる標準的な索引付けメソッドです。HASHを使用する場合の利点は、結果が少量のコードになることです。ただし、一般的には、HASHはお薦めしません。HASHを使用すると、巨大な索引表が作成されるため、メモリーに読み込むには大きすぎる場合があります。
NOHASHは、結合ディメンションでのみ使用できます。使用可能なメモリーがほとんどなく、結合ディメンションが2つまたは3つのベース・ディメンションのみを持つような場合、NOHASHの使用が有用です。また、非常に大きい初期データ量をロードする際にもNOHASHを使用できます。NOHASHを使用すると、データは、ロード後にデータへアクセスしやすい方法でロードされます。データがロードされたら、良好なパフォーマンスを得るために、結合ディメンションの定義をBTREEに戻します。そうしないと、特に結合ディメンションが4つ以上のベース・ディメンションを持つ場合にはパフォーマンスが低下する可能性があります。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。
ヒント: パフォーマンスのテストを実施して、状況に即して最もパフォーマンスのよいアルゴリズムを判定できます。たとえば、最初はデータ・ロードが非常に迅速に行われたにもかかわらず、その後、大幅に速度が落ちた場合を想定します。CHGDFNを使用して、索引アルゴリズムをBTREEからNOHASHへ変更します。データのロードを再試行し、NOHASHの使用によってパフォーマンスが向上するかどうかを確認します。その後、CHGDFNを使用して索引アルゴリズムをBTREEに戻すこともできます。ただし、大きな結合ディメンションまたはコンポジットの索引アルゴリズムをあるアルゴリズムから別のアルゴリズムに変更する場合かなりの時間がかかることがあり、CHGDFNコマンドは中断できないことに注意してください。 |
結合ディメンションの名前付きコンポジットへの変更を指定します。結合ディメンションのコンポジットへの変更では、結合がNOHASH索引アルゴリズムを持つ場合や権限を持つ場合はコンポジットには変更できないという制約があります。
名前付きコンポジットの結合ディメンションへの変更を指定します。
コンポジットをベース・ディメンションとして持つようなコンポジットの名前。
注意: Oracle Database 11gでは、ネストしたコンポジットを定義することはできません。そのため、UNNESTキーワードが使用されるのは、以前のリリースで定義され、Oracle Database 11gにインポートされたネストしたコンポジットに対してのみです。 |
TEXT、NTEXTまたはNUMBERディメンションの名前。
TEXTディメンションのデータ型をNTEXTに変更するように指定します。
NTEXTディメンションのデータ型をTEXTに変更するように指定します。
TEXT、NTEXTまたはNUMBERディメンションのデータ型を、pで指定する精度およびsで指定するスケールを持つNUMBERに変更するように指定します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションのフェーズを指定または変更します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの開始フェーズまたは終了フェーズを指定します。フェーズは、DATEデータ型の変数値に対し有効な任意の入力スタイルを使用して、年、月および日を示す日付として、一重引用符で囲むかたちで指定する必要があります。意味があいまいな形式('03 05 97'
など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。日付の指定の詳細は、DATEORDERオプションを参照してください。
nは、DAY、WEEK、MONTH、QUARTERまたはYEARディメンションのフェーズが開始または終了する期間を増減するINTEGER
式です。たとえば、開始フェーズが月曜日のWEEKディメンションに対しLATER 2
を指定すると、フェーズが水曜日に変更されます。
NOT
を含めると、一意の連結ディメンションが一意でない連結ディメンションに変更されます。NOT
を含めない場合は、一意でない連結ディメンションが一意の連結ディメンションに変更されます。連結ディメンションの詳細は、DEFINE DIMENSION CONCATコマンドを参照してください。
指定された変数にAggcount変数を追加します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。
指定された変数からAggcount変数を削除します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。
指定した変数にNA2ビットがない場合、NA2ビットを追加します。NA2ビットおよびNULLトラッキングに関する詳細は、「NA2ビットとNULLトラッキング」を参照してください。
指定した変数にNA2ビットがある場合、NA2ビットを削除します。
使用上の注意
変数セグメントの理解
セグメントとは、変数に格納される値の総数の一部に対し確保される、連続したディスク領域のことです。たとえば、SEGWIDTHが150
のmonth
とSEGWIDTHが90,000
のproduct
でディメンション化される変数の場合、各セグメントには150×90,000個まで変数値が格納されます。変数内のセグメント数は、データのロード時やデータへのアクセス時のパフォーマンスに影響します。
CHGDFN
SEGWIDTH
を指定しない場合、デフォルトの動作として、非コンポジット・ディメンションのSEGWIDTHに0
(ゼロ)が割り当てられ、ディメンション・セット内の最も変化の遅いディメンションではないコンポジットに大きな値が割り当てられます。この動作により、ほとんどの状況において、セグメント数を大幅に増やしてパフォーマンスを低下させることなく新しいディメンション値およびコンポジット値を追加することが可能になります。
SEGWIDTHを指定する場合は、変数のすべてのディメンションおよびコンポジットに対し、数値、0
(ゼロ)またはゼロ以外を指定する必要があります。
ディメンションのSEGWIDTHの値を0に設定すると、Oracle OLAPでは、セグメントの数を最小化するように(ただし既存のセグメントは変更しないで)、必要に応じてそのディメンション内のセグメントを拡大します。最も変化の遅いディメンションには、常に0
(ゼロ)を指定できますが、これは、ディメンションに後から追加されるどの値のデータも、変数の最後のセグメントにある既存のデータに追加されることになるためです。
指定するセグメント・サイズは、varnameに指定された変数のみでなく、同じディメンションとコンポジットの組合せが同じ順序で定義されているすべての変数およびリレーションに対しても適用されます。DEFINEコマンドは、変数またはリレーションの作成時にSEGWIDTHを設定します。SEGWIDTHの変更は、変更が行われた以降に作成する新しい変数またはリレーションに影響します。SEGWIDTHの設定の変更は、既存の変数またはリレーションには適用されません。
変数についてのデータのロード時間は、メモリーへ読み込まれ、書き出されるページ数により異なります。このページ数は変数のセグメント分割方法に影響を受ける場合があります。セグメントが多すぎる(数千から数百万)とパフォーマンスが低下する場合があります。「セグメント数の削減」を参照してください。
セグメント数はデータ・アクセス時のパフォーマンスにも影響します。これは、変数をレポートする時間が、メモリーに取り込まれる値の数により異なるためです。変数のセグメント数の決定は、データのロード・パターンとデータへのアクセス・パターンに基づいて行います。
DEFINEは、デフォルトのセグメントを提供します。ほとんどの場合、デフォルトのセグメントを使用できるため、CHGDFN SEGWIDTH
によって手動でセグメント・サイズを制御する必要はありません。ただし、デフォルトを使用せずにセグメント・サイズを指定することで、パフォーマンスを向上させることが可能な場合もあります。セグメント・サイズの決定基準がわからないときは、SEGWIDTHに対する長さ引数として、各ディメンションまたはコンポジットの値の推定最大数を使用します。この場合、変数には1つのセグメントのみが作成されます。
セグメント数の削減
OBJ(NUMSEGS)を使用して、特定のディメンション・セットを持つオブジェクトのセグメント数が多すぎるかどうかを確認できます。セグメント数が多すぎる場合、次の手順でセグメントの数を削減できます。
該当するディメンション・セットを使用する変数およびリレーションを、EIFファイルにエクスポートします。
ディメンション・セット内のディメンションに対し、MAINTAIN DELETE ALL文を実行します。
オプションで、このディメンション・セットを持つ変数またはリレーションにCHGDFN文を実行し、SEGWIDTHキーワードに対する長さ引数の値を増やします。
EIFファイルから、手順1でエクスポートしたすべての値をインポートします。
BTREEからNOHASHへの結合の索引アルゴリズムの変更
BTREEアルゴリズムで定義された結合ディメンションをNOHASH結合へ変更する必要がある場合は、次の方法で行います。
結合ディメンションとそれによってディメンション化されたすべてのオブジェクトを、EIFファイルにエクスポートします。
結合ディメンションによってディメンション化されたすべてのオブジェクトを削除し、さらに結合自体も削除します。
結合をNOHASH結合として再定義します。
結合ディメンションとそれによってディメンション化されたオブジェクトを、EIFファイルからインポートします。インポート時に、定義上のNOHASH属性によって、結合ディメンションがNOHASH結合として読み込まれます。
名前のないコンポジットから名前付き結合ディメンションへの変更
名前のないコンポジットを結合ディメンションに変更するには、まずRENAME文を使用して名前のないコンポジットを名前付きコンポジットに変更し、その後、CHGDFNを使用して名前付きコンポジットを結合ディメンションに変更します。
例
変数からNULLトラッキングを削除する例は、例9-104「NULLトラッキングを使用した変数の定義」を参照してください。
例9-62 CHGDFN SEGWIDTHの使用方法
ベース・ディメンションmarket
およびproduct
を持つコンポジットとmonth
によってディメンション化された、d.sales
という変数があるとします。d.sales
の定義は、次のようになります。
DEFINE d.sales VARIABLE DECIMAL <month SPARSE<market product>>
d.sales
変数が1つのセグメントのみを持つようにするとします。month
ディメンションには最終的に150個の値が、コンポジットには100,000個の値がそれぞれ格納されると見積もります。次の文では、d.sales
変数に1つのセグメントが作成されます。
CHGDFN d.sales SEGWIDTH 150 100000
ただし、d.sales
にセグメント・サイズを指定するためのより適切な方法は、最も変化の遅いディメンションに0を指定することです。
CHGDFN d.sales SEGWIDTH 150 0
1つのコンポジットと2つのディメンションで定義された変数のセグメントを1つにするとします。たとえば、次のような定義を持つf.costs
という変数があるとします。
DEFINE f.costs VARIABLE DECIMAL <geog SPARSE<product channel> time>
geog
ディメンションには100個の値が、コンポジットには300,000個の値が格納されるものと見積もります。time
ディメンションは最も変化の遅いディメンションなので、値の数を見積もる必要はありません。次の文によって、f.costs
変数に1つのセグメントが作成されます。
CHGDFN f.costs SEGWIDTH 100 300000 0
例9-63 YEARディメンションのフェーズの変更
まず次の文で会計年度用のYEAR型のディメンションを作成し、その後、CHGDFNを使用して会計年度用の新しい時間フェーズに切り替えます。
DEFINE fiscal DIMENSION year BEGINNING '06 01 96' CHGDFN fiscal BEGINNING '01 01 97'
例9-64 連結ディメンションへのベース・ディメンションの追加
次の文では、ベース・ディメンションとしてregion
ディメンションおよびdistrict
ディメンションを持つreg.dist.ccdim
という名前の一意でない連結ディメンションを作成し、連結の値をレポートします。
DEFINE reg.dist.ccdim DIMENSION CONCAT(region district) REPORT W 22 reg.dist.ccdim
この文によって生成される出力は、次のとおりです。
REG.DIST.CCDIM -------------------- <region: East> <region: Central> <region: West> <district: Boston> <district: Atlanta> <district: Chicago> <district: Dallas> <district: Denver> <district: Seattle>
次の文により、連結ディメンションにベースとしてstore_id
ディメンションが追加され、再度、連結の値がレポートされます。
CHGDFN reg.dist.ccd BASE ADD store_id REPORT W 22 reg.dist.ccd
この文によって生成される出力は、次のとおりです。
REG.DIST.CCD ---------------------- <region: East> <region: Central> <region: West> <district: Boston> ... <district: Seattle> <store_id: 10> <store_id: 20> <store_id: 30> <store_id: 100> ... <store_id: 500> <store_id: 510>