配置Delta Lake以控製數據文件大小
Delta Lake提供了手動或自動配置寫入和for的目標文件大小的選項優化
操作。
限製寫入數據文件的行數
您可以使用SQL會話配置spark.sql.files.maxRecordsPerFile
為Delta Lake表指定要寫入單個文件的最大記錄數。指定值為零或負值表示沒有限製。
在Databricks Runtime 10.5及以上版本中,您還可以使用DataFrameWriter選項maxRecordsPerFile
當使用DataFrame api寫入Delta Lake表時。當maxRecordsPerFile
SQL會話配置的值spark.sql.files.maxRecordsPerFile
將被忽略。
(df.寫.模式(“添加”).選項(“maxRecordsPerFile”,“10000”).保存(“/ tmp /δ/ people10m”))
df.寫.模式(“添加”).選項(“maxRecordsPerFile”,“10000”).保存(“/ tmp /δ/ people10m”)
設置目標文件大小
請注意
在Databricks Runtime 8.2及以上版本中可用。
如果要調優Delta表中文件的大小,請設置表屬性delta.targetFileSize
到所需的尺寸。如果設置了此屬性,則所有數據布局優化操作都將盡力生成指定大小的文件。這裏的例子包括優化或z值,汽車壓實,優化寫道.
表屬性 |
---|
delta.targetFileSize 類型:以字節或更高單位為單位的大小。 目標文件大小。例如, 默認值:無 |
對於現有表,可以使用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 |