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

MaxCompute:Delta Live マテリアライズドビュー (Delta Live MV) (招待プレビュー)

最終更新日:Mar 20, 2026

MaxCompute は、シンプルで使いやすい増分更新パイプラインの構築を支援する Delta Live マテリアライズドビュー機能を導入しました。このトピックでは、MaxCompute で Delta Live マテリアライズドビューを使用する方法について説明します。

機能紹介

完全更新マテリアライズドビューと比較して、Delta Live マテリアライズドビューはデータの鮮度と計算コストのバランスを取ります。既存の計算結果を再利用し、インテリジェントな増分アルゴリズムを適用して、計算コストを削減しながらデータの鮮度を向上させます。

この機能は現在、招待プレビュー段階です。この機能の使用方法の詳細については、「手順」をご参照ください。

アーキテクチャ概要

image

利点

MaxCompute の Delta Live マテリアライズドビュー機能には、次の利点があります。

  • 宣言型 SQL、フルマネージドの運用、およびデータウェアハウスの自動階層化。

  • 簡素化されたデータウェアハウスアーキテクチャ。1 つの計算ロジックと 1 つのエンジンで増分計算と完全計算の両方をサポートし、低レイテンシーと高スループットの要件を満たします。

  • コスト効率。データの鮮度とコストのバランスを取り、効率的な完全 ETL と増分 ETL を実現します。

利用シーン

この機能は、次のシナリオに適用されます。

  • オフラインサービスのリアルタイム処理

    T+1 データウェアハウスから、分レベルのレイテンシーを持つニアリアルタイムデータウェアハウスへと進化させます。

  • 完全処理と増分処理の統合

    • 当日のパーティションに対するニアリアルタイムの増分計算により、低い計算コストで高いデータの鮮度要件を満たします。

    • (オプション) 履歴パーティションをバックフィルして、下流の大規模分析のためにデータをアーカイブまたは修正します。

前提条件

  • MaxCompute プロジェクトを作成済みであること。

  • ソーステーブルで変更データキャプチャ (CDC) を有効にしていること。サポートされているソーステーブルのタイプは次のとおりです。

    • Delta Table 増分テーブルであり、CDC 機能が有効になっている必要があります。

    • これは動的マテリアライズドビューです。変更データキャプチャ (CDC) 機能はデフォルトで有効になっています。

注意事項

  • Delta Live マテリアライズドビューには、RAND 関数やユーザー定義関数 (UDF) などの非決定的な計算を含めることはできません。

  • Delta Live マテリアライズドビューは、次の演算子を含む、すべての一般的な SQL ロジックの増分計算を完全にサポートしています。

    • 2 つのストリームに対する INNER JOIN

    • 2 つのストリームに対する (LEFT/RIGHT) OUTER JOIN

    • GROUP BY や集約のない関数を含む、UDAF を除くすべての集計関数

    • WINDOW

    • TableFunctionScan

    • UNION ALL

    • FILTER/Project

    • SUBQUERY

Delta Live マテリアライズドビューの作成

構文

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 ON/BY (<col_name> [, <col_name>, ...])    -- マテリアライズドビューをパーティションテーブルとして作成
[REFRESH EVERY <num> MINUTES/HOURS/DAYS] -- スケジュールされた更新間隔を設定
TBLPROPERTIES(
  "refresh_mode"="incremental"
  [,"enable_auto_refresh"="true"]    -- 自動更新を有効化
  [,"refresh_cron"="xx"]             -- cron 式を使用して、定期的、スケジュールベース、またはインターバルベースの更新を設定
  [,"refresh_job_settings"="xx"]
              )
AS <select_statement>;

Delta Live マテリアライズドビューの構文は、標準のマテリアライズドビューの構文と互換性がありますが、次の点が異なります。

  • 動的マテリアライズドビューをクラスター化テーブルとして作成することはできません。

  • enable_auto_substitute パラメーターを true に設定することはできません。Delta Live マテリアライズドビューは非同期です。使用するベーステーブルのデータが最新バージョンではない可能性があり、これは enable_auto_substitute = true と競合します。

パラメーターの説明

パラメーター

必須

説明

project_name

いいえ

プロジェクト名。

mv_name

はい

Delta Live MV の名前。

LIFECYCLE <days>

いいえ

ライフサイクルを指定します。

BUILD DEFERRED

いいえ

作成時にテーブルスキーマのみを生成し、データは生成しません。

col_name

いいえ

列名。

col_comment

いいえ

列コメント。

DISABLE REWRITE

いいえ

ビューをクエリ書き換えに使用できるかどうかを指定します。

table comment

いいえ

テーブルコメント。

REFRESH EVERY <num> MINUTES/HOURS/DAYS

いいえ

