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

MaxCompute:マテリアライズドビューの操作

最終更新日:Aug 22, 2026

マテリアライズドビューは、 JOIN や AGGREGATE などの時間のかかる操作の結果を事前に計算して保存するため、後続のクエリでは再計算を行わずに、保存された結果を直接読み取ることができます。

背景

ビューは、クエリで定義される仮想テーブルです。一方、マテリアライズドビューは、事前計算されたクエリ結果を保存する物理テーブルであり、ストレージリソースを消費します。課金の詳細については、課金ルールをご参照ください。

マテリアライズドビューは、次のシナリオに適しています。

  • パターンが固定された頻繁に実行されるクエリ。

  • 集約や結合など、時間のかかる操作を伴うクエリ。

  • テーブル内のデータの一部のみにアクセスするクエリ。

次の表は、従来のクエリとマテリアライズドビュークエリを比較したものです。

項目

従来のクエリ

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

クエリ文

SQL 文を使用してデータを直接クエリします。

SELECT empid, deptname  
FROM emps JOIN depts 
ON emps.deptno=depts.deptno 
WHERE hire_date >= '2018-01-01';

マテリアライズドビューを作成してからクエリします。

次の文でマテリアライズドビューを作成します。

CREATE MATERIALIZED VIEW mv 
AS SELECT empid, deptname, hire_date  
FROM emps JOIN depts 
ON emps.deptno=depts.deptno 
WHERE hire_date >= '2016-01-01';

マテリアライズドビューをクエリします。

SELECT empid, deptname FROM mv 
WHERE hire_date >= '2018-01-01';

マテリアライズドビューのクエリリライトが有効な場合、次のクエリを実行すると、システムは自動的にマテリアライズドビューを使用します。

SELECT empid, deptname 
FROM emps JOIN depts 
ON emps.deptno=depts.deptno 
WHERE hire_date >= '2018-01-01';
-- これは次の文と同等です。
SELECT empid, deptname FROM mv 
WHERE hire_date >= '2018-01-01';

クエリの特性

クエリはテーブルを読み取り、結合を実行し、フィルター (WHERE 句) を適用します。大規模なソーステーブルの場合、これらの操作は低速でリソースを大量に消費します。

クエリはマテリアライズドビューを読み取り、フィルターを適用します。結合は不要です。MaxCompute は、クエリを最適なマテリアライズドビューに自動的にマッチングし、そこから直接データを読み取るため、クエリパフォーマンスが大幅に向上します。

コマンド

タイプ

説明

権限

エントリポイント

マテリアライズドビューの作成 (パーティショニングとクラスタリングをサポート)

クエリステートメントに基づいてマテリアライズドビューを作成します。

CreateTable 権限が必要です。

これらのコマンドは、次のツールを使用して実行します:

マテリアライズドビューの更新

マテリアライズドビューを更新します。

Alter 権限が必要です。

マテリアライズドビューのライフサイクルの変更

マテリアライズドビューのライフサイクルを変更します。

Alter 権限が必要です。

マテリアライズドビューのライフサイクルの有効化または無効化

マテリアライズドビューのライフサイクルを有効または無効にします。

Alter 権限が必要です。

マテリアライズドビューに関する情報のクエリ

マテリアライズドビューの基本情報をクエリします。

Describe 権限が必要です。

マテリアライズドビューのステータスのクエリ

マテリアライズドビューが有効か無効かを確認します。

Describe 権限が必要です。

プロジェクト内のマテリアライズドビューの一覧表示

プロジェクト内のすべてのマテリアライズドビュー、または特定の条件に一致するマテリアライズドビューを一覧表示します。

List 権限が必要です。

マテリアライズドビューの削除

マテリアライズドビューを削除します。

Drop 権限が必要です。

マテリアライズドビューのパーティションの削除

マテリアライズドビューからパーティションを削除します。

Drop 権限が必要です。

マテリアライズドビューのクエリパススルー

クエリされたデータがマテリアライズドビューにない場合、ソースパーティションテーブルからデータを自動的に取得します。

ソーステーブルに対する Select 権限が必要です。

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

クエリステートメントを、マテリアライズドビューを使用するように書き換えます。

マテリアライズドビューに対する Select 権限が必要です。

