最佳数据湖文件分区大小



在讨论Delta Lake查询的性能问题时,经常提到小文件问题。许多来源建议文件大小为1GB以获得最佳查询性能。

我知道雪花湖不同于三角洲湖,但我认为有趣的是,雪花湖的战略与传统智慧相矛盾。它们依赖于微分区,其目标是在压缩之前在50MB到500MB之间。

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

  1. 文件修剪-雪花vs三角洲湖

  2. 关于文件内容的元数据-雪花vs三角洲湖

有人能解释为什么Snowflake在较小的文件中蓬勃发展,而传统观点认为三角洲湖很挣扎吗?

免责声明:我对Snowflake不是很熟悉,所以我只能根据文档和;体验三角洲湖。

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

DeltaLake通过跟踪清单文件中的文件名,然后按文件名访问对象,而不是列出所有文件并从中提取文件名,来解决这个问题。在Databricks上,Delta对数据跳过等进行了更多优化,这些优化可以通过使用存储在清单文件中的元数据来实现。正如我从文档中看到的,Snowflake在引擎盖下也有类似的东西。

关于文件大小-在Delta上,默认大小约为1Gb,但在实践中,根据存储的数据类型,它可能会低得多,如果我们需要用新数据更新数据或不需要更新数据-在更新/删除数据时,您需要重写整个文件,如果您有大文件,则需要重写更多。

最新更新