針對數倉的性能優化,主要是針對表和數據分布的優化。
表設計的最佳實踐請參見表設計最佳實踐。
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表的高級功能。