すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:CREATE MATERIALIZED VIEW 文

最終更新日:Jul 15, 2025

このトピックでは、CREATE MATERIALIZED VIEW 文を使用して、完全リフレッシュまたは高速リフレッシュをサポートするマテリアライズドビューを作成し、リフレッシュ時間を構成する方法について説明します。

構文

CREATE [OR REPLACE] MATERIALIZED VIEW mv_name
[mv_definition]
[mv_properties]
[REFRESH [COMPLETE|FAST]]
[ON [DEMAND |OVERWRITE]]
[START WITH date] [NEXT date]
[[DISABLE|ENABLE] QUERY REWRITE]
[COMMENT 'view_comment']
AS 
query_body

mv_definition:
  ({column_name column_type [column_attributes] [ column_constraints ] [COMMENT 'column_comment']
  | table_constraints}
  [, ... ])
  [table_attribute]
  [partition_options]
  [index_all]
  [storage_policy]
  [block_size]
  [engine]
  [table_properties]

パラメーター

OR REPLACE

オプション

作成後の変更:不可

V3.1.4.7 以降の AnalyticDB for MySQL クラスターのみがこのパラメーターをサポートしています。
  • 既存のマテリアライズドビューで同じ名前が使用されていない場合、AnalyticDB for MySQL はマテリアライズドビューを作成します。

  • 既存のマテリアライズドビューで同じ名前が使用されている場合、AnalyticDB for MySQL は一時ビューを作成して新しいデータを書き込み、データが書き込まれた後に元のマテリアライズドビューを置き換えます。

mv_definition

オプション

作成後の変更:不可

マテリアライズドビューのスキーマ。

マテリアライズドビューのスキーマを明示的に指定するかどうかを選択できます。マテリアライズドビューのスキーマを明示的に指定しない場合、AnalyticDB for MySQL は マテリアライズドビュークエリ 結果の列を使用してマテリアライズドビューの列を定義し、マテリアライズドビューのプライマリキーを指定し、すべての列にインデックスを作成し、ホットデータストレージと XUANWU エンジンを構成します。

分散キー、パーティションキー、プライマリキー、インデックス、ホットデータとコールドデータの階層型ストレージポリシーなど、マテリアライズドビューのスキーマを手動で指定する場合は、CREATE TABLE 文を実行するために使用されるのと同じスキーマ定義メソッドを使用します。たとえば、すべての列にインデックスを付ける必要がない場合は、INDEX キーワードを使用してインデックス列を指定できます。マテリアライズドビューのストレージコストを削減する場合は、マテリアライズドビューのストレージポリシーを混合ストレージに設定するか、過去 1 年以内のデータのみを保持 するように設定できます。

プライマリキールール
  • 完全リフレッシュ:プライマリキーを明示的に指定しない場合、AnalyticDB for MySQL は __adb_auto_id__ という名前の列を自動的に生成し、その列をマテリアライズドビューのプライマリキーとして使用します。プライマリキーを明示的に指定する場合は、マテリアライズドビュークエリ 結果の列をプライマリキーとして指定できます。

  • 高速リフレッシュ:明示的に指定されたか自動的に生成されたかに関係なく、プライマリキーは次のルールに準拠する必要があります。

    • GROUP BY 句を使用して集計関数を指定する場合、プライマリキーは GROUP BY 句で参照される列である必要があります。たとえば、GROUP BY a,b が指定されている場合、プライマリキーは列 a と b である必要があります。

    • GROUP BY 句なしで集計関数を指定する場合、プライマリキーは定数である必要があります。

    • 非集計クエリを指定する場合、プライマリキーはベーステーブルのプライマリキーと一致する必要があります。たとえば、ベーステーブルのプライマリキーが PRIMARY KEY(sale_id,sale_date) の場合、マテリアライズドビューのプライマリキーも PRIMARY KEY(sale_id,sale_date) である必要があります。

推奨事項

マテリアライズドビューのクエリパフォーマンスを向上させるために、マテリアライズドビューを作成するときにプライマリキー、分散キー、およびパーティションキーを指定することをお勧めします。

mv_properties

オプション

作成後の変更:可 (ALTER MATERIALIZED VIEW 文を使用)

V3.1.9.3 以降の AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスターのみがこのパラメーターをサポートしています。

