説明
このステートメントは、マテリアライズドビューを作成するために使用します。
マテリアライズドビューは、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)更新される特殊なタイプのデータベースオブジェクトです。マテリアライズドビューには集計、結合、サブクエリなどの操作を含めることができ、インデックスやパーティションを設定することでさらにパフォーマンスを向上させることができます。
権限要件
マテリアライズドビューを作成するには、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 [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 [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パラメータに従って更新が実行されます。
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;