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 トランザクション |
リードコミッティド/スナップショット分離。 |
サポート |
サポート |
|
プライマリキー |
プライマリキーを定義します。 |
未サポート |
部分列更新をサポート |
|
スキーマ進化 |
列の追加、削除、名前変更、順序変更、データの型変更が可能。 |
サポート |
サポート |
|
データインポート |
|
ストリーム/バッチアップロード ストリームアップロード後、データは即座に参照可能になります。 |
アップサート |
|
タイムトラベル |
結果の再生または監査分析のために、時刻またはバージョン番号で過去のスナップショットをクエリします。 |
サポート |
サポート |
|
増分コンピューティング |
Delta Live マテリアライズドビュー (MV) および増分読み取り。 増分コンピューティング および 増分クエリ。 |
サポート (増分マテリアライズドビューのサポートは開発中です。) |
サポート |
|
データ組織の最適化 |
小ファイルのマージ、マルチレベルの COMPACTION、データソートを通じて、増分データファイルを自動的に維持します。 |
サポート バケット構成は不要です。動的バケット化がデータ分布に自動的に適応します。 |
サポート |
|
クエリパフォーマンスの最適化 |
パーティションレベルおよびファイルレベルの統計情報(Min/Max など)、パーティションプルーニング、列のプルーニング、述語プッシュダウン。 |
サポート |
サポート |
|
セキュリティとコンプライアンス |
サポート |
サポート |
|
|
ディザスタリカバリとバックアップ |
サポート |
サポート |
|
|
コスト |
AliORC 列指向ストア圧縮および階層型ストレージ。 |
サポート |
サポート |
ユーザー体験
リアルタイムサービス向けのリアルタイムデータ更新
Delta Table は Stream Upload を通じてリアルタイム書き込みおよびアップサートをサポートします。データは即座に参照可能になります。MaxCompute は階層型ストレージ戦略により、書き込み遅延とクエリパフォーマンスのバランスを取ります。
-
リアルタイム書き込みを保証:新しいデータはソートされていない非クラスタバケットに書き込まれるため、低遅延かつ高スループットを実現します。
-
SQL クエリパフォーマンスを向上:バックグラウンドの増分再クラスタリングサービスが、増分データを非同期でソート済みのクラスタバケットに再編成します。クエリエンジンはソートされたベースデータに対してプルーニングを行い、少量の増分データのみをスキャンすることで、データの新鮮さと効率性のバランスを取ります。
効率的な増分データ処理と分析
MaxCompute は高度な増分処理機能を提供します。増分コンピューティング および Delta Live マテリアライズドビュー(プレビュー) を組み合わせることで、リアルタイムデータ処理パイプラインを構築できます。
ビジネスの成長に対応し、従来のテーブルフォーマットの制限を克服
-
動的バケット割り当て:Append Delta Table は DDL での指定なしに動的にバケットを割り当てます。データ量が増加すると、動的バケット化サービスが自動的にバケットを分割または作成し、変化に適応してスキューおよび断片化を防止します。
-
スキーマ進化:Delta Table は列の追加、削除、変更、名前変更を完全な下位互換性とともにサポートし、誤ったデータ損失を防ぎます。
-
統合テーブル機能:単一の Delta Table でINSERT INTO、UPDATE、DELETE、およびMERGE INTO をサポートし、ソート済みクラスタリングストレージを備えています。これにより、従来はパーティションテーブル、クラスタテーブル、トランザクションテーブルを別々に用意する必要があった機能を統合できます。
-
マルチエンジンサポート:MaxCompute SQL、MaxFrame、Spark on MaxCompute、およびオープンソースエンジン(Flink、Spark、StarRocks)から、Spark Connector およびオープンストレージ API を介して Delta Table にアクセスできます。
パフォーマンスと信頼性のバランス
-
Delta Table はテラバイト~ペタバイト規模のデータ量を高速なメタデータ操作で処理します。クエリではパーティションプルーニング、列のプルーニング、述語プッシュダウンを使用して、スキャンするデータ量を最小限に抑えます。
-
ACID トランザクション:Delta Table は楽観的同時実行制御を使用して複数の書き込みを並列処理します。書き込み競合は自動的に検出され、再試行されます。
-
セキュリティとコンプライアンス:Delta Table はストレージ暗号化、テーブルレベルおよび列レベルの ACL、行レベルの権限、動的データマスキングをサポートします。
-
バックアップとロールバック:バージョン管理されたゴミ箱メカニズムにより、データ破損や誤って削除された場合でも、テーブルを以前の健全な状態にロールバックできます。
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 です。有効値の範囲は |
タイムトラベルを使用して既存データの状態をクエリできる時間範囲(時間単位)を指定します。
|
|
acid.incremental.query.out.of.time.range.enabled |
いいえ |
デフォルト値は |
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 として宣言します。 |
|
|
write.bucket.num |
いいえ |
デフォルト値は 16 です。有効値の範囲は |
パーティションごとまたは非パーティション化テーブル全体のバケット数を指定します。これは書き込み同時実行数も設定します。パーティションテーブルでは変更可能(新規パーティションに適用)、非パーティション化テーブルでは変更不可です。ガイドライン:
|
|
acid.data.retain.hours |
いいえ |
デフォルト値は 24 です。有効値の範囲は |
タイムトラベルを使用して既存データの状態をクエリできる時間範囲(時間単位)を指定します。
|
|
acid.incremental.query.out.of.time.range.enabled |
いいえ |
デフォルト値は |
true に設定すると、増分クエリで指定する endTimestamp をテーブルの最新コミット時刻より後に設定できます。endTimestamp が現在時刻より後の場合、新しいデータが挿入される可能性があるため、複数回のクエリで異なる結果が返されることがあります。 このパラメーターの値はテーブルごとに変更できます。 |
|
acid.write.precombine.field |
いいえ |
1 つのカラム名を指定できます。 |
カラム名を指定すると、同じコミット内でプライマリキー (PK) カラムおよび指定されたカラムに基づいてファイル処理中にデータの重複排除が行われます。これにより、データの一意性と整合性が保証されます。 説明
単一コミットのデータ量が 128 MB を超える場合、複数のファイルが生成されます。このパラメーターは複数ファイルには適用されません。 |
|
acid.partial.fields.update.enable |
いいえ |
|
このパラメーターはテーブル作成時に設定してください。テーブル作成後は変更できません。 |
注記
|
項目 |
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 |
|
ライフサイクル |
|
/ |
/ |
-
既存の標準テーブルを直接 Delta Table に変換することはできません。
-
PK Delta Table はプライマリキー (PK) カラムに対するスキーマ進化をサポートしていません。
-
PK Delta Table は現在、JSON データの型をサポートしていません。
-
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 のデータ組織最適化。