在讨论delta-lake查询的性能问题时,经常提到小文件问题。许多来源建议文件大小为1gb,以获得最佳查询性能。
我知道雪花和三角洲湖不一样,但我觉得雪花的策略和传统的观点相矛盾,这很有趣。它们依赖于微型分区,目标是在压缩前达到50mb到500mb之间。
雪花和三角洲湖有相似的特征:
文件修剪-雪花vs三角洲湖
关于文件内容的元数据-雪花vs三角洲湖
有人能解释为什么雪花在较小的文件上蓬勃发展,而传统的观点认为三角洲湖在挣扎?
在讨论delta-lake查询的性能问题时,经常提到小文件问题。许多来源建议文件大小为1gb,以获得最佳查询性能。
我知道雪花和三角洲湖不一样,但我觉得雪花的策略和传统的观点相矛盾,这很有趣。它们依赖于微型分区,目标是在压缩前达到50mb到500mb之间。
雪花和三角洲湖有相似的特征:
文件修剪-雪花vs三角洲湖
关于文件内容的元数据-雪花vs三角洲湖
有人能解释为什么雪花在较小的文件上蓬勃发展,而传统的观点认为三角洲湖在挣扎?
1条答案
按热度按时间holgip5t1#
免责声明:我不是很熟悉雪花,所以我只能说基于文件和三角洲湖的经验。
小文件问题通常出现在您存储流式数据或类似数据时,并且以类似parquet的格式存储这些数据,这些格式仅依赖于存储提供商提供的文件列表。对于很多小文件,文件列表非常昂贵,而且往往是花费大部分时间的地方。
delta-lake通过跟踪清单文件中的文件名来解决这个问题,然后通过文件名访问对象,而不是列出所有文件并从中提取文件名。在databricks上,delta对数据跳过等进行了更多优化,这可以通过使用清单文件中存储的元数据来实现。正如我从文档中看到的,雪花在引擎盖下有类似的东西。
关于文件大小-在delta上,默认大小是~1gb,但实际上可能要低得多,这取决于存储的数据类型,如果我们需要用新数据更新数据或不更新数据-更新/删除数据时,需要重写整个文件,如果有大文件,则需要重写更多的文件。