配置三角洲湖控製數據文件大小

三角洲湖提供選擇手動或自動配置的目標文件大小和寫道優化操作。磚自動調這些設置,並支持特性,通過尋求調整文件自動提高表性能。

為統一目錄管理表,磚曲調的大多數這些配置自動如果你使用一個SQL端點或磚運行時11.3 LTS或以上。

請注意

除非另有規定,本文中所有的建議不適用於統一目錄管理表運行最新的運行時。

當運行優化

汽車壓實和優化寫每個減少小文件的問題,但不完全替代優化。特別是對於表超過1 TB,磚建議運行優化安排進一步鞏固文件。磚不自動運行ZORDER在桌子上,所以你必須運行優化ZORDER啟用增強數據跳過。看到數據不與z順序索引三角洲湖

汽車優化數據磚是什麼?

這個詞自動優化有時是用來描述功能控製的設置delta.autoCompactdelta.optimizeWrite。這學期已經退休的描述每個單獨設置。看到汽車壓實對磚三角洲湖優化為三角洲湖磚

汽車壓實對磚三角洲湖

汽車壓實結合δ內小文件表分區自動減少小文件的問題。汽車壓實後發生寫入表已成功同步並運行在集群上執行寫入。汽車隻壓縮壓縮文件,沒有壓實。

你可以通過設置來控製輸出文件的大小火花配置spark.databricks.delta.autoCompact.maxFileSize。磚建議使用自動調諧根據工作負載或表的大小。看到基於工作負載的自動調諧文件大小基於表的大小自動調諧文件大小

汽車壓實隻是觸發分區或表至少有一定數量的小文件。你可以選擇改變觸發汽車所需的最小數量的文件壓縮設置spark.databricks.delta.autoCompact.minNumFiles

汽車壓實可以啟用表或會話級別使用以下設置:

  • 表屬性:delta.autoCompact

  • SparkSession設置:spark.databricks.delta.autoCompact.enabled

這些設置接受以下選項:

選項

行為

汽車(推薦)

曲調目標文件的大小,同時尊重其他自動調諧功能。需要磚運行時的10.1或以上。

遺產

別名真正的。需要磚運行時的10.1或以上。

真正的

使用128 MB作為目標文件大小。沒有動態分級。

關閉自動壓實。在會話級別可以設置覆蓋汽車壓實所有三角洲表修改的工作量。

重要的

在磚10.3運行時,下麵的,當其他作家執行操作刪除,合並,更新,或優化同時,汽車壓實可以導致其他工作失敗,事務衝突。這不是一個問題在磚運行時10.4及以上。

優化為三角洲湖磚

優化寫改善文件大小數據寫入和後續讀取表中受益。

分區表的優化中是最有效的,因為他們減少小文件寫入每個分區。寫更少的大文件比寫作更有效的許多小文件,但你仍然會看到增加寫延遲,因為數據是之前寫的。

下圖演示了如何優化工作寫道:

優化寫道

注意:你可能會運行的代碼合並(n)重新分區(n)之前你寫出數據到控製文件的數量。優化寫道消除了需要使用此模式。

優化寫在磚是默認啟用以下業務運行時9.1 LTS及以上:

  • 合並

  • 更新與子查詢

  • 刪除與子查詢

優化也支持所有寫道插入操作時,使用SQL端點。

優化寫在表或會話級別可以啟用使用以下設置:

  • 表設置:delta.optimizeWrites

  • SparkSession設置:spark.databricks.delta.optimizeWrites.enabled

這些設置接受以下選項:

選項

行為

真正的

使用128 MB作為目標文件大小。

關閉優化寫道。在會話級別可以設置覆蓋汽車壓實所有三角洲表修改的工作量。

設定了一個目標文件大小

請注意

在磚運行時8.2及以上。