マテリアライズドビューのリソースポリシー。リソースグループを指定する mv_resource_group パラメーターと、リフレッシュヒント構成を指定する mv_refresh_hints パラメーターで構成されます。 mv_properties パラメーターは JSON 形式です。例:

MV_PROPERTIES='{
  "mv_resource_group":"<resource_group_name>",
  "mv_refresh_hints":{"<hint_name>":"<hint_value>"}
}'
mv_resource_group

マテリアライズドビューの作成とリフレッシュに使用されるリソースグループ。リソースグループを指定しない場合、user_default という名前のデフォルトのリソースグループが使用されます。

このパラメーターは、インタラクティブリソースグループ、または XIHE エンジンを使用するジョブリソースグループに設定できます。ジョブリソースグループでは、リソースをプロビジョニングするために、数秒または数分のリフレッシュレイテンシが必要です。リフレッシュレイテンシに対する高い要件がない場合は、ジョブリソースグループを指定できます。ジョブリソースグループを使用するマテリアライズドビューは、エラスティックマテリアライズドビューと呼ばれます。エラスティックマテリアライズドビューのリフレッシュパフォーマンスを向上させるには、mv_refresh_hints パラメーターの elastic_job_max_acu フィールドを構成して、マテリアライズドビューのリソース制限を増やすことができます。詳細については、次の エラスティックマテリアライズドビューの例 をご参照ください。

AnalyticDB for MySQL コンソールの リソースグループ タブでリソースグループを表示するか、DescribeDBResourceGroup 操作を呼び出してリソースグループのリストをクエリできます。

指定されたリソースグループが存在しない場合、マテリアライズドビューの作成時にエラーが発生します。

mv_refresh_hints

マテリアライズドビューのリフレッシュヒント構成。サポートされているヒントパラメーターについては、「構成とヒント構成パラメーター」トピックの「一般的なヒントパラメーター」セクションをご参照ください。

REFRESH [COMPLETE | FAST]

オプション

デフォルト値:COMPLETE

作成後の変更:不可

マテリアライズドビューのリフレッシュポリシー。リフレッシュポリシーの違いと適用可能なシナリオについては、「マテリアライズドビューのリフレッシュ」トピックの「リフレッシュポリシーの選択」セクションをご参照ください。

COMPLETE

完全リフレッシュは、マテリアライズドビュークエリを実行して、関連するすべてのベーステーブルパーティションのデータをスキャンし、クエリ結果を使用してマテリアライズドビューの元のデータを上書きします。

完全リフレッシュは、次のリフレッシュトリガーメカニズムをサポートしています。スケジュールされた間隔での自動リフレッシュ (ON DEMAND [START WITH date] [NEXT date] 句で指定)、ベーステーブルが上書きされたときの自動リフレッシュ (ON OVERWRITE 句で指定)、および手動リフレッシュ。

FAST
V3.1.9.0 以降の AnalyticDB for MySQL クラスターのみがこのパラメーターをサポートしています。 V3.1.9.0 の AnalyticDB for MySQL クラスターでは、高速リフレッシュをサポートする単一テーブルのマテリアライズドビューのみを作成できます。 V3.2.0.0 以降の AnalyticDB for MySQL クラスターでは、高速リフレッシュをサポートする単一テーブルおよび複数テーブルのマテリアライズドビューを作成できます。

高速リフレッシュは、マテリアライズドビュークエリ (query_body) を書き直して、ベーステーブルの更新されたデータ (INSERT、DELETE、UPDATE) のみスキャンし、マテリアライズドビューのデータを更新します。これにより、ベーステーブルのすべてのデータがスキャンされるのを防ぎ、リフレッシュのオーバーヘッドを削減します。

AnalyticDB for MySQL クラスターで高速リフレッシュをサポートするマテリアライズドビューを作成する前に、クラスターとベーステーブルのバイナリロギング機能を有効にする必要があります。そうしないと、エラーが発生します。詳細については、「マテリアライズドビューのリフレッシュ」トピックの「バイナリロギング機能の有効化」セクションをご参照ください。

高速リフレッシュをサポートするマテリアライズドビューを作成する場合は、ON DEMAND {NEXT date} 句を指定して、リフレッシュトリガーメカニズムをスケジュールされた間隔での自動リフレッシュに設定する必要があります。

高速リフレッシュをサポートするマテリアライズドビューには、特定の 制限 が課せられます。マテリアライズドビュークエリが高速リフレッシュの要件を満たしていない場合、マテリアライズドビューの作成時にエラーが発生します。

