メインコンテンツまでスキップ

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW

説明

マテリアライズドビューを作成します。マテリアライズドビューの使用方法については、同期マテリアライズドビュー非同期マテリアライズドビュー を参照してください。

注意

マテリアライズドビューを作成するためには、ベーステーブルが存在するデータベースのCREATE MATERIALIZED VIEW権限を持つユーザーのみで作成することができます。

マテリアライズドビューの作成は非同期の操作です。このコマンドの実行が成功すると、マテリアライズドビューの作成タスクが正常に送信されたことを示します。同期マテリアライズドビューのビルドステータスは、 SHOW ALTER MATERIALIZED VIEW コマンドを使用してデータベース内で確認できます。非同期マテリアライズドビューのビルドステータスは、Information Schematasks テーブルと task_runs テーブルをクエリすることで確認できます。

StarRocks では、v2.4 から非同期マテリアライズドビューをサポートしています。以前のバージョンの同期マテリアライズドビューと非同期マテリアライズドビューの主な違いは次のとおりです。

シングルテーブル集計

マルチテーブル結合

クエリ書き換え

リフレッシュ戦略

ベーステーブル

ASYNC MV

あり

あり

あり

  • 非同期リフレッシュ
  • 手動リフレッシュ

デフォルトカタログ、

  • 外部カタログ(v2.5)
  • 既存のマテリアライズドビュー(v2.5)
  • 既存のビュー(v3.1)

SYNC MV (ロールアップ)

制約がある集約関数の選択肢

なし

あり

データのロード中に同期リフレッシュ

デフォルトカタログにある個別のテーブル

同期マテリアライズドビュー

構文

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(オプション)

マテリアライズドビューに対するコメントです。 COMMENTmv_name の後ろに配置しなければならないことに注意してください。そうしないと、マテリアライズドビューを作成できません。

query_statement(必須)

マテリアライズドビューを作成するクエリステートメントです。その結果がマテリアライズドビューのデータです。構文は以下のとおりです。

SELECT select_expr[, select_expr ...]
[GROUP BY column_name[, column_name ...]]
[ORDER BY column_name[, column_name ...]]
  • select_expr(必須)

クエリステートメント内のすべての列、つまりマテリアライズドビューのスキーマ内のすべての列です。このパラメーターでは、次の値がサポートされます。

  • ベーステーブルの列名である単純な列または集約列、例えば SELECT a, abs(b), min(c) FROM table_a です。ここで abc はベーステーブルの列名です。マテリアライズドビューの列名を指定しない場合、StarRocks は自動的に列に名前を割り当てます。
  • ベーステーブルの列を参照する式、例えば SELECT a+1 AS x, b+2 AS y, c*c AS z FROM table_a です。ここで a+1b+2c*c はベーステーブルの列を参照する式であり、xyz はマテリアライズドビューの列に割り当てられる別名です。

注意

  • select_expr で少なくとも 1 つの列を指定する必要があります。
  • 同期マテリアライズドビューでは、単一の列に対する集約関数のみがサポートされます。 sum(a+b) のような形式のクエリステートメントはサポートされません。
  • 集約関数を使用して同期マテリアライズドビューを作成する場合は、GROUP BY 句を指定する必要があり、select_expr で少なくとも 1 つの GROUP BY 列を指定する必要があります。
  • 同期マテリアライズドビューは、JOIN、WHERE、および 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 bselect 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 bselect b, sum(a) as sum_a from table group by b のクエリステートメントは、同じベーステーブルのために同期マテリアライズドビューを作成することはできません。
    • 各複雑な式は 1 つの列のみを参照できます。 a + b as col1 のようなクエリステートメントはサポートされません。
    • 複雑な式を使用して作成された同期マテリアライズドビューでクエリが書き換えられたかどうかを確認するには、EXPLAIN <sql_statement> を実行してクエリをチェックできます。詳細については、 クエリ解析 を参照してください。
  • 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 はプレフィックス列に基づいてソートキーを自動的に選択します。

同期マテリアライズドビューのクエリ

同期マテリアライズドビューは、基本的には物理テーブルであり、通常のテーブルと同じように操作することができます。ただし、同期マテリアライズドビューに直接データをロードすることはできません

同期マテリアライズドビューによる自動クエリ書き換え

同期マテリアライズドビューのパターンに従うクエリが実行されると、元のクエリステートメントが自動的に書き換えられ、中間結果としてマテリアライズドビューに格納されたデータが使用されます。

次の表は、元のクエリで使用される集約関数とマテリアライズドビューの構築に使用される集約関数との対応関係を示しています。ビジネスシナリオに応じて適切な集約関数を選択し、マテリアライズドビューを作成することができます。

元のクエリで使用する集約関数

マテリアライズドビュー構築に使用される集約関数

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

非同期マテリアライズドビュー

構文

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
-- distribution_desc
[DISTRIBUTED BY HASH(<bucket_key>[,<bucket_key2> ...]) [BUCKETS <bucket_number>]]
-- refresh_desc
[REFRESH
-- refresh_moment
[IMMEDIATE | DEFERRED]
-- refresh_scheme
[ASYNC [START (<start_time>)] [EVERY INTERVAL (<refresh_interval>)] | MANUAL]
]
-- partition_expression
[PARTITION BY
{<列名> | date_trunc(fmt, <列名>)}
]
-- order_by_expression
[ORDER BY (<sort_key>)]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>