マテリアライズドビューの更新のスケジューリング

マテリアライズドビューの定期的な更新をスケジュールします。

Alter 権限が必要です。

制限

ウィンドウ関数、ユーザー定義テーブル値関数 (UDTF)、およびユーザー定義スカラー関数 (UDF) やユーザー定義集計関数 (UDAF) などの非決定性関数はサポートされていません。

説明

非決定性関数を使用する必要がある場合は、次のセッションレベルのプロパティを設定してください。 set odps.sql.materialized.view.support.nondeterministic.function=true;。

マテリアライズドビューの作成 (パーティショニングとクラスタリング)

クエリ結果からマテリアライズドビューを作成します。必要に応じて、マテリアライズドビューにパーティショニングとクラスタリングを指定できます。

  • 制限事項

    • マテリアライズドビューの名前はプロジェクト内で一意である必要があり、既存のテーブル、ビュー、またはマテリアライズドビューと同じ名前は使用できません。プロジェクト内のすべてのテーブルとマテリアライズドビューの名前を確認するには、SHOW TABLES; コマンドを実行します。

    • 既存のマテリアライズドビューに基づいてマテリアライズドビューを作成することはできません。

    • 外部テーブルに基づいてマテリアライズドビューを作成することはできません。

  • 使用上の注意

    • 定義クエリが失敗した場合、マテリアライズドビューの作成も失敗します。

    • マテリアライズドビューのパーティションキー列は、ソーステーブルから派生したものである必要があります。パーティションキー列の順序と数はソーステーブルと一致している必要がありますが、名前は異なっていてもかまいません。

    • 一部の列に対してのみコメントを指定した場合、エラーが返されます。

    • パーティショニングとクラスタリングの両方を指定できます。この場合、各パーティション内のデータには、指定したクラスタリング特性が適用されます。

    • 定義クエリにサポートされていない演算子が含まれている場合、エラーが返されます。サポートされている演算子の一覧については、「マテリアライズドビューのクエリリライト」をご参照ください。

    • デフォルトでは、MaxCompute では、ユーザー定義関数 (UDF) やユーザー定義集計関数 (UDAF) などの非決定性関数を使用したマテリアライズドビューの作成はサポートされていません。非決定性関数が必要な場合は、セッションレベルで set odps.sql.materialized.view.support.nondeterministic.function=true; コマンドを実行してください。

    • マテリアライズドビューは空のパーティションに対応しています。ソーステーブルのパーティションが空の場合、マテリアライズドビューの更新により、対応する空のパーティションが自動的に作成されます。

  • 構文

    CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]<mv_name>
    [LIFECYCLE <days>]    --ライフサイクルを指定します。
    [BUILD DEFERRED]    --データを投入せずにスキーマを作成します。
    [(<col_name> [COMMENT <col_comment>], ...)]    --列コメント。
    [DISABLE REWRITE]    --マテリアライズドビューをクエリリライトに使用できるかどうかを指定します。
    [COMMENT 'table comment']    --テーブルコメント。
    [PARTITIONED BY (<col_name> [, <col_name>, ...])]    --マテリアライズドビューをパーティションテーブルとして作成します。
    [CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
      [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
        INTO <number_of_buckets> BUCKETS]    --クラスター化テーブルのシャッフルとソートの特性を設定します。
    [REFRESH EVERY <num> {MINUTES | HOURS | DAYS}] 
    [TBLPROPERTIES("compressionstrategy"="{normal|high|extreme}",    --テーブルのデータ保存圧縮戦略を指定します。
                    "enable_auto_substitute"="true",    --パーティションが存在しない場合に、ソーステーブルへのクエリパススルーを有効にするかどうかを指定します。
                    "enable_auto_refresh"="true",    --自動更新を有効にするかどうかを指定します。
                    "refresh_interval_minutes"="120",    --更新間隔を指定します。
                    "only_refresh_max_pt"="true"    --パーティション化されたマテリアライズドビューの場合、ソーステーブルから最新のパーティションのみを自動的に更新します。
                    )]
    AS <select_statement>;
  • パラメーター

    パラメーター

    必須

    説明

    IF NOT EXISTS

    いいえ

    IF NOT EXISTS を指定せず、マテリアライズドビューがすでに存在する場合、エラーが発生して操作は失敗します。

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    マテリアライズドビューの名前です。

    days

    いいえ

    マテリアライズドビューのライフサイクル (日数) です。値は 1 〜 37231 の整数である必要があります。

    BUILD DEFERRED

    いいえ

    指定した場合、データを投入せずにマテリアライズドビューのスキーマを作成します。

    col_name

    いいえ

    マテリアライズドビュー内の列名です。

    col_comment

    いいえ

    列のコメントです。

    DISABLE REWRITE

    いいえ

    マテリアライズドビューのクエリリライトを無効にします。デフォルトでは、クエリリライトは有効になっています。ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE; を実行してクエリリライトを無効にし、ALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE; を実行して有効にすることができます。

    PARTITIONED BY

    いいえ

    パーティションキー列です。このパラメーターを使用して、パーティション化されたマテリアライズドビューを作成します。

    CLUSTERED BY|RANGE CLUSTERED BY

    いいえ

    クラスター化テーブルを作成するためのシャッフル特性です。

    SORTED BY

    いいえ

    クラスター化テーブルを作成するためのソート特性です。

    REFRESH EVERY

    いいえ

    マテリアライズドビューのスケジュール更新間隔です。有効な単位は MINUTES、HOURS、または DAYS です。

    number_of_buckets

    いいえ

    クラスター化テーブルを作成する際のバケット数です。

    TBLPROPERTIES

    いいえ

    • compressionstrategy :データ保存の圧縮戦略を指定します。有効な値は normal、high、extreme です。enable_auto_substitute :パーティションが存在しない場合に、ソースのパーティションテーブルへのクエリパススルーを有効にするかどうかを指定します。詳細については、「マテリアライズドビューのクエリリライト」をご参照ください。

    • enable_auto_refresh :オプション。このプロパティを true に設定すると、自動更新が有効になります。

    • refresh_interval_minutes :enable_auto_refresh が true に設定されている場合にのみ必須です。更新間隔 (分) を指定します。

    • only_refresh_max_pt :オプション。このプロパティは、パーティション化されたマテリアライズドビューにのみ適用されます。true に設定すると、ソーステーブルの最新パーティションのみが更新されます。

    select_statement

    はい

    マテリアライズドビューを定義する SELECT ステートメントです。詳細については、「SELECT Syntax」をご参照ください。

  • 例

    • 例 1 :マテリアライズドビューの作成

      1. 2 つのテーブル mf_t と mf_t1 を作成し、データを挿入します。

        CREATE TABLE IF NOT EXISTS mf_t( 
             id     bigint, 
             value   bigint, 
             name   string) 
        PARTITIONED BY (ds STRING); 
        
        ALTER TABLE mf_t ADD PARTITION (ds='1'); 
        INSERT INTO mf_t PARTITION (ds='1') VALUES (1,10,'田中'),(2,20,'鈴木'); 
        SELECT * FROM mf_t WHERE ds ='1'; 
        -- 次の結果が返されます。
        +------------+------------+------------+------------+
        | id         | value      | name       | ds         |
        +------------+------------+------------+------------+
        | 1          | 10         | 田中       | 1          |
        | 2          | 20         | 鈴木       | 1          |
        +------------+------------+------------+------------+
        
        CREATE TABLE IF NOT EXISTS mf_t1( 
             id     bigint, 
             value   bigint, 
             name   string) 
        PARTITIONED BY (ds STRING); 
        
        ALTER TABLE mf_t1 ADD PARTITION (ds='1'); 
        INSERT INTO mf_t1 PARTITION (ds='1') VALUES (1,10,'田中'),(3,20,'佐藤'); 
        SELECT * FROM mf_t1 WHERE ds ='1';
        -- 次の結果が返されます。
        +------------+------------+------------+------------+
        | id         | value      | name       | ds         |
        +------------+------------+------------+------------+
        | 1          | 10         | 田中       | 1          |
        | 3          | 20         | 佐藤       | 1          |
        +------------+------------+------------+------------+
      2. マテリアライズドビューを作成します。

        • サンプル 1 :ds をパーティションキーとして、パーティション化されたマテリアライズドビューを作成します。

          CREATE MATERIALIZED VIEW mf_mv LIFECYCLE 7 
          (
            key comment 'unique id',
            value comment 'input value',
            ds comment 'partition'
            )
          PARTITIONED BY (ds)
          AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds
               FROM mf_t AS t1 JOIN mf_t1 AS t2
                 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
          --マテリアライズドビューをクエリします。
          SELECT * FROM mf_mv WHERE ds =1;
          +------------+------------+------------+
          | key        | value      | ds         |
          +------------+------------+------------+
          | 1          | 10         | 1          |
          +------------+------------+------------+
        • サンプル 2 :パーティション化されていない、クラスター化されたマテリアライズドビューを作成します。

          CREATE MATERIALIZED VIEW mf_mv2 LIFECYCLE 7 
          CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets 
          AS  SELECT t1.id AS key, t1.value AS value, t1.ds AS ds 
                FROM mf_t AS t1 JOIN mf_t1 AS t2 
                  ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
        • サンプル 3 :パーティション化とクラスタリングを指定して、マテリアライズドビューを作成します。

          CREATE MATERIALIZED VIEW mf_mv3 LIFECYCLE 7 
          PARTITIONED BY (ds) 
          CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets 
          AS  SELECT t1.id AS key, t1.value AS value, t1.ds AS ds 
                FROM mf_t AS t1 JOIN mf_t1 AS t2 
                  ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
    • 例 2 :空のソースパーティションからの更新による空パーティションの作成

      CREATE TABLE mf_blank_pts(id bigint ,name string) PARTITIONED BY (ds bigint); 
      ALTER TABLE mf_blank_pts ADD PARTITION (ds = 1); 
      ALTER TABLE mf_blank_pts ADD PARTITION (ds = 2); 
      INSERT INTO TABLE mf_blank_pts PARTITION(ds=1) VALUES (1,"aba"),(2,"cbd");  
       
      CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_blank_pts PARTITIONED BY (ds) 
      AS SELECT id,name,ds FROM mf_blank_pts;
      
      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>0); 
      
      SHOW PARTITIONS mf_mv_blank_pts; 
      --ソーステーブルのパーティション ds=2 は空です。ds > 0 のパーティションを更新すると、マテリアライズドビューに対応する空のパーティションが作成されます。
      ds=1
      ds=2
      
      SELECT * FROM mf_mv_blank_pts WHERE ds>0; 
      --結果から、パーティション ds=1 のみにデータが含まれていることが分かります。
      +------------+------------+------------+
      | id         | name       | ds         |
      +------------+------------+------------+
      | 1          | aba        | 1          |
      | 2          | cbd        | 1          |
      +------------+------------+------------+