更新スケジュールの間隔を設定します。最小値は 1 分です。

enable_auto_refresh

いいえ

自動更新を有効にします。

  • true:有効。

  • false:無効。

refresh_mode

いいえ

更新モード。

  • full:完全更新。

  • incremental:増分更新。

refresh_cron

いいえ

cron 式を指定して、スケジュールされた間隔更新、ポイントインタイム更新、または間隔とポイントインタイムの組み合わせ更新など、更新頻度を設定します。

値は QUARTZ Cron 形式の文字列である必要があります。使用方法の詳細については、「Cron 式の例」をご参照ください。例は次のとおりです。

TBLPROPERTIES(
  "enable_auto_refresh"="true",
  "refresh_cron"="xx"
)

refresh_job_settings

いいえ

  • 更新中に自動的に適用される一般的なチューニングパラメーターを設定します。例:

    'refresh_job_settings'='set odps.sql.split.size=128;set odps.sql.reshuffle.dynamicpt
    =false;'
  • この方法で設定されたパラメーターは、現在のセッションフラグよりも高い優先度を持ちます。

select_statement

はい

SQL クエリ文。

例 1:単純な動的マテリアライズドビューの作成

5 分ごとに増分更新を実行する mv1 という名前の Delta Live マテリアライズドビューを作成します。ソーステーブルは CDC が有効になっている Delta Table です。

