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

MaxCompute:Delta Table

最終更新日:Jun 04, 2026

MaxCompute Delta Table は、大規模分析データセット向けのパフォーマンス専有型テーブルフォーマットであり、Append Delta Table(プライマリキーなし)と PK Delta Table(プライマリキーあり) の 2 種類が利用可能です。

概要

Delta Table は Alibaba Cloud MaxCompute 内のパフォーマンス専有型テーブルフォーマットで、ACID トランザクション、増分クエリ、タイムトラベル、動的クラスタバケット化、リアルタイムデータ更新、スキーマ進化をサポートします。MaxCompute のネイティブなデータレイクハウス機能およびニアリアルタイムコンピューティング機能により、基盤となるストレージやメタデータを管理することなく、標準 SQL を使用して Delta Table を作成・更新・クエリできます。MaxCompute は自動的に Delta Table を維持・最適化し、使いやすさとコスト効率のバランスを実現します。

特徴

カテゴリ

機能

Append Delta Table

PK Delta Table

基本 DML

Insert、Update、Delete、Merge Into。

サポート

サポート

ACID トランザクション

リードコミッティド/スナップショット分離。

ACID トランザクション管理

サポート

サポート

プライマリキー

プライマリキーを定義します。

未サポート

部分列更新をサポート

スキーマ進化

列の追加、削除、名前変更、順序変更、データの型変更が可能。

ALTER TABLE

サポート

サポート

データインポート

  • Flink を使用した MaxCompute へのデータ書き込み、DataWorks Data Integration、DataHub を使用した高同時実行性の増分データインポートのためのストリーミング書き込み。

  • 増分およびフルバッチ書き込み。

ストリーム/バッチアップロード

ストリームアップロード後、データは即座に参照可能になります。

アップサート

タイムトラベル

結果の再生または監査分析のために、時刻またはバージョン番号で過去のスナップショットをクエリします。

タイムトラベル

サポート

サポート

増分コンピューティング

Delta Live マテリアライズドビュー (MV) および増分読み取り。

増分コンピューティング および 増分クエリ

サポート

(増分マテリアライズドビューのサポートは開発中です。)

サポート

データ組織の最適化

小ファイルのマージ、マルチレベルの COMPACTION、データソートを通じて、増分データファイルを自動的に維持します。

Append Delta Table のデータ組織最適化 および PK Delta Table のデータ組織最適化

サポート

バケット構成は不要です。動的バケット化がデータ分布に自動的に適応します。

サポート

クエリパフォーマンスの最適化

パーティションレベルおよびファイルレベルの統計情報(Min/Max など)、パーティションプルーニング、列のプルーニング、述語プッシュダウン。

サポート

サポート

セキュリティとコンプライアンス

ストレージ暗号化動的データマスキング行レベルのアクセス制御

サポート

サポート

ディザスタリカバリとバックアップ

テーブルスナップショットローカルバックアップゾーン冗長ディザスタリカバリ

サポート

サポート

コスト

AliORC 列指向ストア圧縮および階層型ストレージ。

サポート

サポート

ユーザー体験

リアルタイムサービス向けのリアルタイムデータ更新

Delta Table は Stream Upload を通じてリアルタイム書き込みおよびアップサートをサポートします。データは即座に参照可能になります。MaxCompute は階層型ストレージ戦略により、書き込み遅延とクエリパフォーマンスのバランスを取ります。

  • リアルタイム書き込みを保証:新しいデータはソートされていない非クラスタバケットに書き込まれるため、低遅延かつ高スループットを実現します。

  • SQL クエリパフォーマンスを向上:バックグラウンドの増分再クラスタリングサービスが、増分データを非同期でソート済みのクラスタバケットに再編成します。クエリエンジンはソートされたベースデータに対してプルーニングを行い、少量の増分データのみをスキャンすることで、データの新鮮さと効率性のバランスを取ります。

効率的な増分データ処理と分析

MaxCompute は高度な増分処理機能を提供します。増分コンピューティング および Delta Live マテリアライズドビュー(プレビュー) を組み合わせることで、リアルタイムデータ処理パイプラインを構築できます。

