针对数仓的性能优化,主要是针对表和数据分布的优化。表设计的最佳实践请参见表设计最佳实践

Hash Clustering

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