CREATE MATERIALIZED VIEW IF NOT EXISTS mv1
REFRESH EVERY 5 MINUTES
TBLPROPERTIES("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS 
SELECT name, COUNT(*) FROM source GROUP BY name;

例 2:汎用チューニングパラメーターを使用した動的マテリアライズドビューの作成

CREATE MATERIALIZED VIEW IF NOT EXISTS part_dlmv_department
PRIMARY KEY(dept_id)
LIFECYCLE 10
BUILD DEFERRED
PARTITIONED BY (pt)
TBLPROPERTIES('refresh_mode'='incremental', 
'refresh_job_settings'='set odps.sql.split.size=128;set odps.sql.reshuffle.dynamicpt
=false;')
AS SELECT *, get_setting('odps.custom.setting.department.pt') AS pt FROM t_department;

例 3:パーティションごとの増分更新を行うパーティション化された Delta Live マテリアライズドビューの作成

パーティション化された Delta Live マテリアライズドビューを作成する際は、BUILD DEFERRED キーワードを追加して、DDL 操作のみが実行されることを示します。

-- Delta Live マテリアライズドビューの作成
CREATE MATERIALIZED VIEW dlmv_pt
PRIMARY KEY(value) BUILD DEFERRED PARTITIONED BY (ds) TBLPROPERTIES
('refresh_mode'='incremental', 'enable_auto_refresh'='true') 
AS SELECT value, AVG(value2), ds FROM dlmv_pt_src GROUP BY value, ds;

-- 単一パーティションの更新
ALTER MATERIALIZED VIEW dlmv_pt REBUILD PARTITION(ds='20250730');
説明

Delta Live マテリアライズドビューの更新の詳細については、「手動更新」をご参照ください。

例 4:パラメーター化された Delta Live マテリアライズドビューの作成

パラメーター化された定義をサポートし、オフラインパーティションジョブを増分ジョブに移行します。

  • get_setting 関数を使用すると、セッションフラグで設定されたパラメーター値を取得できます。パラメーター名はプレフィックス dps.custom.setting で始まる必要があります。

  • 従来のオフラインジョブの ${biz_date}get_setting(odps.custom.setting.xx) に置き換えることで、パラメーター化が可能になります。

  • Delta Live マテリアライズドビューを更新する前にセッションフラグを追加します:set odps.custom.setting.xx=yy

  • ランタイムに、MaxCompute は get_setting(odps.custom.setting.xx)yy に置き換えます。

例:

-- Delta Live マテリアライズドビューの作成
CREATE MATERIALIZED VIEW mv1 
BUILD DEFERRED -- DDL のみ実行し、データは生成しない
PARTITIONED BY (ds) 
REFRESH EVERY 5 minutes 
TBLPROPERTIES("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS 
SELECT A.* FROM A JOIN B ON A.c1 = B.c1
  AND A.ds=get_setting('odps.custom.setting.bizdate.a')
  AND B.ds=get_setting('odps.custom.setting.bizdate.b');

-- 更新ロジック。DataWorks のスケジューリングは ${biz_date} と ${yesterday} を自動的に置き換えます。
SET odps.custom.setting.bizdate.a=${biz_date};
SET odps.custom.setting.bizdate.b=${yesterday};
ALTER MATERIALIZED VIEW mv1 REBUILD PARTITION(ds=${biz_date});

動的マテリアライズドビューの管理

削除

DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name>;

手動更新

Delta Live マテリアライズドビューは、単一パーティションの手動更新をサポートしています。構文は標準のマテリアライズドビューと一致します。

ALTER MATERIALIZED VIEW [<project_name>.]<mv_name>
      REBUILD [PARTITION(<ds>=max_pt(<table_name>),<expression1>...)];

ここで、ds はパーティションキー列です。

自動更新の無効化

TBLPROPERTIES を更新して自動更新を無効にするには、次のコマンドを実行します。

ALTER MATERIALIZED VIEW <mv_name> SET TBLPROPERTIES("enable_auto_refresh"="false");

自動更新の有効化または再開

自動更新を有効化または再開するには、次のコマンドを実行します。

ALTER MATERIALIZED VIEW <mv_name> SET TBLPROPERTIES("enable_auto_refresh"="true");

更新頻度の変更

更新頻度を変更するには、次のコマンドを実行します。

ALTER MATERIALIZED VIEW <mv_name> 
SET TBLPROPERTIES("refresh_interval_minutes"="xx");
説明

refresh_interval_minutes の最小値は 1 です。ベーステーブルの CDC ライフサイクルよりも小さい値を設定することを推奨します。

動的マテリアライズドビューの表示

データ変更履歴の表示

Delta Live マテリアライズドビューのデータ変更レコードを表示するには、次のコマンドを実行します。

SHOW HISTORY FOR TABLE <mv_name>;

出力例:

ObjectType      ObjectId                                ObjectName              VERSION(LSN)            Time                    Operation
TABLE           d95ec7015e8b432e8e0092d01da962a9        incremental_mv          0000000000000001        2024-08-18 21:06:32     CREATE
TABLE           d95ec7015e8b432e8e0092d01da962a9        incremental_mv          0000000000000002        2024-08-18 21:11:13     UPDATE

更新履歴の表示

更新履歴 (REFRESH 操作のみ) を表示するには、次のコマンドを実行します。

SELECT * FROM 
Delta_Live_MV_Refresh_History(['<project_name>', '<schema_name>',]'<table_name>');

パラメーターの説明

パラメーター

説明

project_name

プロジェクト名。

schema_name

スキーマ名。

table_name

テーブル名。

戻り値の説明

フィールド名

説明

project_name

Delta Live MV を所有するプロジェクト。

schema_name

Delta Live MV を所有するスキーマ。

name

Delta Live MV の名前。

refresh_start_time

更新の開始時刻。

refresh_end_time

更新の終了時刻。ジョブの状態が RUNNING の場合、この値は NULL です。

instance_id

ジョブ ID。Logview にアクセスするために使用します。

duration_in_seconds

更新の期間。

state

ジョブの状態。

  • RUNNING:実行中。

  • TERMINATED:完了。

  • FAILED:失敗。

  • CANCELLED:キャンセル済み。

refresh_trigger

更新方法。

  • MANUAL:ユーザーが Refresh 操作を呼び出すと手動でトリガーされます。MaxCompute の場合、DataWorks からのスケジューリングも手動トリガーと見なされます。

  • SYSTEM_SCHEDULED:MaxCompute によって内部的にトリガーされます。

refresh_mode

更新モード。

  • FULL:完全更新。

  • INCREMENTAL:増分更新。

  • NO_DATA:増分データなし。

error_message

更新が失敗した場合のエラーメッセージ。更新が成功した場合、この値は NULL です。

source_tables

Delta Live MV が使用するベーステーブルの名前とバージョン。

numInsertedRows

挿入された行数。

numDeletedRows

削除された行数。

課金ルール

Delta Live マテリアライズドビューの課金には、コンピューティング料金とストレージ料金が含まれます。これらは、標準のマテリアライズドビュー操作の課金ルールと一致します。

  • コンピューティング料金

    • 作成または更新中にジョブが実際に実行されると、計算リソースが消費され、コンピューティング料金が適用されます。課金は、標準の SQL ジョブと同じルールに従います。

    • 増分データ変更が発生しない場合、自動更新は SQL ジョブをトリガーせず、料金は発生しません。

    • 自動更新ジョブ、計算リソースの使用量、および関連コストを追跡するために、Delta Live マテリアライズドビューを専用のプロジェクトに配置することを推奨します。

  • ストレージ料金

    • Delta Live マテリアライズドビューは、標準のマテリアライズドビューや通常のテーブルと同様にストレージ料金が課金されます。

    • 動的マテリアライズドビューは、特定の演算子に対して状態ベースの増分計算アルゴリズムを使用する場合があり、ストレージスペースを消費する内部状態テーブルを生成します。

    • Delta Live マテリアライズドビューは、標準の Delta Table と同様に、増分 CDC とタイムトラベルストレージを必要とします。