ON [DEMAND | OVERWRITE]

オプション

デフォルト値:DEMAND

作成後の変更:不可

マテリアライズドビューのリフレッシュトリガーメカニズム。リフレッシュトリガーメカニズムの違いと適用可能なシナリオについては、「マテリアライズドビューのリフレッシュ」トピックの「リフレッシュトリガーメカニズムの選択」セクションをご参照ください。

DEMAND

オンデマンドリフレッシュ。手動でリフレッシュをトリガーするか、NEXT 句を使用して、スケジュールされた間隔での自動リフレッシュを構成できます。

高速リフレッシュをサポートするマテリアライズドビューの場合、リフレッシュトリガーメカニズムは ON DEMAND のみに設定できます。

OVERWRITE

INSERT OVERWRITE 文を実行してベーステーブルが上書きされたときの自動リフレッシュ。

リフレッシュトリガーメカニズムを ON OVERWRITE に設定する場合、START WITH 句または NEXT 句を指定することはできません。

[START WITH date] [NEXT date]

オプション

作成後の変更:不可

リフレッシュトリガーメカニズムを ON DEMAND に設定した場合のマテリアライズドビューのリフレッシュ時間。リフレッシュ時間を指定しない場合、マテリアライズドビューはスケジュールされた間隔で自動的にリフレッシュされません。

START WITH

マテリアライズドビューの最初のリフレッシュ時間。 START WITH 句を指定しない場合、最初のリフレッシュ時間はマテリアライズドビューが作成された時間です。

NEXT

マテリアライズドビューの次のリフレッシュ時間。

  • 高速リフレッシュをサポートするマテリアライズドビューの場合、NEXT 句を指定し、自動リフレッシュ間隔を 5 秒から 5 分の範囲内に設定する必要があります。

  • 完全リフレッシュをサポートするマテリアライズドビューの場合、NEXT 句を指定するかどうかを選択できます。 NEXT 句を指定する場合は、自動リフレッシュ間隔を 60 秒以上に設定する必要があります。

date

時間関数がサポートされており、秒単位まで正確である必要があります。ミリ秒は切り捨てられます。

[DISABLE | ENABLE] QUERY REWRITE

オプション

デフォルト値:DISABLE

作成後の変更:可 (ALTER MATERIALIZED VIEW 文を使用)

V3.1.4 以降の AnalyticDB for MySQL クラスターのみがこのパラメーターをサポートしています。

マテリアライズドビューのクエリ書き換え機能を有効または無効にします。詳細については、マテリアライズドビューのクエリ書き換え をご参照ください。

DISABLE

マテリアライズドビューのクエリ書き換え機能を無効にします。

ENABLE

マテリアライズドビューのクエリ書き換え機能を有効にします。クエリ書き換え機能を有効にすると、オプティマイザーはマテリアライズドビューを使用して、ベーステーブルで計算を実行する必要なく、SQL パターンに基づいてクエリ全体または一部を書き換えます。これにより、クエリのパフォーマンスが向上します。

query_body

必須

作成後の変更:不可

ベーステーブルに対するマテリアライズドビュークエリ。

完全マテリアライズドビューは、AnalyticDB for MySQL の内部テーブルと外部テーブル、既存のマテリアライズドビュー、およびビューに基づいて作成できます。ベーステーブルクエリには制限はありません。クエリの構文については、SELECT をご参照ください。

高速マテリアライズドビューは、AnalyticDB for MySQL の内部テーブルと外部テーブルに基づいてのみ作成できます。ベーステーブルクエリは、次のルールに準拠する必要があります。

