Delta Lake 與 Apache Iceberg 資料表利用資料表屬性來設定行為與功能,包括資料佈局、檔案大小、資料跳過、隔離層級及變更資料饋送。
備註
設定或更新數據表屬性的所有作業與其他並行寫入作業衝突,導致它們失敗。 只有在數據表上沒有並行寫入作業時,Databricks 才建議您修改數據表屬性。
修改資料表屬性
若要修改現有資料表的資料表屬性,請使用 SET TBLPROPERTIES。
Delta 與 Iceberg 屬性前綴
Delta Lake 與 Apache Iceberg 資料表共享相同的資料表屬性名稱,但需要不同的前綴:
-
三角洲湖表格:請使用前
delta.綴 -
冰山表:使用
iceberg.前綴
例如,要啟用表格上的刪除向量:
三角洲湖
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
Iceberg
ALTER TABLE <table-name> SET TBLPROPERTIES ('iceberg.enableDeletionVectors' = true);
資料表屬性與 SparkSession 屬性
每個資料表都有自己的資料表屬性來控制其行為。 有些 SparkSession 配置總是會覆蓋表格屬性。 例如, autoCompact.enabled 並在 optimizeWrite.enabled 層級啟用自動壓縮與最佳化寫入 SparkSession 。 Databricks 建議對於大部分工作負載使用表格範圍配置。
你可以用 SparkSession 設定設定新資料表的預設值。 這些預設只適用於新資料表,不影響現有資料表屬性。
SparkSession 配置使用與表格屬性不同的前綴,如下表所示:
| 表格屬性 |
SparkSession 設定 |
|---|---|
delta.<conf>iceberg.<conf> |
spark.databricks.delta.properties.defaults.<conf>spark.databricks.iceberg.properties.defaults.<conf> |
例如,要設定所有在會話中新建立的資料表的 appendOnly = true 屬性,請設定以下內容:
三角洲湖
SET spark.databricks.delta.properties.defaults.appendOnly = true
Iceberg
SET spark.databricks.iceberg.properties.defaults.appendOnly = true
表格屬性
以下大多數表格屬性可同時提供三角洲湖與阿帕奇冰山表,除非另有說明。 Delta Lake 表格delta.用iceberg.前綴,Iceberg 表格用前綴。
| 房產 | Description |
|---|---|
appendOnly |
true 讓表格僅附錄。 僅附錄表格不允許刪除現有紀錄或更新現有值。資料類型: Boolean預設: false |
autoOptimize.autoCompact |
自動將小檔案合併在表格分割區內,以減少小檔案問題。 接受 auto (建議)、 true、 legacy、或 false。參見 自動壓實。 資料類型: String預設值:(無) |
autoOptimize.optimizeWrite |
true 在寫入時自動優化此表格的檔案配置。參見 優化寫入。 資料類型: Boolean預設值:(無) |
checkpoint.writeStatsAsJson |
true 以 JSON 格式將檔案統計資料寫入檢查點,針對 stats 欄位。資料類型: Boolean預設: false |
checkpoint.writeStatsAsStruct |
true將檔案統計資料以結構格式寫入檢查點,並將分割區值作為結構寫入stats_parsed。資料類型: Boolean預設: true |
checkpointPolicy |
classic 經典檢查點。
v2 用於 v2 檢查點。有關具備液體聚類的表格,請參見 Checkpoint V2 與相容性。 資料類型: String預設: classic |
columnMapping.mode |
啟用欄位映射,適用於使用不同名稱的表格欄位及對應的 Parquet 欄位。 有效值為 none、name和 id。請參閱 使用 Delta Lake 欄位映射重新命名和刪除欄位。 注意:啟用 columnMapping.mode 會自動啟用 randomizeFilePrefixes。資料類型: DeltaColumnMappingMode預設: none |
compatibility.symlinkFormatManifest.enabled (僅限三角洲湖) |
true 配置 Delta Lake 資料表,使所有寫入操作自動更新清單。資料類型: Boolean預設: false |
dataSkippingNumIndexedCols |
為了收集資料跳躍統計所需的欄位數量。
-1 值意味著收集所有欄位的統計數據。詳見資料跳過。 資料類型: Int預設: 32 |
dataSkippingStatsColumns |
一份逗號分隔的欄位名稱清單,用於收集統計資料以提升資料跳過功能。 此屬性的優先順序高於 dataSkippingNumIndexedCols。詳見資料跳過。 資料類型: String預設值:(無) |
deletedFileRetentionDuration |
這是保留邏輯刪除資料檔案的最短時間,然後再實體刪除。 這可防止在合併壓縮或分割區覆寫後,過時的讀取器發生故障。 Databricks 建議預設值為 7 天或以上。 如果保留期太短,長期執行的作業可能會在作業完成前就被刪除其未提交的檔案。 請參閱設定時光旅行查詢中的資料保留政策。 資料類型: CalendarInterval預設: interval 1 week |
enableChangeDataFeed |
true 啟用變更資料流。請參見 使用變更資料串流。 資料類型: Boolean預設: false |
enableDeletionVectors |
true 以啟用刪除向量和預測性 I/O 來進行更新。請參閱 Databricks 中的刪除向量 並 啟用刪除向量。 資料類型: Boolean預設值:取決於工作區管理員設定和 Databricks Runtime 版本。 請參閱自動啟用刪除向量。 |
enableIcebergCompatV2 (僅限三角洲湖) |
true 啟用 IcebergCompatV2,該軟體以與 Iceberg 讀取器相容的格式寫入資料。 要啟用 Iceberg 讀取,請將此性質與 一起設定。universalFormat.enabledFormats請參閱 使用 Iceberg 用戶端讀取 Delta Lake 資料表。 資料類型: Boolean預設值:(無) |
enableRowTracking (僅限三角洲湖) |
true 啟用列追蹤,為每一列分配穩定的列 ID 與列提交版本以實現列層級的血緣。 支援 Databricks 執行環境 14.0 及以上版本。 Apache Iceberg v3 表格自動包含列追蹤功能。請參見 Azure Databricks 中的列追蹤。 資料類型: Boolean預設: false |
enableTypeWidening |
true 表示啟用類型擴大。請參閱類型擴展。 資料類型: Boolean預設: false |
format-version (僅支援Apache Iceberg管理的資料表) |
冰山表格式版本。 Databricks 建議不要手動設定此屬性。 請參閱 使用 Apache Iceberg v3 功能。 資料類型: Int預設: 2 |
isolationLevel |
交易需要與其他同時進行的交易所產生的修改保持隔離的程度。 有效值為 Serializable 和 WriteSerializable。參見隔離層級(WriteSerializable 與 Serializable)。 資料類型: String預設: WriteSerializable |
logRetentionDuration |
要保存一個資料表的歷史紀錄多久?
VACUUM 操作會覆寫此保留閾值。Databricks 每次寫入檢查點時,會自動清理比保留間隔更早的日誌條目。 將此屬性設為較大值可保留許多日誌條目。 這不會影響效能,因為對日誌的操作是常數時間。 操作歷史紀錄是平行進行的,但隨著記錄文件大小增加,成本會增加。 請參閱設定時光旅行查詢中的資料保留政策。 資料類型: CalendarInterval預設: interval 30 days |
minReaderVersion (僅限三角洲湖) |
讀取此表所需的最低協定讀取版本。 Databricks 建議不要手動設定此屬性。 請參閱 Delta Lake 功能相容性和通訊協定。 資料類型: Int預設: 1 |
minWriterVersion (僅限三角洲湖) |
寫入此表格所需的最低協定作者版本。 Databricks 建議不要手動設定此屬性。 請參閱 Delta Lake 功能相容性和通訊協定。 資料類型: Int預設: 2 |
parquet.compression.codec |
表格的壓縮編解碼器。 有效值: ZSTD、、SNAPPYGZIP、 LZ4BROTLI 、(支援依格式而異)此特性確保所有未來對資料表的寫入皆使用所選編解碼器,覆蓋叢集或會話預設( spark.sql.parquet.compression.codec)。 然而,一次性的 DataFrame .write.option("compression", "...") 設定仍會優先。 可在 Databricks 執行環境 16.0 及更新版本中取得。 請注意,現有檔案不會自動重寫。 若要以您所選格式重新壓縮現有資料,請使用 OPTIMIZE table_name FULL。資料類型: String預設: ZSTD |
parquet.format.version (僅限三角洲湖) |
用於撰寫資料檔案的 Parquet 格式版本。 設定此功能以 2.12.0 啟用進階編碼、v2 資料頁標頭及 INT64 時間戳,進而提升查詢效能並減少儲存空間。有效的值為 1.0.0 和 2.12.0,對應 Apache Parquet 格式的釋出。此屬性可設定在三角洲湖與阿帕奇冰山表上。 部分 OSS Iceberg 讀取器可能不支援 Parquet v2 編碼。 請參閱限制。 參見 Parquet v2。 資料類型: String預設: 1.0.0 |
randomizeFilePrefixes |
true 產生一個隨機的檔案路徑前綴,取代分割區資訊。資料類型: Boolean預設: false |
randomPrefixLength |
當 randomizeFilePrefixes 時,隨機前綴要產生的字元數為 true。資料類型: Int預設: 2 |
setTransactionRetentionDuration |
新快照保留交易識別碼(例如 SetTransactions)的最短持續時間。 新的快照會過期,且忽略超過或等於此屬性所指定期間的交易識別碼。
SetTransaction識別碼用於使寫入操作具有冪等性。 詳情請參見冪等元表格寫入的用途foreachBatch。資料類型: CalendarInterval預設值:(無) |
targetFileSize |
檔案微調的目標大小,以位元組或更高單位表示。 例如, 104857600 (位元元組)或 100mb。請參見 控制資料檔案大小。 資料類型: String預設值:(無) |
universalFormat.enabledFormats (僅限三角洲湖) |
一個逗號分隔的格式清單,供外部用戶端讀取 Delta Lake 表格(UniForm)。 設定為 iceberg 產生 Iceberg 元資料。 設定 iceberg 需要 enableIcebergCompatV2 = true。請參閱 使用 Iceberg 用戶端讀取 Delta Lake 資料表。 資料類型: String預設值:(無) |