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

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

最終更新日:Nov 09, 2025

MaxCompute は、シンプルで使いやすい増分更新パイプラインの構築に役立つ Delta Live マテリアライズドビュー (Delta Live MV) 機能を導入しています。このトピックでは、MaxCompute Delta Live MV で実行できる操作について説明します。

はじめに

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

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

アーキテクチャ

image

利点

MaxCompute の Delta Live MV 機能には、次の利点があります。

  • 宣言型 SQL、ゼロメンテナンス、および自動データウェアハウス階層化。

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

  • 費用対効果が高い。Delta Live MV はデータ鮮度とコストのバランスを取り、増分および完全な ETL (抽出·変換·書き出し) プロセスを効率的に処理します。

シナリオ

この機能は、次のシナリオに適しています。

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

    T+1 データウェアハウスから、分レベルのニアリアルタイムデータウェアハウスに進化します。

  • 増分計算と完全計算の統合

    • 当日パーティションのニアリアルタイム増分計算: これは、高いデータ鮮度と費用対効果の高いコンピューティングを必要とするシナリオに適しています。

    • (オプション) 履歴パーティションの更新: これは、データアーカイブ、データ修正、およびその後の大規模なデータ分析に使用されます。

前提条件

  • MaxCompute コンソールでプロジェクトが作成されていること。

  • ソーステーブルで Change Data Capture (CDC) 機能が有効になっていること。次のタイプのソーステーブルがサポートされています。

    • CDC 機能が有効になっているDelta テーブル

    • Delta Live MV テーブル。Delta Live MV では、CDC 機能はデフォルトで有効になっています。

注意事項

  • Delta Live MV には、RAND 関数やユーザー定義関数 (UDF) などの非決定的な計算を含めることはできません。

  • Delta Live MV は現在、さまざまな SQL 操作の増分計算をサポートしており、これには次の一般的な SQL オペレーターが含まれます。

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

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

    • ユーザー定義集計関数 (UDAF) を除く集計関数。これには、GROUP BY または AGG のない関数が含まれます。

    • WINDOW

    • TableFunctionScan

    • UNION ALL

    • FILTER/Project

    • SUBQUERY

Delta Live MV の作成

構文

CREATE MATERIALIZED VIEW [IF NOT EXISTS][<project_name>.]<mv_name>
[LIFECYCLE <days>]    -- ライフサイクルを指定します。
[BUILD DEFERRED]    -- テーブルスキーマのみを作成し、データは生成しないことを指定します。
[(<col_name> [COMMENT <col_comment>],...)]    -- 列のコメント。
[DISABLE REWRITE]    -- MV をクエリの再書き込みに使用するかどうかを指定します。
[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 MV の構文は、標準のマテリアライズドビューの構文と互換性がありますが、次の点が異なります。

  • Delta Live MV をクラスター化テーブルとして作成することはできません。

  • Delta Live MV では、enable_auto_substitute パラメーターを true に設定することはできません。Delta Live MV は非同期マテリアライズドビューであり、そのベーステーブルのデータは最新バージョンではない可能性があります。この動作は、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: シンプルな Delta Live MV の作成

この例では、5 分ごとに自動的に増分更新を実行する mv1 という名前の Delta Live MV を作成します。ソーステーブルは、CDC 機能が有効になっている Delta テーブルです。

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: 一般的なチューニングパラメーターを使用した Delta Live MV の作成

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 MV の作成

パーティション化された Delta Live MV を作成するときは、BUILD DEFERRED キーワードを追加して、データ定義言語 (DDL) 操作のみが実行されるように指定します。

-- Delta Live MV を作成します。
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 MV の更新方法の詳細については、「手動更新」をご参照ください。

例 4: パラメーター化された定義を持つ Delta Live MV の作成

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

  • get_setting 関数がサポートされています。この関数は、セッションフラグで設定されたパラメーターの値を取得します。パラメーターにはプレフィックス dps.custom.setting を付ける必要があります。

  • 従来のオフラインジョブでは、${biz_date}get_setting(odps.custom.setting.xx) に置き換えてパラメーター化を実装します。

  • Delta Live MV の更新文の前に、セッションフラグ set odps.custom.setting.xx=yy を追加します。

  • 実行時に、Delta Live MV の get_setting(odps.custom.setting.xx) は、MaxCompute オプティマイザーによって自動的に yy に置き換えられます。

例:

-- Delta Live MV を作成します。
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 MV は、単一パーティションの手動更新のみをサポートします。構文は、標準のマテリアライズドビューと同じです。

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");

自動更新の再開

次のコマンドを実行して、マテリアライズドビューの TBLPROPERTIES パラメーターを変更し、自動更新を有効または再開します。

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

更新頻度の変更

次のコマンドを使用して、Delta Live MV の更新頻度を変更できます。

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

refresh_interval_minutes パラメーターの最小値は 1 です。この値は、ベーステーブルの CDC ライフサイクルよりも小さくする必要があります。

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

データ変更履歴の表示

次のコマンドを実行して、Delta Live MV のデータ変更レコードを表示します。

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

更新履歴の表示

次のコマンドを実行して、Delta Live MV の更新履歴を表示します。このコマンドは、更新操作にのみ適用されます。

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。この ID を使用して Logview を取得できます。

duration_in_seconds

更新の完了にかかった時間。

state

ジョブのステータス。

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELLED

refresh_trigger

更新メソッド。

  • MANUAL: ユーザーが Refresh を呼び出すことによって手動でトリガーされる更新。DataWorks によってスケジュールされた更新も、MaxCompute の手動トリガーと見なされます。

  • SYSTEM_SCHEDULED: MaxCompute によってスケジュールされる更新。

refresh_mode

更新モード。

  • FULL: 完全更新。

  • INCREMENTAL: 増分更新。

  • NO_DATA: 増分データなし。

error_message

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

source_tables

Delta Live MV で使用されるベーステーブルの名前と、それに対応するバージョンを記録します。

numInsertedRows

挿入された行数。

numDeletedRows

削除された行数。

課金ルール

Delta Live MV のコストは、コンピューティングコストとストレージコストで構成されます。コンピューティングとストレージの課金方法は、標準のマテリアライズドビュー操作と同じです。

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

    • Delta Live MV を作成または更新する際に、コンピューティングジョブが開始されると、コンピューティングリソースが消費され、コンピューティング料金が発生します。課金ルールは、標準の SQL ジョブと同じです。

    • 自動更新機能がトリガーされたときに、増分データの変更がない場合、更新のための SQL ジョブは開始されず、料金は発生しません。

    • Delta Live MV は別のプロジェクトに配置することをお勧めします。これにより、自動更新ジョブ、そのコンピューティングリソースの消費、および関連する料金を追跡しやすくなります。

  • ストレージ料金

    • Delta Live MV は、標準のマテリアライズドビューまたは標準テーブルと同じ方法でストレージ料金が課金されます。

    • 一部のオペレーターでは、Delta Live MV は状態ベースの増分計算アルゴリズムを使用する場合があります。これにより、ストレージ領域を消費する内部状態テーブルが生成されます。

    • Delta Live MV は、増分 CDC と Time Travel のためにストレージオーバーヘッドを必要とします。このストレージオーバーヘッドは、標準の Delta テーブルのそれと似ています。