ビジネスの成長に対応し、従来のテーブルフォーマットの制限を克服

  1. 動的バケット割り当て:Append Delta Table は DDL での指定なしに動的にバケットを割り当てます。データ量が増加すると、動的バケット化サービスが自動的にバケットを分割または作成し、変化に適応してスキューおよび断片化を防止します。

  2. スキーマ進化:Delta Table は列の追加、削除、変更、名前変更を完全な下位互換性とともにサポートし、誤ったデータ損失を防ぎます。

  3. 統合テーブル機能:単一の Delta Table でINSERT INTOUPDATEDELETE、およびMERGE INTO をサポートし、ソート済みクラスタリングストレージを備えています。これにより、従来はパーティションテーブル、クラスタテーブル、トランザクションテーブルを別々に用意する必要があった機能を統合できます。

  4. マルチエンジンサポート:MaxCompute SQL、MaxFrame、Spark on MaxCompute、およびオープンソースエンジン(Flink、Spark、StarRocks)から、Spark Connector およびオープンストレージ API を介して Delta Table にアクセスできます。

パフォーマンスと信頼性のバランス

  1. Delta Table はテラバイト~ペタバイト規模のデータ量を高速なメタデータ操作で処理します。クエリではパーティションプルーニング、列のプルーニング、述語プッシュダウンを使用して、スキャンするデータ量を最小限に抑えます。

  2. ACID トランザクション:Delta Table は楽観的同時実行制御を使用して複数の書き込みを並列処理します。書き込み競合は自動的に検出され、再試行されます。

  3. セキュリティとコンプライアンス:Delta Table はストレージ暗号化、テーブルレベルおよび列レベルの ACL、行レベルの権限、動的データマスキングをサポートします。

  4. バックアップとロールバック:バージョン管理されたゴミ箱メカニズムにより、データ破損や誤って削除された場合でも、テーブルを以前の健全な状態にロールバックできます。

SQL 操作

DDL

Append Delta Table の作成

