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

MaxCompute:Delta テーブル

最終更新日:Aug 22, 2026

Delta テーブルは、MaxCompute の大規模な分析データセット向けに設計された高性能なテーブルフォーマットです。これには、プライマリキーのないテーブル用の Append Delta テーブルと、プライマリキーのあるテーブル用の PK Delta テーブルの 2 種類があります。本トピックでは、Delta テーブルの基本的な機能と操作について説明します。

概要

Delta テーブルは、Alibaba Cloud MaxCompute の高性能なテーブルフォーマットです。原子性、一貫性、分離性、耐久性 (ACID) トランザクション、増分クエリ、タイムトラベル、動的クラスターバケット化、リアルタイムデータ更新、スキーマエボリューションなどの機能をサポートします。MaxCompute のネイティブなデータレイクハウスとニアリアルタイムのコンピューティング機能により、標準 SQL を使用して Delta テーブルを作成、更新、クエリできます。複雑な基盤ストレージやメタデータを管理する必要はありません。MaxCompute はこれらを自動的に維持および最適化し、使いやすさとコスト効率のバランスを提供します。

機能

カテゴリ

機能

Append Delta テーブル

PK Delta テーブル

基本的な DML

Insert、Update、Delete、Merge Into

サポート

サポート

ACID トランザクション

Read Committed/スナップショット分離

詳細については、「ACID トランザクション管理」をご参照ください。

サポート

サポート

プライマリキー

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

非サポート

サポート

スキーマエボリューション

列の追加、削除、名前変更、並び替え、データ型の変更

詳細については、「ALTER TABLE」をご参照ください。

サポート

サポート

データインポート

  • Flink を使用した MaxCompute へのデータ書き込み、DataWorks データ統合、DataHub などのツールを使用して、高並行性でスケーラブルな増分データインポートのためのストリーミング書き込みをサポートします。

  • 増分およびフルバッチ書き込みをサポートします。

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

ストリームアップロード後、データはすぐに表示されます。

アップサート

タイムトラベル

時点またはバージョン番号による履歴スナップショットのクエリをサポートし、結果の再現や監査分析を実行できます。

詳細については、「タイムトラベル」をご参照ください。

サポート

サポート

増分計算

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

詳細については、増分計算および 増分クエリをご参照ください。

サポート

(増分マテリアライズドビューは対応中です。)

サポート

データ編成の最適化

小規模ファイルの統合、マルチレベルの コンパクション、データソートなどの最適化を含め、増分データファイルを自動的に維持し、データストレージと計算を安定的かつ効率的な状態に保ちます。

詳細については、Append Delta テーブルのデータ編成の最適化および PK Delta テーブルのデータ編成の最適化をご参照ください。

サポート

バケット数を設定する必要はありません。動的バケット化がデータ分散に自動的に適応します。

サポート

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

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

サポート

サポート

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

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

サポート

サポート

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

テーブルスナップショットバックアップと復元ゾーンディザスタリカバリ

サポート

サポート

コスト

AliORC 列ストア圧縮と階層化ストレージ

サポート

サポート

ユーザーエクスペリエンス

リアルタイムサービスのためのリアルタイムデータ更新

Delta テーブルは、Stream Upload によるリアルタイムのデータ書き込みと更新 (アップサート) をサポートします。データは書き込み後すぐに表示されます。データ書き込みのリアルタイム性とクエリパフォーマンスのバランスを取るため、MaxCompute は階層化ストレージと最適化戦略を使用します:

  • リアルタイム書き込みの保証:新しいデータは、最初にソートされずに非クラスター化バケットに迅速に書き込まれます。このプロセスにより、データ書き込みの低レイテンシーと高スループットが保証されます。

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

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

MaxCompute は、基盤となる増分データの読み書き機能に基づいて、エンドツーエンドのデータ分析の適時性を向上させるための豊富な高レベル機能を提供します。増分計算Delta Live マテリアライズドビュー (Delta Live MV) (招待プレビュー) などの高度な機能を組み合わせて、効率的なリアルタイムデータ処理パイプラインを構築し、データからビジネスインサイトへの変換を加速できます。

