问题描述
在与Delta Lake查询讨论性能问题时,经常引用“小文件问题”。许多资料来源建议文件大小为1GB,以实现最佳查询性能。
我知道雪花与三角洲湖不同,但我认为雪花的策略与传统观点相矛盾,这很有趣。他们依靠微分区,压缩前的目标是50MB至500MB。
雪花和三角洲湖泊具有相似的特征:
-
有关文件内容的元数据-Snowflake与Delta Lake
有人能解释为什么雪花能在较小的文件上蓬勃发展,而传统观念却认为三角洲湖挣扎了吗?
解决方法
免责声明:我对Snowflake不太熟悉,所以只能根据Delta Lake的文档和经验说。
当您存储流数据或类似数据时,通常会出现小文件问题,并以Parquet之类的格式存储该数据,这些格式仅依赖于存储提供程序提供的文件列表。由于文件很多,文件列表非常昂贵,并且通常是花费大量时间的地方。
Delta Lake通过跟踪清单文件中的文件名,然后通过文件名到达对象,而不是列出所有文件并从中提取文件名来解决此问题。在Databricks上,Delta可以对数据跳过等进行更多优化,这可以通过使用清单文件中存储的元数据来实现。正如我从文档中看到的那样,Snowflake具有类似的内幕。
关于文件大小-在Delta上,默认大小为〜1Gb,但实际上,它可能低得多,具体取决于存储的数据类型,以及是否需要使用新数据更新数据-更新时/删除数据,则需要重写整个文件,如果文件很大,则需要重写更多文件。