マテリアライズドビューの更新

ソーステーブルまたはパーティションのデータが変更されると、マテリアライズドビューは無効になり、クエリリライトに使用できなくなります。ビューのステータスを確認し、必要に応じて再構築してください。詳細については、「マテリアライズドビューに関する情報のクエリ」をご参照ください。

  • 注意事項

  • 構文

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name>
          REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression>...)];
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    更新するマテリアライズドビューの名前です。

    ds

    いいえ

    マテリアライズドビューのパーティションフィールドの名前です。

    max_pt

    いいえ

    指定されたテーブルまたはマテリアライズドビュー (table_name) から最大のパーティション値を取得します。

    expression

    いいえ

    再構築するパーティションを指定する式です。パーティションマテリアライズドビューで使用します。

  • 例

    • 例 1:非パーティション化マテリアライズドビューの更新。

      -- 非パーティション化テーブルを作成します。
      CREATE TABLE count_test(a BIGINT, b BIGINT); 
      -- 非パーティション化マテリアライズドビューを作成します。
      CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; 
      -- 非パーティション化マテリアライズドビューを更新します。
      ALTER MATERIALIZED VIEW count_mv rebuild; 
    • 例 2:マテリアライズドビューのパーティションの更新。

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1');
    • 例 3:条件によるパーティションの更新。

      ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2');
    • 例 4:最新パーティションの更新。

      -- サンプルのパーティションテーブルを作成します。
      CREATE TABLE IF NOT EXISTS sale_detail_jt 
      (shop_name STRING , 
      customer_id STRING , 
      total_price DOUBLE ) 
      PARTITIONED BY (sale_date STRING ,region STRING );
      
      ALTER TABLE  sale_detail_jt ADD PARTITION (sale_date='2013',region='china');
      
      INSERT INTO  sale_detail_jt PARTITION (sale_date='2013',region='china') VALUES 
          ('s1','c1',100.1), 
          ('s2','c2',100.2), 
          ('s3','c3',100.3);
      
      ALTER TABLE  sale_detail_jt ADD PARTITION (sale_date='2013',region='en');
      INSERT INTO  sale_detail_jt PARTITION (sale_date='2013',region='en') VALUES 
          ('t1','c5',200.0), 
          ('t2','c6',300.0);
          
      -- パーティションデータを表示します。
      SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='china';
      +-----------+-------------+-------------+-----------+--------+
      | shop_name | customer_id | total_price | sale_date | region |
      +-----------+-------------+-------------+-----------+--------+
      | s1        | c1          | 100.1       | 2013      | china  |
      | s2        | c2          | 100.2       | 2013      | china  |
      | s3        | c3          | 100.3       | 2013      | china  |
      +-----------+-------------+-------------+-----------+--------+
      -- パーティションデータを表示します。
      SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='en';
      +-----------+-------------+-------------+-----------+--------+
      | shop_name | customer_id | total_price | sale_date | region |
      +-----------+-------------+-------------+-----------+--------+
      | t1        | c5          | 200.0       | 2013      | en     |
      | t2        | c6          | 300.0       | 2013      | en     |
      +-----------+-------------+-------------+-----------+--------+
      
      -- マテリアライズドビューを作成します。
      CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt;
      
      -- マテリアライズドビュー mv_deferred をクエリします。
      SELECT * FROM mv_deferred;
      -- 以下の結果が返されます:
      +-----------+-------------+-------------+-----------+--------+
      | shop_name | customer_id | total_price | sale_date | region |
      +-----------+-------------+-------------+-----------+--------+
      +-----------+-------------+-------------+-----------+--------+
      
      -- パーティションテーブルを作成します。
      CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string);
      -- データを挿入します。
      INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2');
      -- データをクエリします。
      SELECT * FROM mf_part WHERE dt='2013';
      -- 以下の結果が返されます:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      | 1          | name1 | 2013 |
      | 2          | name2 | 2013 |
      +------------+------+----+
      
      -- パーティションマテリアライズドビューを作成します。
      CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED BY (dt) AS SELECT * FROM mf_part;
      
      -- マテリアライズドビューからデータをクエリします。
      SELECT * FROM mv_rebuild WHERE dt='2013';
      -- 以下の結果が返されます:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      +------------+------+----+
      -- 最新のパーティションデータをリフレッシュします。
      ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part'));
      
      -- マテリアライズドビューからデータをクエリします。
      SELECT * FROM mv_rebuild WHERE dt='2013'; 
      -- 以下の結果が返されます:
      +------------+------+----+
      | id         | name | dt |
      +------------+------+----+
      | 1          | name1 | 2013 |
      | 2          | name2 | 2013 |
      +------------+------+----+