SELECT 列

  • GROUP BY 句を使用して集計関数を指定する場合、SELECT 列には GROUP BY 句で参照されるすべての列が含まれている必要があります。

    例を表示

    正しい例

    正しくない例

    CREATE MATERIALIZED VIEW demo_mv1
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- GROUP BY 列のいずれかを指定します。
      sale_date, -- GROUP BY 列のいずれかを指定します。
      max(quantity) AS max, -- 式ベースの列にはエイリアスを指定する必要があります。
      sum(price)AS sum
    FROM sales
    GROUP BY sale_id,sale_date;
    CREATE MATERIALIZED VIEW false_mv1
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- SELECT 列に GROUP BY 列 sale_date が含まれていません。
      max(quantity) AS max,
      sum(price)AS sum
    FROM sales
    GROUP BY sale_id,sale_date;
  • GROUP BY 句なしで集計関数を指定する場合、SELECT 列には定数列と集計列のみ、または集計列のみを含めることができます。

    例を表示

    正しい例

    正しくない例

    集計列 maxsum のみを含めます。

    CREATE MATERIALIZED VIEW demo_mv2
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      max(quantity) AS max, -- 式ベースの列にはエイリアスを指定する必要があります。
      sum(price)AS sum
    FROM sales;

    定数列と集計列以外の列を含めます。

    CREATE MATERIALIZED VIEW false_mv2
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT
      sale_id, 
      max(quantity) AS max,
      sum(price) AS sum
    FROM sales;

    定数列 pk と集計列 maxsum を含めます。

    CREATE MATERIALIZED VIEW demo_mv3
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      1 AS pk,  -- GROUP BY 句なしで集計関数を指定する場合、定数列がプライマリキーとして使用されます。
      max(quantity) AS max,
      sum(price) AS sum
    FROM sales;
  • 非集計クエリを指定する場合、SELECT 列にはベーステーブルのすべてのプライマリキー列が含まれている必要があります。

    例を表示

    正しい例

    正しくない例

    CREATE MATERIALIZED VIEW demo_mv4
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- ベーステーブルのプライマリキー列を指定します。
      quantity
    FROM sales;
    CREATE MATERIALIZED VIEW false_mv3
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_date, -- SELECT 列にプライマリキー列 sale_id が含まれていません。
      quantity
    FROM sales;

    sales1 テーブルに PRIMARY KEY(sale_id,sale_date) として定義された複合プライマリキーがあるとします。

    CREATE MATERIALIZED VIEW demo_mv5
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- ベーステーブルのプライマリキー列のいずれかを指定します。
      sale_date, -- ベーステーブルのプライマリキー列のいずれかを指定します。
      quantity
    FROM sales1;

    sales1 テーブルに PRIMARY KEY(sale_id,sale_date) として定義された複合プライマリキーがあるとします。

    CREATE MATERIALIZED VIEW false_mv4
    REFRESH FAST ON DEMAND
     NEXT now() + INTERVAL 3 minute
    AS
    SELECT 
      sale_id, -- SELECT 列に他のプライマリキー列 sale_date が含まれていません。
      quantity
    FROM sales1;
  • SELECT 句で参照される式ベースの列には、エイリアスを指定する必要があります。識別しやすいエイリアスを指定することをお勧めします。例:SUM(price) AS total_price

その他の制限

  • 不定値を生成する可能性のある式は指定できません。例:NOW() および RAND()。

  • ORDER BY 句は指定できません。

  • HAVING 句は指定できません。

  • ウィンドウ関数は指定できません。

  • UNION、EXCEPT、INTERSECT などの集合演算子は指定できません。

  • 結合操作には INNER JOIN のみ指定できます。結合フィールドは、ベーステーブルの元のフィールドである必要があり、同じデータ型を使用し、インデックスの作成に使用される必要があります。最大 5 つのベーステーブルを結合できます。

    より多くのベーステーブルを結合するには、テクニカルサポートに連絡してください。
  • 指定できる集計関数は、COUNT()、SUM()、MAX()、MIN()、AVG()、APPROX_DISTINCT()、COUNT(DISTINCT) のみです。

  • AVG() 関数は DECIMAL 型をサポートしていません。

  • COUNT(DISTINCT) 関数は INTEGER 型のみをサポートしています。

必要な権限

マテリアライズドビューを作成する前に、次のすべての権限を持っていることを確認してください。

  • マテリアライズドビューを作成するデータベース内のテーブルに対する CREATE 権限。

  • マテリアライズドビューで参照されるすべてのベーステーブルの特定の列またはすべての列に対する SELECT 権限。

  • 自動的にリフレッシュできるマテリアライズドビューを作成する場合は、次の権限も必要です。

    • AnalyticDB for MySQL'%' で示される任意の IP アドレスから接続するための権限。

    • マテリアライズドビュー、またはマテリアライズドビューが存在するデータベース内のすべてのテーブルに対する INSERT 権限。そうしないと、マテリアライズドビューのデータをリフレッシュできません。

例の準備

マテリアライズドビューを作成する前に、CREATE TABLE 文を実行してベーステーブルを作成します。

