全部產品
Search
文件中心

MaxCompute:Delta Table

更新時間:Nov 26, 2025

Delta Table是由MaxCompute自主研發的,為大規模分析型資料集打造的高效能表格式(Table Format),包含無主鍵表Append Delta Table和主鍵表PK Delta Table。本文概述Delta Table的準系統及操作。

功能概要

Delta Table是阿里雲MaxCompute自主研發的一種高效能表格式,支援ACID事務、增量查詢、回溯查詢(Time Travel)、動態Cluster分桶、資料即時更新、模式演化(Schema Evolution)等功能。利用MaxCompute平台內原生提供的湖倉一體和近Realtime Compute能力,使用者通過標準SQL即可建立、更新和查詢Delta Table,而無需關心複雜的底層儲存與中繼資料管理,後者均由 MaxCompute自動維護和最佳化,兼顧易用性與高性價比。

功能規格

類別

功能項

Append Delta Table

PK Delta Table

基礎DML

Insert / Update / Delete / Merge Into。

支援

支援

ACID 事務

Read Committed/Snapshot Isolation。

詳情請參見ACID交易管理

支援

支援

主鍵

定義主鍵(Primary Key)。

不支援

支援部分列更新

模式演化(Schema Evolution)

列增加、刪除、重新命名、順序修改、列類型修改。

詳情請參見ALTER TABLE

支援

支援

資料匯入

  • 支援流式寫入,支援通過使用Flink寫入資料到MaxCompute、DataWorksData Integration、DataHub等工具,完成高並發、可擴充的增量資料匯入。

  • 支援增全量批式寫入。

Stream/Batch Upload

Stream Upload方式寫入即可見

Upsert

回溯查詢(Time Travel)

支援按時間點或版本號碼直接查詢歷史快照,用於結果複現或審計分析。

詳情請參見Time Travel

支援

支援

增量計算

增量物化視圖(Delta Live MV),增量讀取(Incremental Read)。

詳情請參見增量計算增量查詢

支援

(增量物化視圖適配中)

支援

資料群組織最佳化

自動維護增量資料檔案,包括小檔案合并、多級COMPACTION、資料排序等最佳化,保持穩定高效的資料存放區和計算狀態。

詳情請參見:Append Delta Table資料群組織最佳化PK Delta Table資料群組織最佳化

支援

免配置bucket數,通過動態 Bucket 最佳化(Dynamic Bucketing)自適應資料分布。

支援

查詢效能最佳化

分區和檔案級統計資訊(Min/Max等)、分區裁剪、列裁剪、謂詞下推。

支援

支援

安全合規

儲存加密/資料動態脫敏/行級存取控制等。

支援

支援

容災與備份

錶快照介紹(邀測)/資源回收筒模式本地備份/同城容災

支援

支援

成本

AliORC列存壓縮/階層式存放區。

支援

支援

使用者體驗

面向即時化業務,即時資料更新

支援通過Stream Upload方式實現資料的即時寫入與更新(Upsert),寫入後立即可見。為了最大限度地平衡資料寫入的即時性與查詢效能,MaxCompute採用階層式存放區與最佳化策略:

  • 保障寫入即時性:新寫入的資料首先以未排序的方式快速落盤至增量未聚簇桶(Nonclustered Bucket),確保資料寫入的低延遲和高吞吐。

  • 提高SQL查詢效能:背景增量重聚簇(Incremental Reclustering)服務會非同步地將增量資料重排最佳化為有序的聚簇桶(Clustered Bucket)。查詢時,查詢引擎能高效裁剪已排序的主體資料,僅對少量增量資料進行掃描,從而兼顧了資料新鮮度與查詢效率。

高效增量資料處理與分析

基於底層的增量資料讀寫能力,MaxCompute進一步提供了豐富的上層功能,以提升端到端資料分析的實效性。可以結合增量計算動態物化視圖(Delta Live MV)(邀測)等進階特性,構建高效的即時資料處理鏈路,加速從資料產生到業務洞察的轉化過程。

適應業務發展,突破原有表格式使用限制

  1. 動態分配Bucket:Append Delta Table表格式支援動態分配Bucket。使用者無需在DDL時指定Bucket數,無需預估每個Partion未來的資料量再去換算出合適Bucket數。隨著使用者資料的持續寫入,系統通過Bucket動態分配(Dynamic Bucketing)服務自動劃分Bucket或建立新Bucket,動態適應業務資料量變化,解決單Bucket內資料量過大或者過小導致的資料扭曲和資料片段等問題。

  2. 模式演化(Schema Evolution):滿足業務發展對資料欄位調整和資料精度提升的需求,支援添加、刪除、修改、重新命名列,且具備完全向後相容性,不會誤刪或遺失資料。

  3. 突破原有表限制:NSERT INTOUPDATEDELETEMERGE INTO、Clustering排序儲存可以在Delta Table一張表內實現,突破原有普通分區表、聚簇表的、Transaction Table上述能力不可兼得的使用限制。

  4. 適配多引擎計算:包括MaxCompute SQL、MaxFrame、Spark on MaxCompute等;開源引擎如Flink、Spark、StarRocks等也可通過Connector和開放儲存API訪問Delta Table。

