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

MaxCompute:Delta Table

最終更新日:Nov 26, 2025

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

概要

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

特徴

カテゴリ

特徴

Append Delta Table

PK Delta Table

基本 DML

Insert、Update、Delete、Merge Into。

サポート

サポート

ACID トランザクション

Read Committed/Snapshot Isolation。

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

サポート

サポート

プライマリキー

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

非サポート

部分的な列の更新をサポート

スキーマ進化

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

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

サポート

対応

データインポート

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

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

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

データはストリームアップロード後すぐに可視化されます。

Upsert

タイムトラベル

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

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

サポート

サポート

増分コンピューティング

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

詳細については、「増分コンピューティング」および「増分クエリ」をご参照ください。

サポート

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

サポート

データ編成の最適化

小規模ファイルのマージ、マルチレベルの COMPACTION、データソートなどの最適化を含む増分データファイルを自動的にメンテナンスし、データストレージとコンピューティングを安定した効率的な状態に保ちます。

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

サポート

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

サポート

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

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

サポート

サポート

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

ストレージ暗号化 / 動的データマスキング / 行レベルのアクセスコントロールなど。

サポート

サポート

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

テーブルスナップショットの概要 (招待制プレビュー) / ごみ箱モードでのローカルバックアップ / ゾーンディザスタリカバリ

サポート

サポート

コスト

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

サポート

サポート

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

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

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

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

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

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

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

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

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

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

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

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

パフォーマンスと信頼性の両立

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

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

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

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

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 に設定する必要があります。これにより、各バケットの平均サイズが約 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 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 は、データの挿入または上書き (INSERT INTO | INSERT OVERWRITE)データの更新または削除 (UPDATE | DELETE)MERGE INTO などのデータ操作言語 (DML) 構文をサポートします。

DQL

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

データインポート

  • Append Delta Table は、バッチデータアップロード (Upload) および ストリームデータアップロード (Stream Upload) を使用したデータインポートをサポートします。Append Delta Table にはプライマリキーがないため、データ転送では Upsert または Delete 操作はサポートされません。

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

データ編成の最適化

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

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