マテリアライズドビューのライフサイクルの変更

既存のマテリアライズドビューのライフサイクルを変更します。

  • 構文

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>;
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    変更するマテリアライズドビューの名前です。

    days

    はい

    マテリアライズドビューの新しいライフサイクル (日数) です。

  • 例

    -- マテリアライズドビューのライフサイクルを 10 日に設定します。
    ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;

マテリアライズドビューのライフサイクルの有効化または無効化

マテリアライズドビューのライフサイクル管理を有効化または無効化します。

  • 構文

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [PARTITION <pt_spec>] {enable|disable} LIFECYCLE;
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    変更するマテリアライズドビューの名前です。

    pt_spec

    いいえ

    変更するパーティションです。フォーマットは (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。ここで、partition_col はパーティション列、partition_col_value はその値です。

    enable|disable

    はい

    enable は有効、disable は無効を意味します。無効の場合、パーティションまたはテーブルはライフサイクル管理の対象になりません。

  • 例

    • 例 1:マテリアライズドビューのパーティションのライフサイクル管理を有効化します。

      ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE;
    • 例 2:マテリアライズドビューのパーティションのライフサイクル管理を無効化します。

      ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;

マテリアライズドビュー情報

スキーマや最終更新日時など、マテリアライズドビューの詳細を表示します。

  • 構文

    DESC EXTENDED [<project_name>.]<mv_name>;
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    クエリするマテリアライズドビューの名前です。

  • 例

    DESC EXTENDED mv;

    このコマンドは次の出力を返します:

    説明

    このサンプル出力は MaxCompute クライアント v0.43 以降でのみ利用可能です。詳細については、「odpscmd を使用して MaxCompute に接続する」をご参照ください。

    +------------------------------------------------------------------------------------+
    | Owner:                    ALIYUN$$****@***.aliyunid.com                       |
    | Project:                  m****                                                |
    | TableComment:                                                                      |
    +------------------------------------------------------------------------------------+
    | CreateTime:               2023-05-30 13:16:07                                      |
    | LastDDLTime:              2023-05-30 13:16:07                                      |
    | LastModifiedTime:         2023-05-30 13:16:07                                      |
    +------------------------------------------------------------------------------------+
    | MaterializedView: YES                                                              |
    | ViewText: select id,name from mf_refresh                                           |
    | Rewrite Enabled: true                                                              |
    | AutoRefresh Enabled: true                                                          |
    | Refresh Interval Minutes: 10                                                       |
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
    +------------------------------------------------------------------------------------+
    | id       | bigint |       |               | true     | NULL         |              |
    | name     | STRING |       |               | true     | NULL         |              |
    +------------------------------------------------------------------------------------+
    | Extended Info:                                                                     |
    +------------------------------------------------------------------------------------+
    | IsOutdated:               false                                                    |
    | TableID:                  569ec712873e44b3868e79b7a8beabab                         |
    | IsArchived:               false                                                    |
    | PhysicalSize:             1875                                                     |
    | FileNum:                  2                                                        |
    | StoredAs:                 CFile                                                    |
    | CompressionStrategy:      normal                                                   |
    | odps.timemachine.retention.days: 1                                                        |
    | ColdStorageStatus:        N/A                                                      |
    | encryption_enable:        false                                                    |
    +------------------------------------------------------------------------------------+
    | AutoRefresh History:                                                               |
    +------------------------------------------------------------------------------------+
    | InstanceId                | Status     | StartTime           | EndTime             |
    +------------------------------------------------------------------------------------+
    | 20230619070546735ghwl1****** | TERMINATED | 2023-06-19 15:05:46 | 2023-06-19 15:05:47 |
    | 20230619065545586gwllc****** | TERMINATED | 2023-06-19 14:55:45 | 2023-06-19 14:55:46 |
    | 20230619064544463gcjgom****** | TERMINATED | 2023-06-19 14:45:44 | 2023-06-19 14:45:45 |
    | 20230619063543334gzxs2d****** | TERMINATED | 2023-06-19 14:35:43 | 2023-06-19 14:35:44 |
    | 2023061906254257gi21w2****** | TERMINATED | 2023-06-19 14:25:42 | 2023-06-19 14:25:43 |
    | 20230619061540813giacg8****** | TERMINATED | 2023-06-19 14:15:41 | 2023-06-19 14:15:41 |
    | 20230619060539674gswjq9****** | TERMINATED | 2023-06-19 14:05:39 | 2023-06-19 14:05:40 |
    | 20230619055538578gvdjk****** | TERMINATED | 2023-06-19 13:55:38 | 2023-06-19 13:55:40 |
    | 20230619054537356glqdne****** | TERMINATED | 2023-06-19 13:45:37 | 2023-06-19 13:45:38 |
    | 2023061905353687gcc5pl****** | TERMINATED | 2023-06-19 13:35:36 | 2023-06-19 13:35:37 |
    +------------------------------------------------------------------------------------+

マテリアライズドビューのステータス照会

マテリアライズドビューのステータスを照会し、有効かどうかを確認します。マテリアライズドビューには、次のいずれかの状態があります:

  • 有効

    MaxCompute は、ソーステーブルではなく、マテリアライズドビューから直接データを読み取ります。

  • 無効

    MaxCompute は、マテリアライズドビューからデータを読み取ることができません。クエリはソーステーブルにフォールバックし、パフォーマンスは高速化されません。

マテリアライズドビューのデータが有効かどうかを確認するには、次の関数を使用します:

  • 構文

    boolean materialized_view_is_valid(<mv_name>,<partition_value>);
  • 例

    マテリアライズドビューのデータがソーステーブルの最新データと一貫性があるかどうかを判定します。データに一貫性がある場合、この関数は true を返し、そうでない場合は false を返します。

    • SELECT materialized_view_is_valid("count_mv");
    • SELECT materialized_view_is_valid("mf_mv_blank_pts","1");

マテリアライズドビューの一覧表示

プロジェクト内のすべてのマテリアライズドビュー、または特定のパターンに一致するマテリアライズドビューのみを一覧表示します。

説明

SHOW MATERIALIZED VIEWS コマンドを使用するには、MaxCompute クライアント (odpscmd) v0.43.0 以降が必要です。

  • 構文

    -- プロジェクト内のすべてのマテリアライズドビューを一覧表示します。
    SHOW MATERIALIZED VIEWS;
    -- プロジェクト内で <materialized_view> パターンに一致するマテリアライズドビューを一覧表示します。
    SHOW MATERIALIZED VIEWS LIKE '<materialized_view>';
  • 例

    -- 'test' で始まるマテリアライズドビューを一覧表示します。アスタリスク (*) はワイルドカードです。
    SHOW MATERIALIZED VIEWS LIKE 'test*';         

    このコマンドは次の結果を返します:

    ALIYUN$account_name:test_two_mv
    ALIYUN$account_name:test_create_one_mv

マテリアライズドビューの削除

マテリアライズドビューを削除します。

  • 構文

    DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge];
  • パラメーター

    パラメーター

    必須

    説明

    IF EXISTS

    いいえ

    IF EXISTS を指定しないと、マテリアライズドビューが存在しない場合にこの操作はエラーを返します。

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    削除するマテリアライズドビューの名前です。

    purge

    いいえ

    purge を指定すると、この操作はマテリアライズドビューのデータを直ちに消去します。

  • 例

    • マテリアライズドビュー count_mv をドロップします。

      DROP MATERIALIZED VIEW count_mv;
    • マテリアライズドビュー count_mv をドロップし、そのデータを直ちに削除します。

      DROP MATERIALIZED VIEW count_mv purge;

