三角表和维护策略



我对AWS并不完全陌生。我的建筑需要一个设计建议。

我每个月都要从不同的来源加载50个文件,这些文件非常小,每个文件不到500 MB。

我正在阅读S3,并使用Databricks加载到Delta表,然后通过DBSQL公开它们。

  1. 我真的需要担心delta表中的分区吗,因为它不是一个大文件
  2. 有没有办法按大小对delta表进行分区
  3. 我不确定我是否完全理解真空/优化将如何在未分区的delta表上运行,所以我希望在加载后每月优化真空一次

这听起来正确吗?

请根据您的经验/实施

Sankar

当您的查询将从中受益时,通常会使用分区-例如,您有一个类似于country列的内容,然后您的用户将按特定国家查询数据。否则就不严格要求分区,尤其是对于具有额外优化的Delta,如数据跳过、布隆过滤器、OPTIMIZE ZORDER BY等(例如,请参阅此答案或此和此(。

通常,我建议在加载数据后执行OPTIMIZE ZORDER BY——它会压缩小文件,并将相关数据放在彼此更近的位置。未分区表上的OPTIMIZE通常工作得很好,因为它试图避免接触已经优化的文件。只是不要忘记定期运行VACUUM来清除未引用的文件。

我真的需要担心delta表中的分区吗,因为它不是一个大文件

分区使筛选分区键的查询运行得更快。因此,如果您的数据是按国家/地区划分的,那么具有类似WHERE country='china'的WHERE语句的查询会更快。

分区会加剧小文件问题,所以如果查询运行得足够快,就可以避免它。

有没有办法按大小对delta表进行分区?

您按数据中的列对增量表进行分区,因此它们不会按大小进行分区

不确定我是否完全理解真空/优化将如何在未分区的delta表上运行,因此我希望在加载后每月优化真空一次。

OPTIMIZE将小文件合并为大文件(称为压缩或装箱(。大数据处理系统不喜欢大量的小文件。OPTIMIZE将压缩未分区湖泊中的小文件或分区湖泊中每个分区内的小文件。

只有当您有一堆应该压缩的小文件时,才需要OPTIMIZE。如果你创建了很多小文件,那么OPTIMIZE非常重要,但如果文件不是很小,那么它就不那么重要了。

最新更新