MaxCompute は、シンプルで使いやすい増分更新パイプラインの構築を支援する Delta Live マテリアライズドビュー機能を導入しました。このトピックでは、MaxCompute で Delta Live マテリアライズドビューを使用する方法について説明します。
機能紹介
完全更新マテリアライズドビューと比較して、Delta Live マテリアライズドビューはデータの鮮度と計算コストのバランスを取ります。既存の計算結果を再利用し、インテリジェントな増分アルゴリズムを適用して、計算コストを削減しながらデータの鮮度を向上させます。
この機能は現在、招待プレビュー段階です。この機能の使用方法の詳細については、「手順」をご参照ください。
アーキテクチャ概要

利点
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 | いいえ | 自動更新を有効にします。
|
refresh_mode | いいえ | 更新モード。
|
refresh_cron | いいえ | cron 式を指定して、スケジュールされた間隔更新、ポイントインタイム更新、または間隔とポイントインタイムの組み合わせ更新など、更新頻度を設定します。 値は QUARTZ Cron 形式の文字列である必要があります。使用方法の詳細については、「Cron 式の例」をご参照ください。例は次のとおりです。 |
refresh_job_settings | いいえ |
|
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 | ジョブの状態。
|
refresh_trigger | 更新方法。
|
refresh_mode | 更新モード。
|
error_message | 更新が失敗した場合のエラーメッセージ。更新が成功した場合、この値は NULL です。 |
source_tables | Delta Live MV が使用するベーステーブルの名前とバージョン。 |
numInsertedRows | 挿入された行数。 |
numDeletedRows | 削除された行数。 |
課金ルール
Delta Live マテリアライズドビューの課金には、コンピューティング料金とストレージ料金が含まれます。これらは、標準のマテリアライズドビュー操作の課金ルールと一致します。
コンピューティング料金
作成または更新中にジョブが実際に実行されると、計算リソースが消費され、コンピューティング料金が適用されます。課金は、標準の SQL ジョブと同じルールに従います。
増分データ変更が発生しない場合、自動更新は SQL ジョブをトリガーせず、料金は発生しません。
自動更新ジョブ、計算リソースの使用量、および関連コストを追跡するために、Delta Live マテリアライズドビューを専用のプロジェクトに配置することを推奨します。
ストレージ料金
Delta Live マテリアライズドビューは、標準のマテリアライズドビューや通常のテーブルと同様にストレージ料金が課金されます。
動的マテリアライズドビューは、特定の演算子に対して状態ベースの増分計算アルゴリズムを使用する場合があり、ストレージスペースを消費する内部状態テーブルを生成します。
Delta Live マテリアライズドビューは、標準の Delta Table と同様に、増分 CDC とタイムトラベルストレージを必要とします。