マテリアライズドビューからのパーティションの削除

既存のマテリアライズドビューから 1 つ以上のパーティションを削除します。

  • 構文

    ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....];
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    いいえ

    マテリアライズドビューが属する MaxCompute プロジェクトの名前です。このパラメーターを省略すると、現在のプロジェクトが使用されます。プロジェクト名を確認するには、MaxCompute コンソールにログインし、リージョンを選択してから、ワークスペース > プロジェクト管理 に移動します。

    mv_name

    はい

    パーティションを削除するパーティション化されたマテリアライズドビューの名前です。

    IF EXISTS

    いいえ

    IF EXISTS を省略し、マテリアライズドビューが存在しない場合、エラーが返されます。

    pt_spec

    はい

    ドロップするパーティションを少なくとも 1 つ指定する必要があります。形式は (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。partition_col はパーティション列を、partition_col_value はパーティション値を表します。

  • 例

    • 例 1:パーティション化されたマテリアライズドビューからのパーティションの削除

      ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1');
    • 例 2:パーティション化されたマテリアライズドビューから、指定した条件を満たすパーティションの削除

      ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');

マテリアライズドビューのクエリペネトレーション

パーティション化されたマテリアライズドビューには、すべてのパーティションのデータが含まれていない場合があります。たとえば、最新のパーティションのみをリフレッシュした場合などです。クエリがマテリアライズドビューにデータがないパーティションを対象とする場合、システムは自動的にソースパーティションテーブルにフォールバックします。次の図は、このプロセスを示しています。

查询透穿图示

マテリアライズドビューのペネトレーションクエリ機能を有効にするには、次のパラメーターを設定します。

マテリアライズドビューを作成する際に、tblproperties に "enable_auto_substitute"="true" を追加します。

次の例では、ペネトレーションクエリに対応したマテリアライズドビューの使用方法を説明します。

  1. ペネトレーションクエリに対応したパーティション化されたマテリアライズドビューを作成します。

    -- src という名前のソーステーブルを作成します。
    CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string);
    -- パーティション 20210101 にデータを挿入します。
    INSERT INTO src PARTITION(dt='20210101') VALUES(1,'田中');
    
    -- ペネトレーションクエリに対応したパーティション化マテリアライズドビューを作成します。
    -- この時点では、ソーステーブルの 20210101 パーティションのデータのみがマテリアライズされます。
    CREATE MATERIALIZED VIEW IF NOT EXISTS mv LIFECYCLE 7 
    PARTITIONED BY (dt) 
    tblproperties("enable_auto_substitute"="true") 
    AS SELECT id, name, dt FROM src;
    
    -- ソーステーブルに新しいパーティション 20210102 を追加します。
    -- このパーティションは、まだマテリアライズドビューにリフレッシュされていません。
    INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink');
  2. マテリアライズドビュー mv の 20210101 パーティションからデータをクエリします。

    SELECT * FROM mv WHERE dt='20210101';
  3. マテリアライズドビュー mv の 20210102 パーティションからデータをクエリすると、このパーティションはマテリアライズされていないため、システムはソーステーブルへのクエリを自動的に実行します。

    SELECT * FROM mv WHERE dt = '20210102';
    -- 20210102 パーティションのデータはマテリアライズされていないため、クエリはソーステーブルにアクセスするように書き換えられます。これは、次のクエリと等価です。
    SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t;
  4. マテリアライズドビュー mv のパーティション範囲からデータをクエリします。システムは、マテリアライズ化されていないデータに対してソーステーブルへの透過的なクエリを自動的に実行し、その結果を UNION 操作でマテリアライズドデータと結合した上で返します。

    SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id=5; 
    -- パーティション 20201230 と 20210102 のデータはマテリアライズされていないため、クエリはソーステーブルにアクセスするように書き換えられます。これは、次のクエリと等価です。
    SELECT * FROM
    (SELECT id, name, dt FROM src WHERE dt='20201230' OR dt='20210102'
     UNION ALL  
     SELECT * FROM mv WHERE dt='20210101'
    ) t WHERE id = 5;