-- Append Delta Table の作成
CREATE TABLE <table_name> (
  <col_name> <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...   
) 
[comment <table_comment>]
[RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) ]
TBLPROPERTIES (
  "table.format.version"="2" 
  ["acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];

TBLPROPERTIES パラメーター:

パラメーター

必須

説明

注記

"table.format.version"="2"

はい

テーブルフォーマットを Delta Table として宣言します。

acid.data.retain.hours

いいえ

デフォルト値は 24 です。有効値の範囲は [24, 168] です。

タイムトラベルを使用して既存データの状態をクエリできる時間範囲(時間単位)を指定します。

  • 値が 0 の場合、既存データの状態は保持されず、タイムトラベルクエリはサポートされません。

  • このパラメーターの値よりも長く存在している既存データの状態は、削除またはコンパクションされる可能性があります。

  • タイムトラベルクエリでこのパラメーターの値よりも前の時刻を指定すると、エラーが報告されます。たとえば、このパラメーターが 72 時間に設定されている場合、72 時間以上前の既存データの状態をクエリしようとするとエラーが報告されます。

acid.incremental.query.out.of.time.range.enabled

いいえ

デフォルト値は false です。

true に設定すると、増分クエリで指定する endTimestamp をテーブルの最新コミット時刻より後に設定できます。endTimestamp が現在時刻より後の場合、新しいデータが挿入される可能性があるため、複数回のクエリで異なる結果が返されることがあります。

このパラメーターの値はテーブルごとに変更できます。

PK Delta Table の作成

-- PK Delta Table の作成
CREATE TABLE <table_name> (
  <col_name> <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...   
  PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )
) 
[comment <table_comment>]
TBLPROPERTIES (
  "table.format.version"="2" 
  [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];

パラメーター:

  • PRIMARY KEY (PK):PK Delta Table に必須です。一意の値の組み合わせを持つ 1 つ以上の列をサポートします。標準 SQL のプライマリキー構文に従います。プライマリキーカラムは NOT NULL である必要があり、変更できません。

    プライマリキーを設定すると、プライマリキーカラムに基づいてデータの重複排除が行われます。一意性制約は、単一のパーティション内または非パーティション化テーブル全体で適用されます。

  • TBLPROPERTIES パラメーター:

パラメーター

必須

説明

注記

"table.format.version"="2"

はい

テーブルフォーマットを Delta Table として宣言します。

  • 以前は、PK Delta Table は "transactional"="true" を設定し、PRIMARY KEY を指定することで宣言していました。

  • 現在は、"table.format.version"="2" を設定し、PRIMARY KEY を指定することで宣言できます。

write.bucket.num

いいえ

デフォルト値は 16 です。有効値の範囲は (0, 4096] です。

パーティションごとまたは非パーティション化テーブル全体のバケット数を指定します。これは書き込み同時実行数も設定します。パーティションテーブルでは変更可能(新規パーティションに適用)、非パーティション化テーブルでは変更不可です。ガイドライン:

  • Tunnel インポートの場合、Tunnel ノードの同時実行数を設定しますが、Tunnel 同時実行制限に従います。

  • SQL 書き込みの場合、Reducer の並列度を設定しますが、最大 Reducer ノード同時実行数に従います。

  • バケットあたり約 500 MB を目安としてください。たとえば、500 GB のパーティションには約 1,000 個のバケットが必要です。非常に大規模なテーブルでは、バケットあたり 2~3 GB でも問題ありません。

acid.data.retain.hours

いいえ

デフォルト値は 24 です。有効値の範囲は [24, 168] です。

タイムトラベルを使用して既存データの状態をクエリできる時間範囲(時間単位)を指定します。

  • 値が 0 の場合、既存データの状態は保持されず、タイムトラベルクエリはサポートされません。

  • このパラメーターの値よりも長く存在している既存データの状態は、削除またはコンパクションされる可能性があります。

  • タイムトラベルクエリでこのパラメーターの値よりも前の時刻を指定すると、エラーが報告されます。たとえば、このパラメーターが 72 時間に設定されている場合、72 時間以上前の既存データの状態をクエリしようとするとエラーが報告されます。

acid.incremental.query.out.of.time.range.enabled

いいえ

デフォルト値は false です。

true に設定すると、増分クエリで指定する endTimestamp をテーブルの最新コミット時刻より後に設定できます。endTimestamp が現在時刻より後の場合、新しいデータが挿入される可能性があるため、複数回のクエリで異なる結果が返されることがあります。

このパラメーターの値はテーブルごとに変更できます。

acid.write.precombine.field

いいえ

1 つのカラム名を指定できます。

カラム名を指定すると、同じコミット内でプライマリキー (PK) カラムおよび指定されたカラムに基づいてファイル処理中にデータの重複排除が行われます。これにより、データの一意性と整合性が保証されます。

説明

単一コミットのデータ量が 128 MB を超える場合、複数のファイルが生成されます。このパラメーターは複数ファイルには適用されません。

acid.partial.fields.update.enable

いいえ

true に設定すると、SQL または Tunnel を使用して Delta Table に対して部分列更新を実行できます。

このパラメーターはテーブル作成時に設定してください。テーブル作成後は変更できません

注記

項目

Append Delta Table

PK Delta Table

クラスタテーブル

バケット数

write.bucket.num の指定は不要です。バケットはデータ量に応じて動的にスケーリングします。

DDL でバケット数を指定します。デフォルト:16。

/

データ組織ポリシー

RANGE CLUSTERED BY のみ(CLUSTERED BY は未サポート)。SORT BY は不要です — データはデフォルトで RANGE CLUSTERED BY フィールドでソートされます。

CLUSTERED BY は使用できません。プライマリキー上にハッシュクラスタが自動作成されます。

CLUSTERED BY

ライフサイクル

lifecycle >= acid.data.retain.hours / 24 を満たす必要があります。テーブル作成時に検証されます。

/

/

  1. 既存の標準テーブルを直接 Delta Table に変換することはできません。

  2. PK Delta Table はプライマリキー (PK) カラムに対するスキーマ進化をサポートしていません。

  3. PK Delta Table は現在、JSON データの型をサポートしていません。

  4. CREATE TABLE AS はサポートされていません。

DML

Delta Table は DML 操作をサポートします:データの挿入または上書き (INSERT INTO | INSERT OVERWRITE)UPDATE | DELETE、およびMERGE INTO

DQL

Delta Table は汎用的なクエリ分析をサポートします。DQL 操作 (SELECT)

データインポート

  • Append Delta Table はバッチアップロードおよびストリームアップロードをサポートします。プライマリキーがないため、アップサートおよび削除はサポートされません。

  • PK Delta Table はTunnel Upsert/Delete API をサポートします。アップサートは、プライマリキーが存在しない場合は行を挿入し、存在する場合はプライマリキー以外のフィールドを更新します。

データ組織の最適化

  • Append Delta Table はデータ組織に Range Clustering を使用します(Append Delta Table のデータ組織最適化)。デフォルトでは Row_ID がクラスタリングキーとなり、バケットは動的にスケーリングします。クラスタキーを指定すると、バックグラウンドの増分再クラスタリングがデータの順序を維持します。

  • PK Delta Table はプライマリキー上でハッシュクラスタリングを使用し、効率的な書き込みおよび更新を実現します。PK Delta Table のデータ組織最適化