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は、エイリアスを指定しても同期マテリアライズドビューの列に対して自動的に名前を生成します。
同期マテリアライズドビューによる自動クエリの書き換え
同期マテリアライズドビューのパターンに従ったクエリが実行されると、元のクエリステートメントが自動的に書き換えられ、マテリアライズドビューに保存された中間結果が使用されます。
次の表は 、元のクエリの集計関数とマテリアライズドビューを構築するために使用される集計関数の対応を示しています。ビジネスシナリオに応じて、対応する集計関数を選択してマテリアライズドビューを構築できます。
元のクエリの集計関数 | マテリアライズドビューの集計関数 |
---|---|
sum | sum |
min | min |
max | max |
count | count |
bitmap_union, bitmap_union_count, count(distinct) | bitmap_union |
hll_raw_agg, hll_union_agg, ndv, approx_count_distinct | hll_union |
percentile_approx, percentile_union | percentile_union |
上記の関数に加えて、StarRocks v3.4.0以降では、同期マテリアライズドビューは汎用集計関数もサポートしています。汎用集計関数の詳細については、汎用集計関数の状態を参照してください。
-- Create a synchronous materialized view test_mv1 to store aggregate states.
CREATE MATERIALIZED VIEW test_mv1
AS
SELECT
dt,
-- Original aggregate functions.
min(id) AS min_id,
max(id) AS max_id,
sum(id) AS sum_id,
bitmap_union(to_bitmap(id)) AS bitmap_union_id,
hll_union(hll_hash(id)) AS hll_union_id,
percentile_union(percentile_hash(id)) AS percentile_union_id,
-- Generic aggregate state functions.
ds_hll_count_distinct_union(ds_hll_count_distinct_state(id)) AS hll_id,
avg_union(avg_state(id)) AS avg_id,
array_agg_union(array_agg_state(id)) AS array_agg_id,
min_by_union(min_by_state(province, id)) AS min_by_province_id
FROM t1
GROUP BY dt;
非同期マテリアライズドビュー
構文
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
-- `distribution_desc`または`refresh_scheme`のいずれか、または両方を指定する必要があります。
-- distribution_desc
[DISTRIBUTED BY HASH(<bucket_key>[,<bucket_key2> ...]) [BUCKETS <bucket_number>]]
-- refresh_desc
[REFRESH
-- refresh_moment
[IMMEDIATE | DEFERRED]
-- refresh_scheme
[ASYNC | ASYNC [START (<start_time>)] EVERY (INTERVAL <refresh_interval>) | MANUAL]
]
-- partition_expression
[PARTITION BY
{<date_column> | date_trunc(fmt, <date_column>)}
]
-- order_by_expression
[ORDER BY (<sort_key>)]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
角括弧 [] 内のパラメータはオプションです。
パラメータ
mv_name (必須)
マテリアライズドビューの名前。命名要件は次のとおりです。
- 名前は文字 (a-z または A-Z)、数字 (0-9)、またはアンダースコア (_) で構成され、文字で始まる必要があります。
- 名前の長さは64文字を超えてはなりません。
- 名前は大文字と小文字を区別します。
注意
同じベーステーブルに対して複数のマテリアライズドビューを作成できますが、同じデータベース内でマテリアライズドビューの名前を重複させることはできません。
COMMENT (オプション)
マテリアライズドビューに関するコメント。COMMENT
はmv_name
の後に配置する必要があります。そうでない場合、マテリアライズドビューは作成されません。
distribution_desc (オプション)
非同期マテリアライズドビューのバケット戦略。StarRocksはハッシュバケット法とランダムバケット法 (v3.1以降) をサポートしています。このパラメータを指定しない場合、StarRocksはランダムバケット戦略を使用し、バケット数を自動 的に設定します。
注意
非同期マテリアライズドビューを作成する際、
distribution_desc
またはrefresh_scheme
のいずれか、または両方を指定する必要があります。
-
ハッシュバケット法:
構文
DISTRIBUTED BY HASH (<bucket_key1>[,<bucket_key2> ...]) [BUCKETS <bucket_number>]
詳細については、データ分散を参照してください。
注意
v2.5.7以降、StarRocksはテーブルを作成する際やパーティションを追加する際にバケット数 (BUCKETS) を自動的に設定できます。バケット数を手動で設定する必要はありません。詳細については、バケット数の設定を参照してください。
-
ランダムバケット法:
ランダムバケット戦略を選択し、StarRocksにバケット数を自動的に設定させる場合、
distribution_desc
を指定する必要はありません。ただし、バケット数を手動で設定したい場合は、次の構文を参照してください。DISTRIBUTED BY RANDOM BUCKETS <bucket_number>
注意
ランダムバケット戦略を持つ非同期マテリアライズドビューは、コロケーショングループに割り当てることができません。
詳細については、ランダムバケット法を参照してください。
refresh_moment (オプション)
マテリアライズドビューのリフレッシュタイミング。デフォルト値: IMMEDIATE
。有効な値:
IMMEDIATE
: 非同期マテリアライズドビューは作成後すぐにリフレッシュされます。DEFERRED
: 非同期マテリアライズドビューは作成後にリ フレッシュされません。マテリアライズドビューを手動でリフレッシュするか、定期的なリフレッシュタスクをスケジュールできます。
refresh_scheme (オプション)
注意
非同期マテリアライズドビューを作成する際、
distribution_desc
またはrefresh_scheme
のいずれか、または両方を指定する必要があります。
非同期マテリアライズドビューのリフレッシュ戦略。有効な値:
ASYNC
: 自動リフレッシュモード。ベーステーブルデータが変更されるたびに、マテリアライズドビューが自動的にリフレッシュされます。ASYNC [START (<start_time>)] EVERY(INTERVAL <interval>)
: 定期リフレッシュモード。定義された間隔でマテリアライズドビューが定期的にリフレッシュされます。間隔はEVERY (interval n day/hour/minute/second)
として指定できます。使用可能な単位はDAY
、HOUR
、MINUTE
、SECOND
です。デフォルト値は10 MINUTE
です。リフレッシュ開始時間をSTART('yyyy-MM-dd hh:mm:ss')
としてさらに指定できます。開始時間が指定されていない場合、現在の時間が使用されます。例:ASYNC START ('2023-09-12 16:30:25') EVERY (INTERVAL 5 MINUTE)
。MANUAL
: 手動リフレッシュモード。リフレッシュタスクを手動でトリガーしない限り、マテリアライズドビューはリフレッシュされません。
このパラメータが指定されていない場合、デフォルト値MANUAL
が使用されます。
partition_expression (オプション)
非同期マテリアラ イズドビューのパーティション戦略。StarRocksの現在のバージョンでは、非同期マテリアライズドビューを作成する際に1つのパーティション式のみがサポートされています。
注意
v3.3.3以降、StarRocksはリストパーティション化戦略を使用した非同期マテリアライズドビューの作成をサポートしています。
- リストパーティション化または式に基づくパーティション化戦略で作成されたテーブルに基づいて、リストパーティション化されたマテリアライズドビューを作成できます。
- 現在、リストパーティション化戦略でマテリアライズドビューを作成する際には、1つのパーティションキーのみを指定できます。ベーステーブルに複数のパーティションキーがある場合は、1つのパーティションキーを選択する必要があります。
- リストパーティション化戦略を持つマテリアライズドビューのリフレッシュ動作とクエリの書き換えロジックは、レンジパーティション化戦略を持つものと一致しています。
有効な値:
column_name
: パーティション化に使用される列の名前。PARTITION BY dt
という式は、dt
列に従ってマテリアライズドビューをパーティション化することを意味します。date_trunc
関数: 時間単位を切り捨てるために使用される関数。PARTITION BY date_trunc("MONTH", dt)
は、dt
列を月単位で切り捨ててパーティション化することを意味します。date_trunc
関数は、YEAR
、MONTH
、DAY
、HOUR
、MINUTE
の単位で時間を切り捨てることをサポ ートします。str2date
関数: ベーステーブルの文字列型パーティションをマテリアライズドビューのパーティションに変換するために使用される関数。PARTITION BY str2date(dt, "%Y%m%d")
は、dt
列が"%Y%m%d"
の日付形式を持つ文字列日付型であることを意味します。str2date
関数は多くの日付形式をサポートしており、詳細についてはstr2dateを参照してください。v3.1.4からサポートされています。time_slice
関数: v3.1以降、これらの関数を使用して、指定された時間の粒度に基づいて、与えられた時間を時間間隔の開始または終了に変換することができます。例:PARTITION BY date_trunc("MONTH", time_slice(dt, INTERVAL 7 DAY))
。time_sliceはdate_truncよりも細かい粒度を持たなければなりません。これらを使用して、パーティションキーよりも細かい粒度を持つGROUP BY列を指定することができます。例:GROUP BY time_slice(dt, INTERVAL 1 MINUTE) PARTITION BY date_trunc('DAY', ts)
。
このパラメータが指定されていない場合、デフォルトではパーティション戦略は採用されません。
order_by_expression (オプション)
非同期マテリアライズドビューのソートキー。このソートキーを指定しない場合、StarRocksはSELECT列からいくつかのプレフィックス列をソートキーとして選択します。例: select a, b, c, d
では、ソートキーとしてa
とb
を使用できます。このパラメータはStarRocks v3.0以降でサポートされています。
注意 マテリ アライズドビューには2つの異なる
ORDER BY
の使用方法があります:
- CREATE MATERIALIZED VIEWステートメントの
ORDER BY
はマテリアライズドビューのソートキーを定義し、ソートキーに基づくクエリの加速に役立ちます。これはマテリアライズドビューのSPJGベースの透過的加速機能には影響しませんが、マテリアライズドビューのクエリ結果のグローバルソートを保証しません。- マテリアライズドビューのクエリ定義の
ORDER BY
はクエリ結果のグローバルソートを保証しますが、マテリアライズドビューがSPJGベースの透過的クエリの書き換えに使用されることを防ぎます。したがって、マテリアライズドビューがクエリの書き換えに使用される場合、マテリアライズドビューのクエリ定義でORDER BY
を使用すべきではありません。
INDEX (オプション)
非同期マテリアライズドビューは、クエリパフォーマンスを高速化するために Bitmap インデックスと BloomFilter インデックスをサポートしています。Bitmap インデックスと BloomFilter インデックスの使用例と情報の詳細については、Bitmap Index と Bloom filter Index を参照してください。
Bitmap インデックスの使用:
-- インデックスを作成する
CREATE INDEX <index_name> ON <mv_name>(<column_name>) USING BITMAP COMMENT '<comment>';
-- インデックス作成の状況を確認する
SHOW ALTER TABLE COLUMN;
-- インデックスを確認する
SHOW INDEXES FROM <mv_name>;
-- インデックスを削除する
DROP INDEX <index_name> ON <mv_name>;
BloomFilter インデックスの使用:
-- インデックスを作成する
ALTER MATERIALIZED VIEW <mv_name> SET ("bloom_filter_columns" = "<col1,col2,col3,...>");
-- インデックスを確認する
SHOW CREATE MATERIALIZED VIEW <mv_name>;
-- インデックスを削除する
ALTER MATERIALIZED VIEW <mv_name> SET ("bloom_filter_columns" = "");
PROPERTIES (オプション)
非同期マテリアライズドビューのプロパティ。既存のマテリアライズドビューのプロパティを変更するには、ALTER MATERIALIZED VIEWを使用できます。
-
session.
: マテリアライズドビューのセッション変数関連のプロパティを変更したい場合、プロパティにsession.
プレフィックスを追加する必要があります。例:session.insert_timeout
。非セッションプロパティの場合、プレフィックスを指定する必要はありません。例:mv_rewrite_staleness_second
。 -
replication_num
: 作成するマテリアライズドビューのレプリカの数。 -
storage_medium
: 記憶媒体のタイプ。有効な値:HDD
とSSD
。 -
storage_cooldown_time
: パーティションのストレージクールダウン時間。HDDとSSDの両方の記憶媒体が使用されている場合、このプロパティで指定された時間の後、SSDストレージのデータはHDDストレージに移動されます。形式: "yyyy-MM-dd HH:mm:ss"。指定された時間は現在の時間より後でなければなりません。このプロパティが明示的に指定されていない場合、デフォルトではストレージクールダウンは実行されません。 -
bloom_filter_columns
: BloomFilter インデックスを有効にするカラム名の配列。BloomFilter インデックスについての詳細は、ブルーム・フィルター・インデックス を参照ください。 -
partition_ttl
: パーティションの有効期限 (TTL)。指定された時間範囲内のデータを持つパーティションが保持されます。期限切れのパーティションは自動的に削除されます。単位:YEAR
、MONTH
、DAY
、HOUR
、MINUTE
。例:2 MONTH
としてこのプロパティを指定できます。このプロパティはpartition_ttl_number
より推奨されます。v3.1.5以降でサポートされています。 -
partition_ttl_number
: 保持する最新のマテリアライズドビューのパーティション数。開始時間が現在の時間より前のパーティションについて、この値を超えると、古いパーティションが削除されます。StarRocksはFE設定項目dynamic_partition_check_interval_seconds
で指定された時間間隔に従ってマテリアライズドビューパーティションを定期的にチェックし、期限切れのパーティションを自動的に削除します。動的パーティション化戦略を有効にした場合、事前に作成されたパーティションはカウントされません。値が-1
の場合、マテリアライズドビューのすべてのパーティションが保持されます。デフォルト:-1
。 -
partition_refresh_number
: 単一のリフレッシュでリフレッシュする最大パーティション数。リフレッシュするパーティションの数がこの値を超える場合、StarRocksはリフレッシュタスクを分割し、バッチで完了します。前のバッチのパーティションが正常にリフレッシュされると、StarRocksは次のバッチのパーティションをリフレッシュし続け、すべてのパーティションがリフレッシュされるまで続けます。パーティションのいずれかがリフレッシュに失敗した場合、後続のリフレッシュタスクは生成されません。値が-1
の場合、リフレッシュタスクは分割されません 。デフォルト値はv3.3以降-1
から1
に変更され、StarRocksはパーティションを1つずつリフレッシュします。 -
excluded_trigger_tables
: マテリアライズドビューのベーステーブルがここにリストされている場合、ベーステーブルのデータが変更されても自動リフレッシュタスクはトリガーされません。このパラメータはロードトリガー型リフレッシュ戦略にのみ適用され、通常はプロパティauto_refresh_partitions_limit
と一緒に使用されます。形式:[db_name.]table_name
。値が空文字列の場合、すべてのベーステーブルのデータ変更が対応するマテリアライズドビューのリフレッシュをトリガーします。デフォルト値は空文字列です。 -
excluded_refresh_tables
: このプロパティにリストされているベーステーブルは、データが変更されてもマテリアライズドビューに更新されません。フォーマットdb_name.]table_name
。デフォルト値は空文字列です。値が空文字列の場合、ベーステーブルのデータが変更されると、対応するマテリアライズドビューが更新されます。ヒントexcluded_trigger_tables
とexcluded_refresh_tables
の違いは以下の通りである:excluded_trigger_tables
はリフレッシュをトリガーするかどうかを制御するものであり、リフレッシュに参加するかどうかを制御するものではありません。例えば、パーティショニングされたマテリアライズドビューは 2 つのパーティショニングされたテーブル A と B を結合することで得られ、2 つのテーブル A と B のパーティショニングは 1 対 1 に対応します。excluded_trigger_table
はテーブル A を含んでいる。ある期間中、テーブル A はパーティション[1,2,3]
を更新したが、excluded_trigger_table
であるため、マテリアライズドビューのリフレッシュはトリガーされなかった。この時、テーブル B はパーティション[3]
を更新し、マテリアライズドビューはリフレッシュをトリガーして、3 つのパーティション[1, 2, 3]
をリフレッシュします。ここで、excluded_trigger_table
はリフレッシュをトリガーするかどうかを制御するだけであることがわかります。テーブル A の更新がマテリアライズドビューのリフレッシュのトリガーになることはありませんが、テーブル B の更新がマテリアライズドビューのリフレッシュのトリガーになると、テーブルAによって更新されたパーティションもリフレッシュタスクに追加されます。excluded_refresh_tables
はリフレッシュに参加するかどうかを制御します。上の例では、テーブル A がexcluded_trigger_table
とexcluded_refresh_tables
の両方に存在する場合、テ ーブル B の更新がマテリアライズドビューのリフレッシュのトリガーになると、パーティション[3]
だけがリフレッシュされます。
-
auto_refresh_partitions_limit
: マテリアライズドビューのリフレッシュがトリガーされたときにリフレッシュする必要がある最新のマテリアライズドビューパーティションの数。このプロパティを使用してリフレッシュ範囲を制限し、リフレッシュコストを削減できます。ただし、すべてのパーティションがリフレッシュされないため、マテリアライズドビューのデータがベーステーブルと一致しない場合があります。デフォルト:-1
。値が-1
の場合、すべてのパーティションがリフレッシュされます。値が正の整数Nの場合、StarRocksは既存のパーティションを時系列順に並べ替え、現在のパーティションとN-1の最新パーティションをリフレッシュします。パーティションの数がN未満の場合、StarRocksはすべての既存のパーティションをリフレッシュします。マテリアライズドビューに事前に作成された動的パーティションがある場合、StarRocksはすべての事前作成されたパーティションをリフレッシュします。 -
mv_rewrite_staleness_second
: マテリアライズドビューの最終リフレッシュがこのプロパティで指定された時間間隔内である場合、マテリアライズドビューはクエリの書き換えに直接使用できます。ベーステーブルのデータが変更されているかどうかに関係なく、マテリアライズドビューがクエリの書き換えに使用されるかどうかを決定します。単位: 秒。このプロパティはv3.0からサポートされています。 -
colocate_with
: 非同期マテリアライズドビューのコロケーショングループ。詳細については、Colocate Joinを参照してください。このプロパティはv3.0からサポートされています。 -
unique_constraints
およびforeign_key_constraints
: View Delta Joinシナリオでクエリの書き換えを行うために非同期マテリアライズドビューを作成する際のユニークキー制約と外部キー制約。詳細については、非同期マテリアライズドビュー - View Delta Joinシナリオでのクエリの書き換えを参照してください。このプロパティはv3.0からサポートされています。 -
excluded_refresh_tables
: このプロパティにリストされているベーステーブルのデータが変更されても、マテリアライズドビューへのデータリフレッシュはトリガーされません。このプロパティは通常、excluded_trigger_tables
プロパティと一緒に使用されます。形式:[db_name.]table_name
。デフォルト値は空文字列です。値が空文字列の場合、すべてのベーステーブルのデータ変更が対応するマテリアライズドビューのリフレッシュをトリガーします。注意
ユニークキー制約と外部キー制約はクエリの書き換えにのみ使用されます。外部キー制約のチェックは、テーブルにデータがロードされるときに保証されません。テーブルにロードされるデータが制約を満たしていることを確認する必要があります。
-
resource_group
: マテリアライズドビューのリフレッシュタスクが属するリソースグループ。このプロパティのデフォルト値はdefault_mv_wg
で、マテリアライズドビューのリフレッシュ専用に使用されるシステム定義のリソースグループです。default_mv_wg
のcpu_core_limit
は1
、mem_limit
は0.8
です。リソースグループの詳細については、リソースグループを参照してください。 -
query_rewrite_consistency
: 非同期マテリアライズドビューのクエリの書き換えルール。このプロパティはv3.2からサポートされています。有効な値:disable
: 非同期マテリアライズドビューの自動クエリの書き換えを無効にします。checked
(デフォルト値): マテリアライズドビューが新鮮さの要件を満たしている場合にのみ自動クエリの書き換えを有効にします。つまり:mv_rewrite_staleness_second
が指定されていない場合、マテリアライズドビューはそのデータがすべてのベーステーブルのデータと一致している場合にのみクエリの書き換えに使用できます。mv_rewrite_staleness_second
が指定されている場合、マテリアライズドビューはその最終リフレッシュが新鮮さの時間間隔内である場合にクエリの書き換えに使用できます。
loose
: 自動クエリの書き換えを直接有効にし、一貫性のチェックは必要ありません。
-
storage_volume
: 共有データクラスタを使用している場合、作成する非同期マテリアライズドビューを保存するために使用されるストレージボ リュームの名前。このプロパティはv3.1以降でサポートされています。このプロパティが指定されていない場合、デフォルトのストレージボリュームが使用されます。例:"storage_volume" = "def_volume"
。 -
force_external_table_query_rewrite
: 外部カタログベースのマテリアライズドビューのクエリの書き換えを有効にするかどうか。このプロパティはv3.2からサポートされています。有効な値:true
(v3.3以降のデフォルト値): 外部カタログベースのマテリアライズドビューのクエリの書き換えを有効にします。false
: 外部カタログベースのマテリアライズドビューのクエリの書き換えを無効にします。
外部カタログベースのマテリアライズドビューとベーステーブル間の強いデータ一貫性は保証されないため、この機能はデフォルトで
false
に設定されています。この機能を有効にすると、query_rewrite_consistency
で指定されたルールに従ってマテリアライズドビューがクエリの書き換えに使用されます。 -
enable_query_rewrite
: マテリアライズドビューをクエリの書き換えに使用するかどうか。マテリアライズドビューが多い場合、マテリアライズドビューに基づくクエリの書き換えはオプティマイザの時間消費に影響を与える可能性があります。このプロパティを使用して、マテリアライズドビューがクエリの書き換えに使用できるかどうかを制御できます。この機能はv3.3.0以降でサポートされています。有効な値:default
(デフォルト): システムはマテリアライズドビューに対してセマンティックチェックを行いませんが、SPJGタイプのマテリアライズドビューのみがクエリの書き換えに使用できます。テキストベースのクエリの書き換えが有効になっている場合、非SPJGタイプのマテリアライズドビューもクエリの書き換えに使用できます。true
: マテリアライズドビューの作成または変更時にシステムがセマンティックチェックを行います。マテリアライズドビューがクエリの書き換えに適していない場合 (つまり、マテリアライズドビューの定義がSPJGタイプのクエリではない場合)、失敗が返されます。false
: マテリアライズドビューはクエリの書き換えに使用されません。
-
[プレビュー]
transparent_mv_rewrite_mode
: マテリアライズドビューに直接対するクエリの透過的な書き換えモードを指定します。この機能はv3.3.0以降でサポートされています。有効な値:false
(デフォルト、以前のバージョンの動作と互換性あり): マテリアライズドビューに直接対するクエリは書き換えられず、マテリアライズドビューに存在するデータのみが返されます。これらのクエリの結果は、マテリアライズドビューの定義に基づくクエリの結果と、マテリアライズドビューのリフレッシュ状態 (データの一貫性) に応じて異なる場合があります。true
: マテリアライズドビューに直接対するクエリは書き換えられ、マテリアライズドビューの定義クエリの結果と一致する最新のデータが返されます。マテリアライズドビューが非アクティブであるか、透過的なクエリの書き換えをサポートしていない場合、これらのクエリはマテリアライズドビューの定義クエリとして実行されます。transparent_or_error
: マテリアライズドビューに直接対するクエリは、適格であれば書き換えられます。マテリアライズドビューが非アクティブであるか、透過的なクエリの書き換えをサポートしていない場合、これらのクエリはエラーとして返されます。transparent_or_default
: マテリアライズドビューに直接対するクエリは、適格であれば書き換えられます。マテリアライズドビューが非アクティブであるか、透過的なクエリの書き換えをサポートしていない場合、これらのクエリはマテリアライズドビューに存在するデータで返されます。
query_statement (必須)
非同期マテリアライズドビューを作成するためのクエリステートメント。v3.1.6以降、StarRocksはCommon Table Expression (CTE)を使用した非同期マテリアライズドビューの作成をサポートしています。
非同期マテリアライズドビューのクエリ
非同期マテリアライズドビューは物理テーブルです。通常のテーブルと同様に操作できますが、非同期マテリアライズドビューに直接データをロードすることはできません。
非同期マテリアライズドビューによる自動クエリの書き換え
StarRocks v2.5は、SPJGタイプの非同期マテリアライズドビューに基づく自動かつ透過的なクエリの書き換えをサポートしています。SPJGタイプのマテリアライズドビューは、プランにScan、Filter、Project、Aggregateタイプのオペレーターのみを含むマテリアライズドビューを指します。SPJGタイプのマテリアライズドビューのクエリの書き換えには、単一テーブルのクエリの書き換え、ジョインクエリの書き換え、集計クエリの書き換え、ユニオンクエリの書き換え、およびネストされたマテリアライズドビューに基づくクエリの書き換えが含まれます。
詳細については、非同期マテリアライズドビュー - 非同期マテリアライズドビューを使用したクエリの書き換えを参照してください。
サポートされているデータ型
-
StarRocksのデフォルトカタログに基づいて作成された非同期マテリアライズドビューは、次のデータ型をサポートしています:
- 日付: DATE, DATETIME
- 文字列: CHAR, VARCHAR
- 数値: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, PERCENTILE
- 半構造化: ARRAY, JSON, MAP (v3.1以降), STRUCT (v3.1以降)
- その他: BITMAP, HLL
注意
BITMAP, HLL, PERCENTILEはv2.4.5以降でサポートされています。
-
StarRocksの外部カタログに基づいて作成された非同期マテリアライズドビューは、次のデータ型をサポートしています:
-
Hive Catalog
- 数値: INT/INTEGER, BIGINT, DOUBLE, FLOAT, DECIMAL
- 日付: TIMESTAMP
- 文字列: STRING, VARCHAR, CHAR
- 半構造化: ARRAY
-
Hudi Catalog
- 数値: BOOLEAN, INT, LONG, FLOAT, DOUBLE, DECIMAL
- 日付: DATE, TimeMillis/TimeMicros, TimestampMillis/TimestampMicros
- 文字列: STRING
- 半構造化: ARRAY
-
Iceberg Catalog
- 数値: BOOLEAN, INT, LONG, FLOAT, DOUBLE, DECIMAL(P, S)
- 日付: DATE, TIME, TIMESTAMP
- 文字列: STRING, UUID, FIXED(L), BINARY
- 半構造化: LIST
-
使用上の注意
-
現在のバージョンのStarRocksは、同時に複数のマテリアライズドビューを作成することをサポートしていません。新しいマテリアライズドビューは、前のものが完了したときにのみ作成できます。
-
同期マテリアライズドビューについて:
- 同期マテリアライズドビューは、単一の列に対する集計関数のみをサポートします。
sum(a+b)
の形式のクエリステートメントはサポートされていません。 - 同期マテリアライズドビューは、ベーステーブルの各列に対して1つの集計関数のみをサポートします。
select sum(a), min(a) from table
のようなクエリステートメントはサポートされていません。 - 集計関数を持つ同期マテリアライズドビューを作成する場合、GROUP BY句を指定し、SELECTで少なくとも1つのGROUP BY列を指定する必要があります。
- 同期マテリアライズドビューは、JOINやGROUP BYのHAVING句などの句をサポートしていません。
- ALTER TABLE DROP COLUMNを使用してベーステーブルの特定の列を削除する場合、ベーステーブルのすべての同期マテリアライズドビューに削除された列が含まれていないことを確認する必要があります。そうでない場合、削除操作は失敗します。列を削除する前に、その列を含むすべての同期マテリアライズドビューを削除する必要があります。
- テーブルに対して同期マテリアライズドビューを作成しすぎると、データロードの効率に影響を与えます。ベーステーブルにデータがロードされるとき、同期マテリアライズドビューとベーステーブルのデータが同期的に更新されます。ベーステーブルに
n
個の同期マテリアライズドビューが含まれている場合、ベーステーブルにデータをロードする効率はn
個のテーブルにデータをロードする効率とほぼ同じです。
- 同期マテリアライズドビューは、単一の列に対する集計関数のみをサポートします。
-
ネストされた非同期マテリアライズドビューについて: