最佳的Data Lake文件分区大小

问题描述

在与Delta Lake查询讨论性能问题时,经常引用“小文件问题”。许多资料来源建议文件大小为1GB,以实现最佳查询性能

我知道雪花与三角洲湖不同,但我认为雪花的策略与传统观点相矛盾,这很有趣。他们依靠微分区,压缩前的目标是50MB至500MB。

雪花和三角洲湖泊具有相似的特征:

  1. 文件修剪-SnowflakeDelta Lake

  2. 有关文件内容的元数据-SnowflakeDelta Lake

有人能解释为什么雪花能在较小的文件上蓬勃发展,而传统观念却认为三角洲湖挣扎了吗?

解决方法

免责声明:我对Snowflake不太熟悉,所以只能根据Delta Lake的文档和经验说。

当您存储流数据或类似数据时,通常会出现小文件问题,并以Parquet之类的格式存储该数据,这些格式仅依赖于存储提供程序提供的文件列表。由于文件很多,文件列表非常昂贵,并且通常是花费大量时间的地方。

Delta Lake通过跟踪清单文件中的文件名,然后通过文件名到达对象,而不是列出所有文件并从中提取文件名来解决此问题。在Databricks上,Delta可以对数据跳过等进行更多优化,这可以通过使用清单文件中存储的元数据来实现。正如我从文档中看到的那样,Snowflake具有类似的内幕。

关于文件大小-在Delta上,默认大小为〜1Gb,但实际上,它可能低得多,具体取决于存储的数据类型,以及是否需要使用新数据更新数据-更新时/删除数据,则需要重写整个文件,如果文件很大,则需要重写更多文件。