配置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