文档

数仓性能优化

更新时间:

针对数仓的性能优化,主要是针对表和数据分布的优化。

表设计的最佳实践请参见表设计最佳实践

Hash Clustering

Hash Clustering表的优势在于可以实现Bucket Pruning优化、Aggregation优化以及存储优化。在创建表时,使用clustered by指定Hash Key后,MaxCompute将对指定列进行Hash运算,按照Hash值分散到各个Bucket里。Hash Key值的选择原则为选择重复键值少的列。Hash Clustering表的使用方法详情请参见表操作

如何转化为Hash Clustering表:

ALTER TABLE table_name [CLUSTERED BY (col_name [, col_name, ...]) [SORTED BY (col_name [ASC | DESC] [, col_name [ASC | DESC] ...])] INTO number_of_buckets BUCKETS]

ALTER TABLE语句适用于存量表,在增加了新的聚集属性之后,新的分区将做Hash Clustering存储。

创建完Hash Clustering表后,您可以使用INSERT OVERWRITE语句将源表转化为Hash Clustering表。

说明

Hash Clustering表存在以下限制:

  • 不支持INSERT INTO语句,只能通过INSERT OVERWRITE来添加数据。

  • 不支持直接使用tunnel upload命令将数据导入到range cluster表,因为tunnel上传的数据是无序的。

表的其他优化技巧

建议您严格遵循表设计规范。此外,您还可以利用下列技巧完成表的优化:

  • 中间表的利用:适用于数据量非常大,下游任务很多的表。

  • 拆表:适用于个别字段产出极慢的情况,您可以将字段拆分为单独的表。

  • 合表:随着数仓的发展,针对业务重叠或重复的表,您可以进行任务和数据合并。

  • 拉链表:合理利用拉链表能减少您的存储消耗,关于拉链存储的详情请参见拉链存储

  • 利用MaxCompute表的特殊功能:详情请参见MaxCompute表的高级功能