/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- テーブルエンジンを XUANWU に設定します。
CREATE TABLE customer (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255),
    is_vip Boolean
);
/*+ RC_DDL_ENGINE_REWRITE_XUANWUV2=false */ -- テーブルエンジンを XUANWU に設定します。
CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    price DECIMAL(10, 2),
    quantity INT,
    sale_date TIMESTAMP
);

完全リフレッシュをサポートするマテリアライズドビューを作成する

  • 5 分間隔で自動的にリフレッシュされる myview1 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview1
    REFRESH   -- REFRESH COMPLETE と同等です。
     NEXT now() + INTERVAL 5 minute
    AS
    SELECT count(*) as cnt FROM customer;
  • 毎日 02:00:00 に自動的にリフレッシュされる myview2 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview2
    REFRESH COMPLETE
     START WITH DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
     NEXT DATE_FORMAT(now() + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • 毎週月曜日 02:00:00 に自動的にリフレッシュされる myview3 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview3
    REFRESH COMPLETE ON DEMAND
     START WITH DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') 
     NEXT DATE_FORMAT(now() + INTERVAL 7 - weekday(now()) day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • 毎月 1 日 02:00:00 に自動的にリフレッシュされる myview4 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview4
    REFRESH   -- REFRESH COMPLETE と同等です。
     NEXT DATE_FORMAT(last_day(now()) + INTERVAL 1 day, '%Y-%m-%d 02:00:00')
    AS
    SELECT count(*) as cnt FROM customer;
  • 1 回だけ自動的にリフレッシュされる myview5 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview5
    REFRESH   -- REFRESH COMPLETE と同等です。
     START WITH now() + INTERVAL 1 day
    AS 
    SELECT count(*) as cnt FROM customer;
  • 自動的にリフレッシュされない myview6 という名前のマテリアライズドビューを作成します。マテリアライズドビューは手動でのみリフレッシュできます。

    CREATE MATERIALIZED VIEW myview6 (
      PRIMARY KEY (customer_id)
    ) DISTRIBUTED BY HASH (customer_id)
    AS
    SELECT customer_id FROM customer;

    マテリアライズドビューを手動でリフレッシュします。

    REFRESH MATERIALIZED VIEW myview6;
  • ベーステーブルが上書きされたときに自動的にリフレッシュされる myview7 という名前のマテリアライズドビューを作成します。リフレッシュ時間を手動で指定する必要はありません。

    CREATE MATERIALIZED VIEW myview7
    REFRESH COMPLETE ON OVERWRITE
    AS
    SELECT count(*) as cnt FROM customer;

高速リフレッシュをサポートする単一テーブルマテリアライズドビューを作成する

AnalyticDB for MySQL クラスターで高速リフレッシュをサポートするマテリアライズドビューを作成する前に、クラスターとベーステーブルのバイナリロギング機能を有効にする必要があります。
SET ADB_CONFIG BINLOG_ENABLE=true;
ALTER TABLE customer binlog=true;
ALTER TABLE sales binlog=true;
  • 10 秒間隔で高速リフレッシュをサポートする fast_mv1 という名前の単一テーブルマテリアライズドビューを作成します。マテリアライズドビュークエリには集計関数は含まれていません。

    CREATE MATERIALIZED VIEW fast_mv1
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT sale_id, sale_date, price
    FROM sales
    WHERE price > 10;
  • 5 秒間隔で高速リフレッシュをサポートする fast_mv2 という名前の単一テーブルマテリアライズドビューを作成します。マテリアライズドビュークエリには GROUP BY を使用した集計関数が含まれています。

    CREATE MATERIALIZED VIEW fast_mv2
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT
       customer_id, sale_date,                 -- システムは GROUP BY 列をマテリアライズドビューのプライマリキーとして使用します。
       COUNT(sale_id) AS cnt_sale_id,          -- 列に対して集計操作を実行します。
       SUM(price * quantity) AS total_revenue, -- 列に対して集計操作を実行します。
       customer_id / 100 AS new_customer_id    -- 式を使用して、集計操作に含まれない列を定義できます。
    FROM sales
    WHERE ifnull(price, 1) > 0                 -- 式を使用して WHERE 条件を定義できます。
    GROUP BY customer_id, sale_date;
  • 1 分間隔で高速リフレッシュをサポートする fast_mv3 という名前の単一テーブルマテリアライズドビューを作成します。マテリアライズドビュークエリには GROUP BY なしの集計関数が含まれています。

    CREATE MATERIALIZED VIEW fast_mv3
    REFRESH FAST NEXT now() + INTERVAL 1 minute
    AS
    SELECT count(*) AS cnt   -- システムは定数をプライマリキーとして生成して、マテリアライズドビューに 1 つのレコードのみが含まれるようにします。
    FROM sales;

高速リフレッシュをサポートする複数テーブルマテリアライズドビューを作成する

  • 5 秒間隔で高速リフレッシュをサポートする fast_mv4 という名前の複数テーブルマテリアライズドビューを作成します。マテリアライズドビュークエリには集計関数は含まれていません。

    CREATE MATERIALIZED VIEW fast_mv4
    REFRESH FAST NEXT now() + INTERVAL 5 second
    AS
    SELECT 
        c.customer_id,
        c.customer_name,
        s.sale_id,
        (s.price * s.quantity) AS revenue
    FROM 
        sales s
    JOIN 
        customer c ON s.customer_id = c.customer_id;
  • 10 秒間隔で高速リフレッシュをサポートする fast_mv5 という名前の複数テーブルマテリアライズドビューを作成します。マテリアライズドビュークエリには GROUP BY 句を含む集計関数が含まれています。

    CREATE MATERIALIZED VIEW fast_mv5
    REFRESH FAST NEXT now() + INTERVAL 10 second
    AS
    SELECT 
        s.sale_id,
        c.customer_name,
        COUNT(*) AS cnt,           
        SUM(s.price * s.quantity) AS revenue                
    FROM 
        sales s
    JOIN 
        (SELECT customer_id, customer_name FROM customer) c ON c.customer_id = s.customer_id
    GROUP BY 
        s.sale_id, c.customer_name;

パーティション化されたマテリアライズドビューを作成する

分散キーとパーティションキーを使用して、myview8 という名前のマテリアライズドビューを作成します。

CREATE MATERIALIZED VIEW myview8 (
  quantity INT,    --マテリアライズドビューには、列が明示的に表示されていなくても、クエリ結果のすべての列が含まれます。    
  price DECIMAL(10, 2),
  sale_date TIMESTAMP
) 
DISTRIBUTED BY HASH(sale_id)
PARTITION BY VALUE(date_format(sale_date, "%Y%m%d")) LIFECYCLE 30
AS 
SELECT * FROM sales;

プライマリキー、分散キー、またはインデックスを持つマテリアライズドビューを作成する

  • customer_name 列にインデックスが付けられた myview9 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview9 (
      INDEX (sale_date),
      PRIMARY KEY (sale_id)
    ) DISTRIBUTED BY HASH (sale_id)
    REFRESH
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;
  • プライマリキー、分散キー、クラスタ化インデックス、列ベースのインデックス、およびコメントが指定された myview10 という名前のマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview10 (
      quantity INT,    --マテリアライズドビューには、列が明示的に表示されていなくても、クエリ結果のすべての列が含まれます。    
      price DECIMAL(10, 2),
      KEY INDEX_ID(customer_id) COMMENT 'customer',
      CLUSTERED KEY INDEX(sale_id),
      PRIMARY KEY(sale_id,sale_date)
    ) 
    DISTRIBUTED BY HASH(sale_id)
    COMMENT 'MATERIALIZED VIEW c'
    AS 
    SELECT * FROM sales;

エラスティックマテリアライズドビューを作成する

  • serverless という名前のジョブリソースグループのリソースを使用して、1 日に 1 回自動的にリフレッシュされる myview11 という名前のエラスティックマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview11
    MV_PROPERTIES='{
      "mv_resource_group":"serverless"
    }'
    REFRESH COMPLETE ON DEMAND
     START WITH now()
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;
  • serverless という名前のジョブリソースグループの最大 12 AnalyticDB コンピュートユニット (ACU) のリソースを使用して、1 日に 1 回自動的にリフレッシュされる myview12 という名前のエラスティックマテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW myview12
    MV_PROPERTIES='{
      "mv_resource_group":"serverless",
      "mv_refresh_hints":{"elastic_job_max_acu":"12"}
    }'
    REFRESH COMPLETE ON DEMAND
     START WITH now()
     NEXT now() + INTERVAL 1 DAY
    AS
    SELECT * FROM sales;

参照