ビジネスの成長への適応と従来のテーブルフォーマットの制限克服

  1. 動的バケット割り当て:Append Delta テーブルは動的バケット割り当てをサポートします。データ定義言語 (DDL) ステートメントでバケット数を指定する必要はありません。また、各パーティションの将来のデータ量を推定して適切なバケット数を決定する必要もありません。データを書き込むにつれて、動的バケット化サービスが既存のバケットを分割したり、新しいバケットを作成したりします。この機能は、ビジネスデータ量の変化に動的に適応し、バケットが大きすぎたり小さすぎたりすることによって引き起こされるデータスキューや断片化などの問題を解決します。

  2. スキーマエボリューション:Delta テーブルは、データフィールドの調整やデータ精度の向上といった進化するビジネス要件に対応するため、スキーマエボリューションをサポートします。この機能は、列の追加、削除、変更、名前変更をサポートし、完全な後方互換性を提供し、偶発的なデータの削除や損失を防ぎます。

  3. 従来のテーブルの制限の克服:単一の Delta テーブルは、INSERT INTOUPDATEDELETEMERGE INTO などの操作と、クラスタリングおよびソートされたストレージを 1 つのテーブルでサポートします。従来のパーティションテーブル、クラスタ化テーブル、トランザクションテーブルは、これらの機能をすべて同時にサポートすることはできません。

  4. MaxCompute SQL、MaxFrame、Spark on MaxCompute を含むマルチエンジンコンピューティングをサポートします。Flink、Spark、StarRocks などのオープンソースエンジンも、Spark Connector とオープンストレージ API を使用して Delta テーブルにアクセスできます。

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

  1. Delta テーブルは、テラバイトからペタバイトまでの大規模なデータ量の管理に適しています。非常に大きなデータ量であっても、メタデータ操作は高速です。クエリは、パーティションプルーニング、列プルーニング、述語プッシュダウンなどの機能をサポートし、不要なデータスキャンを回避します。

  2. ACID トランザクション管理:Delta テーブルは、楽観的同時実行制御を使用して、複数のライターからの同時操作をサポートします。書き込み競合は検出されて再試行され、データの一貫性が保証されます。

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

  4. バックアップとロールバック:ごみ箱モードを使用するバージョン管理されたバックアップとロールバックのメカニズムにより、データの破損や偶発的な削除が発生した場合でも、テーブルを以前の正常な状態に迅速にロールバックできます。これにより、運用および保守 (O&M) と管理のリスクが軽減されます。

SQL 操作

DDL

Append Delta テーブルの作成

-- Append Delta テーブルの作成
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 テーブルとして宣言します。

acid.data.retain.hours

いいえ

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

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

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

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

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

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

いいえ

デフォルト値は false です。

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

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

PK Delta テーブルの作成

-- PK Delta テーブルの作成
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 テーブルを作成する際に、このパラメーターを指定する必要があります。プライマリキーには 1 つ以上の列を含めることができ、これらの列の値の組み合わせはテーブル内で一意でなければなりません。構文は標準 SQL のプライマリキー構文に従います。プライマリキーの列は NOT NULL に設定する必要があり、変更することはできません。

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

  • 次の表で、TBLPROPERTIES パラメーターについて説明します。

パラメーター

必須

説明

注意

"table.format.version"="2"

はい

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

  • 以前は、PK Delta テーブルは "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 に設定することを推奨します。これにより、各バケットの平均サイズが約 500 MB になります。非常に大きなテーブルの場合、500 MB の制限を超えることができます。約 2 GB から 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 テーブルで部分的な列更新を実行できます。

このパラメーターはテーブル作成時に設定します。テーブル作成後に 変更することはできません

注意

項目

Append Delta テーブル

PK Delta テーブル

クラスタ化テーブル

バケット数

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 テーブルに直接変換することはできません。

  2. PK Delta テーブルは、プライマリキー (PK) 列のスキーマエボリューションをサポートしていません。

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

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

DML

Delta テーブルは、データの挿入または上書き (INSERT INTO | INSERT OVERWRITE)UPDATE | DELETEMERGE INTO などのデータ操作言語 (DML) 構文をサポートします。

DQL

Delta テーブルは、汎用のクエリ分析をサポートします。詳細については、「DQL 操作 (SELECT)」をご参照ください。

データインポート

  • Append Delta テーブルにはプライマリキーがないため、データインポート中に upsert または delete 操作をサポートしません。バッチデータアップロード (Upload) および ストリームデータアップロード (Stream Upload) を使用したデータインポートをサポートします。

  • PK Delta テーブルは、Tunnel Upsert/Delete API を使用したデータ書き込みをサポートします。プライマリキーが存在しない場合、upsert 操作は新しい行を挿入します。存在する場合、upsert は非プライマリキーフィールドを更新します。

データ編成の最適化

  • Append Delta テーブルは、データ編成に基盤となるレンジクラスタリング構造を使用します。この最適化の詳細については、「Append Delta テーブルのデータ編成の最適化」をご参照ください。デフォルトでは、Row_ID がレンジクラスタリングのキーとして使用され、バケット数はデータ量の増加に応じて動的に割り当てられます。RANGE CLUSTERED BY でキー列を指定すると、バックグラウンドのクラスタリングジョブがデータに対して増分リクラスタリングを実行し、全体の順序を維持します。

  • PK Delta テーブルのデータ編成構造については、「PK Delta テーブルのデータ編成の最適化」をご参照ください。このテーブルは、基盤となるハッシュクラスタリング構造を使用して、プライマリキー (PK) フィールドをハッシュバケット化することにより、効率的なデータの書き込みと更新を可能にします。