角括弧 [] 内のパラメーターはオプションです。

パラメーター

mv_name(必須)

マテリアライズドビューの名前です。名前には以下の要件があります:

  • 名前は、英字(a-zまたはA-Z)、数字(0-9)、アンダースコア(_)で構成する必要があります。また、最初の文字は英字で始まる必要があります。
  • 名前の長さは64文字を超えることはできません。
  • 名前は大文字と小文字を区別します。

注意

同じデータベース内のマテリアライズドビューの名前は重複してはなりません。

COMMENT(オプション)

マテリアライズドビューに対するコメントです。 COMMENTmv_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: 非同期リフレッシュモード。ベーステーブルのデータが変更されるたびに、マテリアライズドビューは事前に定義されたリフレッシュ間隔に従って自動的にリフレッシュされます。リフレッシュの開始時間を START('yyyy-MM-dd hh:mm:ss') で、リフレッシュ間隔を (interval n day/hour/minute/second) で指定することができます。単位には DAYHOURMINUTESECOND を使用できます。例:ASYNC START ('2023-09-12 16:30:25') EVERY (INTERVAL 5 MINUTE)。間隔が指定されていない場合、デフォルト値として 10 MINUTE が使用されます。
  • MANUAL: マニュアルリフレッシュモード。マテリアライズドビューは自動的にリフレッシュされません。リフレッシュタスクはユーザーによって手動でトリガーすることしかできません。

このパラメーターが指定されていない場合、デフォルト値 MANUAL が使用されます。

partition_expression(オプション)

非同期マテリアライズドビューのパーティショニング戦略です。現在のバージョンの StarRocks では、非同期マテリアライズドビューの作成時には 1 つのパーティション式のみがサポートされています。

注意

現在、非同期マテリアライズドビューでは、リストパーティショニング戦略はサポートされていません。

有効な値:

  • column_name:パーティショニングに使用する列の名前です。PARTITION BY dt は、dt 列に基づいてマテリアライズドビューをパーティション分割します。
  • date_trunc 関数: 指定した時間単位で時間を切り捨てる関数です。PARTITION BY date_trunc("MONTH", dt) は、パーティション分割の単位として dt 列を月に切り下げます。date_trunc 関数では YEARMONTHDAYHOURMINUTE を含む単位で時間を切り捨てることができます。
  • time_slice 関数または date_slice 関数:v3.1 以降、時間または日付を指定された時間粒度で時間間隔の始まりまたは終わりに変換するためにこれらの関数を使用できます。たとえば、PARTITION BY date_trunc("MONTH", time_slice(dt, INTERVAL 7 DAY)) の場合、time_slice 関数と date_slice 関数は、date_trunc よりも細かい粒度で指定された時間で与えられた時間を変換するために使用されます。より細かい粒度のグループ化を指定するために使うことができます。たとえば、GROUP BY time_slice(dt, INTERVAL 1 MINUTE) PARTITION BY date_trunc('DAY', ts) のような形式です。

このパラメーターが指定されていない場合、デフォルトではパーティショニング戦略は使用されません。

order_by_expression(オプション)

非同期マテリアライズドビューのソートキーです。ソートキーが指定されていない場合、StarRocks は SELECT 列のプレフィックス列のいくつかをソートキーとして選択します。たとえば、select a, b, c, d の場合、ソートキーは ab となります。このパラメーターは StarRocks v3.0 以降でサポートされています。

PROPERTIES(オプション)

非同期マテリアライズドビューのプロパティです。既存のマテリアライズドビューのプロパティを変更するには、ALTER MATERIALIZED VIEW を使用できます。

  • replication_num: 作成するマテリアライズドビューレプリカの数です。
  • storage_medium: ストレージの種類です。有効な値は HDDSSD です。
  • storage_cooldown_time: パーティションのストレージ冷却時間です。HDD と SSD の両方のストレージが使用されている場合、このプロパティで指定された時間が経過した後に、SSD ストレージのデータが HDD ストレージに移動されます。書式: "yyyy-MM-dd HH:mm:ss"。指定された時間は現在時刻より後でなければなりません。このプロパティが明示的に指定されていない場合は、デフォルトではストレージ冷却は行われません。
  • partition_ttl_number: 保持する最新のマテリアライズドビューパーティションの数です。現在の時刻よりも過去に開始されたパーティションは、この値を超える数のパーティションになると、より古いパーティションが削除されます。StarRocks は、FE 設定項目 dynamic_partition_check_interval_seconds に指定された間隔で、定期的にマテリアライズドビューパーティションをチェックし、期限が切れたパーティションを自動的に削除します。ダイナミックパーティショニング戦略を有効にしている場合、事前に作成したパーティションは数えません。値が -1 の場合、マテリアライズドビューのすべてのパーティションが保持されます。デフォルト:-1
  • partition_refresh_number: 1 回のリフレッシュでリフレッシュされる最大のパーティション数です。リフレッシュするパーティション数がこの値を超える場合、StarRocks はリフレッシュタスクを分割してバッチごとに完了します。前のパーティションのリフレッシュが成功した場合にのみ、次のパーティションのリフレッシュを続け、すべてのパーティションがリフレッシュされたところで終了します。パーティションのリフレッシュに失敗した場合、次のリフレッシュタスクは生成されません。値が -1 の場合、リフレッシュタスクは分割されません。デフォルト:-1
  • excluded_trigger_tables: ベーステーブルがリストアップされている場合、ベーステ