兼顧效能與可靠性

  1. Delta Table適合TB到PB層級的海量資料管理,即使在極巨量資料規模下,中繼資料操作依然快速響應,查詢支援分區裁剪、列裁剪、謂詞下推,可避免不必要的資料掃描。

  2. ACID交易管理:採用開放式並行存取控制,支援多寫入方並行作業,衝突寫會被檢測並重試,確保資料一致性。

  3. 安全合規:滿足資料安全與合規要求,支援儲存加密、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]

表示TimeTravel可查詢資料歷史狀態的時間範圍(單位為小時)。

  • 取值為0時表示不保留資料歷史狀態,也就是不支援timetravel查詢。

  • 如果資料歷史狀態存在時間超過了此參數設定的值,可被刪除或者Compact。

  • 如果SQL timetravel查詢的時間早於該參數的值,會直接報錯,比如屬性值為72小時,timetravel要查詢72小時之前的資料歷史狀態,會直接報錯。

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

預設false

True表示增量查詢指定的endTimestamp,可以大於表最大的資料Commit Time。在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):必填。建立Delta Table主鍵表時必填,可包含多列。可以定義一個或多個列作為主鍵,表示這些列的組合在表中必須唯一,文法遵循標準SQL primary key文法,pk列必須設定NOT NULL,不允許修改。

    設定後,表資料會根據PK列去重,Unique約束在單個partition範圍內有效,或非分區表內有效。

  • 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]

表示每個partition或者非分區表的分桶數量,也表示資料寫入的並發節點數量。分區表支援修改,新分區預設生效;非分區表不支援修改。該參數用法可參考如下建議:

  • 如果是通過Tunnel匯入,代表Tunnel並發節點數,設定結果會影響匯入流量,也會受Tunnel最大並發節點數約束。

  • 如果是通過SQL寫入,代表寫入資料的Reducer的並發度,受Reducer最大並發節點數約束。

  • 建議每個Bucket的資料寫入大小為500 MB左右。例如,分區大小估計為500 GB,粗略估算Bucket數目應該設為1000,這樣平均每個Bucket大小約為500 MB。對於特別大的表,500 MB的限制可以突破,每個Bucket在2 GB到3 GB左右比較合適。

acid.data.retain.hours

預設取值為24,取值範圍為[24, 168]

表示TimeTravel可查詢資料歷史狀態的時間範圍(單位為小時)。

  • 取值為0時表示不保留資料歷史狀態,也就是不支援timetravel查詢。

  • 如果資料歷史狀態存在時間超過了此參數設定的值,可被刪除或者Compact。

  • 如果SQL timetravel查詢的時間早於該參數的值,會直接報錯,比如屬性值為72小時,timetravel要查詢72小時之前的資料歷史狀態,會直接報錯。

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

預設false

True表示增量查詢指定的endTimestamp,可以大於表最大的資料Commit Time。在endTimestamp大於目前時間的情境下,使用者多次查詢可能得到不同的結果,因為可能存在新的資料插入。

支援修改表的此參數取值。

acid.write.precombine.field

可以指定一個列的名稱,且只能指定一個。

如果指定了列名,在同一提交的檔案處理中,系統會結合主鍵(PK)列對資料去重,確保資料的唯一性和一致性。

說明

當一次性提交的資料量超過128MB時,會導致產生多個檔案,該參數對多個檔案不適用。

acid.partial.fields.update.enable

設定為true時,支援使用SQL或Tunnel對Delta Table進行部分列更新

該參數在建立表時進行設定。表建立成功後不支援修改

注意事項

對比項

Append Delta Table

PK Delta Table

聚簇表

Bucket數量

無需指定write.bucket.num,Bucket數量根據實際資料量動態變化。

需在DDL時指定Bucket數,預設取值為16。

/

資料群組織策略

RANGE CLUSTERED BY,不支援CLUSTERED BY,無需指定SORT BY 欄位,Bucket內資料排序預設使用RANGE CLUSTERD BY指定的欄位。

不支援設定CLUSTER BY,預設使用Primary Key做Hash Cluster。

CLUSTERED BY

生命週期LIFECYCLE

必須大於等於Time Travel可查詢的生命週期,即lifecycle >= acid.data.retain.hours / 24。建立表時會做檢查,不符合會報錯。

/

/

  1. 存量普通表不支援直接修改為Delta Table。

  2. PK Delta Table不支援對主鍵列(PK)做表結構變更。

  3. PK Delta Table暫不支援JSON類型。

  4. 不支援CREATE TABLE AS。

DML

支援插入或覆寫資料(INSERT INTO | INSERT OVERWRITE)更新或刪除資料(UPDATE | DELETE)MERGE INTO等文法。

DQL

支援通用的查詢分析方案。詳情可參考DQL操作(SELECT)

資料匯入

資料群組織最佳化

  • Append Delta Table資料群組織結構,請參考Append Delta Table資料群組織最佳化,底層採用Range Clustering結構,預設使用Row_ID作為clustering key,bucket數量隨著使用者資料增長動態分配,使用者指定Cluster Key之後,通過後台clustering作業對資料執行增量reclustering,保證資料的整體有序性。

  • PK Delta Table資料群組織結構,請參考PK Delta Table資料群組織最佳化,底層採用Hash Clustering結構,通過將PK欄位Hash分桶的方式,實現資料的高效寫入與更新。