CREATE MATERIALIZED VIEW
説明
マテリアライズドビューを作成します。マテリアライズドビューの使用方法については、同期マテリアライズドビューおよび非同期マテリアライズドビューを参照してください。
注意
- ベーステーブルが存在するデータベースでCREATE MATERIALIZED VIEW権限を持つユーザーのみがマテリアライズドビューを作成できます。
- v3.4.0以降、StarRocksは共有データクラスタでの同期マテリアライズドビューの作成をサポートしています。
マテリアライズドビューの作成は非同期操作です。このコマンドが成功すると、マテリアライズドビューの作成タスクが正常に送信されたことを示します。データベース内の同期マテリアライズドビューの構築状況はSHOW ALTER MATERIALIZED VIEWコマンドで確認でき、非同期マテリアライズドビューの状況はメタデータビューtasks
およびtask_runs
をInformation Schemaでクエリすることで確認できます。
StarRocksはv2.4から非同期マテリアライズド ビューをサポートしています。以前のバージョンにおける非同期マテリアライズドビューと同期マテリアライズドビューの主な違いは次のとおりです。
単一テーブル集計 | 複数テーブルジョイン | クエリの書き換え | リフレッシュ戦略 | ベーステーブル | |
---|---|---|---|---|---|
ASYNC MV | はい | はい | はい |
| 複数のテーブルから:
|
SYNC MV (Rollup) | 集計関数の選択肢が限られる | いいえ | はい | データロード中の同期リフレッシュ | Default Catalog内の単一テーブル |
同期マテリアライズドビュー
構文
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
角括弧 [] 内のパラメータはオプションです。
パラメータ
mv_name (必須)
マテリアライズドビューの名前。命名要件は次のとおりです。
- 名前は文字 (a-z または A-Z)、数字 (0-9)、またはアンダースコア (_) で構成され、文字で始まる必要があります。
- 名前の長さは64文字を超えてはなりません。
- 名前は大文字と小文字を区別します。
COMMENT (オプション)
マテリアライズドビューに関するコメント。COMMENT
はmv_name
の後に配置する必要があります。そうでない場合、マテリアライズドビューは作成されません。
query_statement (必須)
マテリアライズドビューを作成するためのクエリステートメント。その結果がマテリアライズドビューのデータとなります。構文は次のとおりです。
SELECT select_expr[, select_expr ...]
[WHERE where_expr]
[GROUP BY column_name[, column_name ...]]
[ORDER BY column_name[, column_name ...]]
-
select_expr (必須)
クエリステートメント内のすべての列、つまりマテリアライズドビューのスキーマ内のすべての列。このパラメータは次の値をサポートします。
-
単純な列または集計列、例:
SELECT a, abs(b), min(c) FROM table_a
。ここでa
、b
、c
はベーステーブルの列名です。マテリアライズドビューの列名を指定しない場合、StarRocksは自動的に列に名前を付けます。 -
式、例:
SELECT a+1 AS x, b+2 AS y, c*c AS z FROM table_a
。ここでa+1
、b+2
、c*c
はベーステーブルの列を参照する式で、x
、y
、z
はマテリアライズドビューの列に割り当てられたエイリアスです。
注意
select_expr
で少なくとも1つの列を指定する必要があります。- 集計関数を持つ同期マテリアライズドビューを作成する場合、GROUP BY句を指定し、
select_expr
で少なくとも1つのGROUP BY列を指定する必要があります。 - 同期マテリアライズドビューはJOINやGROUP BYのHAVING句などの句をサポートしていません。
- v3.1以降、各同期マテリアライズドビューはベーステーブルの各列に対して複数の集計関数をサポートできます。例:
select b, sum(a), min(a) from table group by b
のようなクエリステートメント。 - v3.1以降、同期マテリアライズドビューはSELECTおよび集計関数の複雑な式をサポートします。例:
select b, sum(a + 1) as sum_a1, min(cast (a as bigint)) as min_a from table group by b
やselect abs(b) as col1, a + 1 as col2, cast(a as bigint) as col3 from table
のようなクエリステートメント。同期マテリアライズドビューで使用される複雑な式には次の制限があります:- 各複雑な式にはエイリアスが必要で、ベーステーブルのすべての同期マテリアライズドビュー間で異なる複雑な式には異なるエイリアスを割り当てる必要があります。例:
select b, sum(a + 1) as sum_a from table group by b
とselect b, sum(a) as sum_a from table group by b
のようなクエリステートメントは、同じベーステーブルに対して同期マテリアライズドビューを作成するために使用できません。複雑な式に異なるエイリアスを設定できます。 - 複雑な式で作成された同期マテリアライズドビューによってクエリが書き換えられているかどうかを確認するには、
EXPLAIN <sql_statement>
を実行します。詳細については、クエリ分析を参照してください。
- 各複雑な式にはエイリアスが必要で、ベーステーブルのすべての同期マテリアライズドビュー間で異なる複雑な式には異なるエイリアスを割り当てる必要があります。例:
-
-
WHERE (オプション)
v3.1.8以降、同期マテリアライズドビューはマテリアライズドビューに使用される行をフィルタリングするWHERE句をサポートします。
-
GROUP BY (オプション)
クエリのGROUP BY列。このパラメータが指定されていない場合、データはデフォルトでグループ化されません。
-
ORDER BY (オプション)
クエリのORDER BY列。
- ORDER BY句の列は、
select_expr
の列と同じ順序で宣言する必要があります。 - クエリステートメントにGROUP BY句が含まれている場合、ORDER BY列はGROUP BY列と同一でなければなりません。
- このパラメータが指定されていない場合、システムは次のルールに従ってORDER BY列を自動的に補完します:
- マテリアライズドビューがAGGREGATEタイプの場合、すべてのGROUP BY列が自動的にソートキーとして使用されます。
- マテリアライズドビューがAGGREGATEタイプでない場合、StarRocksはプレフィックス列に基づいてソートキーを自動的に選択します。
- ORDER BY句の列は、
同期マテリアライズドビューのクエリ
同期マテリアライズドビューは本質的にベーステーブルのインデックスであり、物理テーブルではないため、ヒント[_SYNC_MV_]
を使用してのみ同期マテリアライズドビューをクエリできます。
-- ヒント内の角括弧 [] を省略しないでください。
SELECT * FROM <mv_name> [_SYNC_MV_];
注意
現在、StarRocksは、エイリアスを指定しても同期マテリアライズドビューの列に対して自動的に名前を生成します。