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