配置Delta Lake以控製數據文件大小

Delta Lake提供了手動或自動配置寫入和for的目標文件大小的選項優化操作。

限製寫入數據文件的行數

您可以使用SQL會話配置spark.sql.files.maxRecordsPerFile為Delta Lake表指定要寫入單個文件的最大記錄數。指定值為零或負值表示沒有限製。

在Databricks Runtime 10.5及以上版本中,您還可以使用DataFrameWriter選項maxRecordsPerFile當使用DataFrame api寫入Delta Lake表時。當maxRecordsPerFileSQL會話配置的值spark.sql.files.maxRecordsPerFile將被忽略。

df模式“添加”選項“maxRecordsPerFile”“10000”保存“/ tmp /δ/ people10m”
df模式“添加”選項“maxRecordsPerFile”“10000”保存“/ tmp /δ/ people10m”

設置目標文件大小

請注意

在Databricks Runtime 8.2及以上版本中可用。

如果要調優Delta表中文件的大小,請設置表屬性delta.targetFileSize到所需的尺寸。如果設置了此屬性,則所有數據布局優化操作都將盡力生成指定大小的文件。這裏的例子包括優化z值汽車壓實,優化寫道

表屬性

delta.targetFileSize

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

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

默認值:無

對於現有表,可以使用SQL命令設置和取消設置屬性更改表設置TBL屬性.您還可以在使用Spark會話配置創建新表時自動設置這些屬性。看到增量表屬性引用獲取詳細信息。

根據工作負載自動調優文件大小

請注意

在Databricks Runtime 8.2及以上版本中可用。

為了最大限度地減少手動調優的需要,Databricks可以根據在表上操作的工作負載自動調優Delta表的文件大小。數據庫可以自動檢測一個Delta表是否頻繁合並重寫文件的操作,可能會選擇減少已重寫文件的大小,以預期將來會進一步重寫文件。例如,當執行合並如果表上的前10個操作中有9個也是merge,那麼優化寫道而且汽車壓實所使用的合並(如果啟用)將生成更小的文件大小。這有助於減少將來的持續時間合並操作。

自動調優在發生一些重寫操作後被激活。但是,如果您預計一個Delta表將會頻繁地經曆合並更新,或刪除操作,並且希望立即進行調優,則可以通過設置table屬性顯式地調優重寫的文件大小delta.tuneFileSizesForRewrites.將此屬性設置為真正的對於表上的所有數據布局優化操作,始終使用較小的文件大小。設置為永遠不要調優到更小的文件大小,也就是說,防止自動檢測被激活。

表屬性

delta.tuneFileSizesForRewrites

類型:布爾

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

默認值:無

對於現有表,可以使用SQL命令設置和取消設置屬性更改表設置TBL屬性.您還可以在使用Spark會話配置創建新表時自動設置這些屬性。看到增量表屬性引用獲取詳細信息。

根據表大小自動調優文件大小

請注意

在Databricks Runtime 8.4及以上版本中可用。

為了盡量減少手動調優的需要,Databricks會根據表的大小自動調優Delta表的文件大小。Databricks將對較小的表使用較小的文件大小,對較大的表使用較大的文件大小,這樣表中的文件數量就不會增長得太大。類調優的表,Databricks不會自動調優具體目標尺寸或者基於頻繁重寫的工作負載。

目標文件大小基於Delta表的當前大小。對於小於2.56 TB的表,自動調優的目標文件大小為256mb。對於2.56 TB到10tb之間的表,目標文件大小將從256mb線性增長到1gb。對於大於10tb的表,目標文件大小為1gb。

請注意

方法將現有文件重新優化為更大的文件時,表的目標文件大小將增加優化命令。因此,大表中總有一些小於目標大小的文件。如果需要將這些較小的文件優化為較大的文件,則可以使用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