针对数仓的性能优化,主要是针对表和数据分布的优化。
表设计的最佳实践请参见表设计最佳实践。
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表的高级功能。
文档内容是否对您有帮助?