如果你想在三角洲調整大小的文件表,設置表屬性delta.targetFileSize到所需的尺寸。如果設置了這個屬性,所有數據布局優化操作將最優試圖生成指定大小的文件。例子包括優化z值,汽車壓實,優化寫道

請注意

當使用統一目錄管理表和SQL倉庫或磚運行時11.3 LTS以上,優化命令尊重targetFileSize設置。

表屬性

delta.targetFileSize

類型:大小的字節或更高的單位。

目標文件大小。例如,104857600(字節)或100 mb

默認值:無

對於現有的表,您可以使用SQL命令設置和設置屬性ALTER TABLE設置資源的屬性。你也可以設置這些屬性時自動創建新表使用火花會話配置。看到三角洲表屬性引用獲取詳細信息。

基於工作負載的自動調諧文件大小

請注意

在磚運行時8.2及以上。

磚建議設置表屬性delta.tuneFileSizesForRewrites真正的對所有表的目標很多合並或DML操作,無論磚運行時,統一目錄,或其他優化。當設置為真正的,目標文件大小為表設置為更低的閾值,而加速寫密集型操作。

如果沒有顯式地設置,磚自動檢測如果9 10前三角洲表上的操作合並操作和設置這個表屬性真正的。您必須顯式地設置該屬性為了避免這種行為。

表屬性

delta.tuneFileSizesForRewrites

類型:布爾

是否為數據布局優化調整文件大小。

默認值:無

對於現有的表,您可以使用SQL命令設置和設置屬性ALTER TABLE設置資源的屬性。你也可以設置這些屬性時自動創建新表使用火花會話配置。看到三角洲表屬性引用獲取詳細信息。

基於表的大小自動調諧文件大小

請注意

在磚運行時8.4及以上。

最小化需要手動調整,磚自動曲調δ的文件大小表基於表的大小。磚將使用較小的文件大小對於小表,較大的文件大小為大表,表中文件數量不能過大。磚不自動調諧表有調整特定的目標大小或根據工作負載頻繁的重寫。

目標文件大小是基於當前三角洲表的大小。表小於2.56結核病、自動調諧的目標表的文件大小是256 MB。2.56結核病和10 TB之間的大小,目標規模將從256 MB到1 GB呈線性增長。表大於10 TB,目標文件的大小是1 GB。

請注意

當一個表的目標文件大小增加,現有的文件不是優化成更大的文件優化命令。一個大表可以因此總是有一些文件小於目標大小。如果是需要優化這些較小的文件到較大的文件,您可以配置一個固定的目標文件大小的表使用delta.targetFileSize表屬性。

當一個表寫增量,目標文件大小和文件數量將接近下麵的數字,基於表的大小。這個表的文件數量隻是一個例子。實際結果會有所不同取決於很多因素。

表的大小

目標文件大小

近似的文件數量表

10 GB

256 MB

40

1 TB

256 MB

4096年

2.56結核病

256 MB

10240年

3結核病

307 MB

12108年

5結核病

512 MB

17339年

7結核病

716 MB

20784年

10 TB

1 GB

24437年

20結核病

1 GB

34437年

50個結核病

1 GB

64437年

100年結核病

1 GB

114437年

限製行寫入數據文件

全心全意、表與狹窄的數據可能會遇到一個錯誤,在一個給定的數據文件的行數超過限製的支持拚花的格式。為了避免這種錯誤,您可以使用SQL會話配置spark.sql.files.maxRecordsPerFile指定的最大記錄數為三角洲湖表寫入一個文件。指定一個值為零或負值代表沒有限製。

在磚運行時的10.5及以上,您還可以使用DataFrameWriter選項maxRecordsPerFile當使用DataFrame api編寫到三角洲湖表。當maxRecordsPerFile指定的值SQL會話配置spark.sql.files.maxRecordsPerFile將被忽略。

請注意

磚不建議使用此選項,除非它是必要的,以避免上述錯誤。此設置可能仍然需要一些非常狹窄的數據統一目錄管理表。