説明
このステートメントは、マテリアライズドビューを作成するために使用します。
マテリアライズドビューは、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)更新される特殊なタイプのデータベースオブジェクトです。マテリアライズドビューには集計、結合、サブクエリなどの操作を含めることができ、さらにパフォーマンスを向上させるためにインデックスやパーティションを設定することも可能です。
権限要件
マテリアライズドビューを作成するには、CREATE TABLE 権限が必要です。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
CREATE MATERIALIZED VIEW view_name [([column_list] [PRIMARY KEY(column_list)])]
[table_option_list]
[partition_option]
[mv_column_group_option]
[refresh_clause [query_rewrite_clause] [on_query_computation_clause]]
AS view_select_stmt;
column_list:
column_name [, column_name ...]
refresh_clause:
REFRESH [refresh_option [PARALLEL n] [nested_refresh_option]] [mv_refresh_on_clause]
| NEVER REFRESH
refresh_option:
COMPLETE
| FAST
| FORCE
nested_refresh_option:
INDIVIDUAL
| INCONSISTENT
| CONSISTENT
mv_refresh_on_clause:
[ON DEMAND] [[START WITH expr] [NEXT expr]]
query_rewrite_clause:
DISABLE QUERY REWRITE
| ENABLE QUERY REWRITE
on_query_computation_clause:
DISABLE ON QUERY COMPUTATION
| ENABLE ON QUERY COMPUTATION
mv_column_group_option:
WITH COLUMN GROUP(all columns)
| WITH COLUMN GROUP(each column)
| WITH COLUMN GROUP(all columns, each column)
パラメータ説明
説明
マテリアライズドビューを作成するステートメントでは、インデックスを直接作成することはできません。マテリアライズドビューにインデックスを作成するには、CREATE INDEX ステートメントを別途使用する必要があります。
パラメータ |
説明 |
|---|---|
| view_name | 作成するマテリアライズドビューの名前を指定します。 |
| column_list | オプションです。マテリアライズドビューの列リストを指定します。ビューの列に明示的な名前を指定したい場合は、column_list句を使用し、カンマ区切りで列名を記述します。
説明
|
| column_name | マテリアライズドビューの列名を指定します。デフォルトでは、SELECT ステートメントで取得した列名がビューの列名として使用されます。 |
| PRIMARY KEY | マテリアライズドビューの主キーを指定するために使用されます。
注意
|
| table_option_list | オプションです。マテリアライズドビューのテーブルオプションを指定します。通常のテーブルと同様に、マテリアライズドビューでも個別にTable Optionを設定できます。詳細なパラメータ情報については、CREATE TABLEを参照してください。 |
| partition_option | オプションです。マテリアライズドビューのパーティションオプションを指定します。通常のテーブルと同様に、マテリアライズドビューでも個別にパーティションを設定できます。詳細なパラメータ情報については、CREATE TABLEを参照してください。 |
| mv_column_group_option | オプションです。マテリアライズドビューのストレージ形式を指定します。指定しない場合、デフォルトで行ストア形式のマテリアライズドビューが作成されます。詳細については、以下の mv_column_group_option を参照してください。 |
| refresh_clause | オプションです。マテリアライズドビューのリフレッシュ方式を指定します。詳細については、以下の refresh_clause を参照してください。 |
| mv_refresh_on_clause | オプションです。マテリアライズドビューのモード、すなわちリフレッシュのタイミングを指定します。詳細については、以下の mv_refresh_on_clause を参照してください。 |
| query_rewrite_clause | オプションです。現在のマテリアライズドビューで自動リライトを有効にするかどうかを指定します。詳細については、以下の query_rewrite_clause を参照してください。 |
| on_query_computation_clause | オプションです。現在のマテリアライズドビューがリアルタイムマテリアライズドビューかどうかを指定します。詳細については、以下の on_query_computation_clause を参照してください。 |
| view_select_stmt | マテリアライズドビューデータのクエリ(SELECT)ステートメントを定義するために使用されます。このステートメントは、ベーステーブルからデータを取得し、結果をマテリアライズドビューに格納します。view_select_stmt の構文は通常の SELECT ステートメントと同じです。構文情報については、SIMPLE SELECTを参照してください。
説明
|
mv_column_group_option
WITH COLUMN GROUP(all columns):行ストア形式のマテリアライズドビューを作成することを指定します。WITH COLUMN GROUP(each column):カラムストア形式のマテリアライズドビューを作成することを指定します。WITH COLUMN GROUP(all columns, each column):行ストアとカラムストアの冗長形式のマテリアライズドビューを作成することを指定します。
説明
SHOW CREATE TABLE view_name;またはSHOW CREATE VIEW view_name;コマンドを使用して、マテリアライズドビューの定義を確認し、そのストレージ形式を特定できます。- OceanBaseデータベースのOracleモードでは、
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW','view_name') FROM DUAL;を使用してマテリアライズドビューの定義を確認することもできます。
refresh_clause
REFRESH [refresh_option [PARALLEL n] [nested_refresh_option]] [mv_refresh_on_clause]:マテリアライズドビューのリフレッシュ方法と並列度を指定します。refresh_option:マテリアライズドビューのリフレッシュ方法を指定します。オプションです。リフレッシュ方法を指定しない場合、デフォルトはFORCEです。COMPLETE:フルリフレッシュを実行することを示します。これは、マテリアライズドビュー全体のデータを再計算し、ビュー内のデータがソーステーブルと完全に一致することを保証します。FAST:増分リフレッシュを実行することを示します。これは、ソーステーブルの変更に関連するデータのみをリフレッシュし、ビュー全体の完全な再計算を回避します。注意
REFRESH FASTメソッドは、マテリアライズドビューのログに記録された情報を使用して、増分リフレッシュが必要な内容を決定するため、増分リフレッシュでマテリアライズドビューを更新する場合は、マテリアライズドビューを作成する前に、ベーステーブルのマテリアライズドビューのログ(mlog)を作成する必要があります。- マテリアライズドビューで増分リフレッシュに使用される列はすべて、mlogに含まれている必要があります。
FORCE:デフォルト値で、ハイブリッドリフレッシュを実行することを示します。まず増分リフレッシュを試み、増分リフレッシュが失敗した場合はフルリフレッシュを実行します。nested_refresh_option:ネストされたマテリアライズドビューのリフレッシュポリシーを指定します。オプションです。リフレッシュポリシーを指定しない場合、デフォルトはINDIVIDUALです。取り得る値は以下のとおりです:INDIVIDUAL:デフォルト値で、独立リフレッシュを示します。INCONSISTENT:非一貫性のある連鎖リフレッシュを示します。CONSISTENT:一貫性のある連鎖リフレッシュを示します。
説明
非ネストされたマテリアライズドビューについては、連鎖リフレッシュの動作は存在せず、どのようなリフレッシュポリシーを指定しても意味がなく、デフォルトで独立リフレッシュが実行されます。指定可能な3つのリフレッシュポリシーは、バックグラウンドタスクでのみ有効となります。手動でPLパッケージ(DBMS_MVIEW.REFRESH)を使用してリフレッシュをスケジュールする場合、指定されたPLパラメータに従ってリフレッシュが実行されます。
PARALLEL n:リフレッシュの並列度を指定します。nは0以上の整数です。0の場合、システム変数mview_refresh_dopの値が使用されます。説明
V4.4.2バージョンでは、V4.4.2 BP2バージョンから、
REFRESH句内でREFRESH ... PARALLEL nを使用してリフレッシュの並列度を指定できるようになりました。
NEVER REFRESH:マテリアライズドビューをリフレッシュする必要がないことを指定します。つまり、マテリアライズドビューは作成時にのみリフレッシュされ、作成後は再度リフレッシュすることが許可されません。
mv_refresh_on_clause
説明
mv_refresh_on_clause 句を使用してリフレッシュ計画を定義するほかに、dbms_mviews.refresh ステアリングプロシージャを呼び出してマテリアライズドビューを手動でリフレッシュすることもできます。
ON DEMAND:オプションです。オンデマンドでマテリアライズドビューをリフレッシュすることを示します。[[START WITH expr] [NEXT expr]]:オプションです。リフレッシュ間隔を定義します。[START WITH expr]:オプションです。リフレッシュ計画の開始時刻を表す式です。[NEXT expr]:オプションです。次回のリフレッシュ時刻を表す式です。注意
NEXT句を使用する場合、リフレッシュ計画の時間式は将来の時刻に設定する必要があります。そうでない場合、エラーが発生します。- マテリアライズドビューのリフレッシュタスクを定期的に自動実行させたい場合は、
NEXTを定義してスケジュール間隔を設定してください。
現在のタイムゾーンの時間を表すには current_date の使用を推奨します。時間式の例:
現在の時間(
current_date)から、10秒ごとにマテリアライズドビューをリフレッシュします。START WITH current_date NEXT current_date + INTERVAL '10' SECOND現在の時間(
current_date)から、10時間ごとにマテリアライズドビューをリフレッシュします。START WITH current_date NEXT current_date + INTERVAL '10' HOUR現在の時間(
current_date)から、1日ごとにマテリアライズドビューをリフレッシュします。START WITH current_date NEXT current_date + 1
query_rewrite_clause
注意
- この機能を使用するには、マテリアライズドビューに
SELECT JOINとWHERE句、つまりSPJクエリのみが含まれている必要があります。条件を満たさないマテリアライズドビューはエラーにはなりませんが、リライトには使用されません。 - OceanBaseデータベースのOracleモードでは、リライトをサポートするマテリアライズドビューを作成する際には、リフレッシュ方法(
refresh_clause)を指定する必要があります。
DISABLE QUERY REWRITE:デフォルト値です。現在のマテリアライズドビューで自動リライトを有効にしないよう指定します。ENABLE QUERY REWRITE:現在のマテリアライズドビューで自動リライトを有効にするよう指定します。
マテリアライズドビューのリライトに関する詳細は、マテリアライズドビューのクエリリライトを参照してください。
on_query_computation_clause
注意
OceanBaseデータベースのOracleモードでは、リアルタイムマテリアライズドビューを作成する際には、リフレッシュ方法(refresh_clause)を指定する必要があります。
DISABLE ON QUERY COMPUTATION:デフォルト値で、通常のマテリアライズドビューを作成します。ENABLE ON QUERY COMPUTATION:リアルタイムマテリアライズドビューを作成します。注意
MIN/MAX関数を使用するマテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。- 外部結合を含む複合マテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。
- 集合クエリを含むマテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。
- ネストされたマテリアライズドビューは、リアルタイムマテリアライズドビューとして作成できません。
リアルタイムマテリアライズドビューの詳細については、マテリアライズドビューの作成 の リアルタイムマテリアライズドビューの作成 セクションを参照してください。
例
テーブル
test_tbl1を作成します。CREATE TABLE test_tbl1 (col1 NUMBER PRIMARY KEY, col2 VARCHAR2(20), col3 NUMBER, col4 NUMBER);mv_test_tbl1という名前のマテリアライズドビューを作成します。マテリアライズドビューをcol1列に基づいてHashパーティショニングし、8つのパーティションに分割します。完全更新方式を使用してマテリアライズドビューを更新し、現在の日付から更新を開始し、1日ごとに更新します。test_tbl1テーブルの条件col3 >= 30を満たすレコードをベーステーブルとしてクエリし、そのクエリ結果をマテリアライズドビューのデータとします。CREATE MATERIALIZED VIEW mv_test_tbl1 PARTITION BY HASH(col1) PARTITIONS 8 REFRESH COMPLETE START WITH current_date NEXT current_date + 1 AS SELECT col1, col2, col3 FROM test_tbl1 WHERE col3 >= 30;mv2_test_tbl1という名前のマテリアライズドビューを作成し、主キーを指定します。CREATE MATERIALIZED VIEW mv2_test_tbl1(c1, c2, c3, PRIMARY KEY(c1)) AS SELECT col1, col2, col3 FROM test_tbl1;カラムストア形式のマテリアライズドビュー
mv3_test_tbl1を作成します。CREATE MATERIALIZED VIEW mv3_test_tbl1 WITH COLUMN GROUP(each column) AS SELECT col1, col2, col3 FROM test_tbl1;マテリアライズドビュー
mv3_test_tbl1の定義を確認します。SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW','MV3_TEST_TBL1') FROM DUAL;