課金ルール

マテリアライズドビューのコストは、次の 2 つの要素で構成されています:

  • ストレージ料金

    マテリアライズドビューは物理ストレージを消費するため、従量課金でストレージ料金が発生します。詳細については、「ストレージ料金 (従量課金)」をご参照ください。

  • コンピューティングコスト

    マテリアライズドビューの作成、リフレッシュ、クエリ (ビューが有効な場合のクエリリライトを含む) ではコンピューティングリソースを消費するため、コンピューティングコストが発生します。

    • MaxCompute プロジェクトが サブスクリプションの場合、追加料金は発生しません。

    • MaxCompute プロジェクトが 従量課金の場合、MaxCompute は SQL の複雑さと入力データ量に基づいてコストを算出します。詳細については、「Standard SQL pricing」をご参照ください。次の点にご注意ください:

      • マテリアライズドビューのリフレッシュに使用される SQL ステートメントは、その定義クエリと同じです。プロジェクトがサブスクリプションのコンピューティングリソースグループにバインドされている場合、この操作では購入済みのリソースが追加料金なしで使用されます。プロジェクトが従量課金のリソースグループを使用している場合、コストは入力データ量と SQL の複雑さによって決まります。リフレッシュ後、ストレージ料金はマテリアライズドビューの実際のサイズに基づいて請求されます。

      • マテリアライズドビューが有効な場合、クエリリライトはビューからデータを読み取ります。入力データ量はソーステーブルではなくマテリアライズドビューに依存します。ビューが無効な場合、クエリリライトは使用できず、クエリはソーステーブルから直接読み取ります。詳細については、「マテリアライズドビューのステータスのクエリ」をご参照ください。

      • マテリアライズドビューが複数テーブル結合から構築される場合、データ肥大化が発生することがあります。マテリアライズドビューからの読み取りは、ソーステーブルからの読み取りと比べて、常にコストを削減できるとは限りません。

リファレンス

マテリアライズドビューのクエリリライトについては、「マテリアライズドビューのクエリリライト」をご参照ください。

マテリアライズドビューの定期更新については、「マテリアライズドビューの定期更新」をご参照ください。