標籤:

MaxCompute 存儲優化技巧

本文主要介紹一些ODPS表操作的優化技巧,通過這些技巧,可以有效節省ODPS存儲空間和計算量。

合理設置分區表

ODPS支持分區表的概念,分區表指的是在創建表時指定的partition的分區空間,即指定表內的某幾個欄位作為分區列。在大多數情況下,用戶可以將分區類比為文件系統下的目錄。 ODPS將分區列的每個值作為一個分區(目錄)。用戶可以指定多級分區,即將表的多個欄位作為表的分區,分區之間正如多級目錄的關係。在使用數據時如果指定了需要訪問的分區名稱,則只會讀取相應的分區,避免全表掃描,提高處理效率,降低費用。

比如:create table src (key string, value bigint) partitioned by (pt string);,使用select * from src where pt=20160901;指定正確的分區格式,ODPS在生成查詢計劃時只會將』20151201』分區的數據納入輸入中。如果沒有指定分區,比如select * from src where key = 『MaxCompute』;查詢計劃會掃描全表數據。

常見的分區設置方式有根據日期或者地區(國家),也可以根據業務需要自行設置。

ODPS支持多級分區,比如

create table if not exists sale_detail( shop_name string, customer_id string, total_price double) partitioned by (sale_date string,region string);

創建一個二級分區表,第一級分區sale_date是日期,第二級分區region是地區。

設置合理的表生命周期

ODPS平台中存儲資源是非常寶貴的。可以根據數據本身的使用情況,對錶設置生命周期,ODPS會及時刪除超過生命周期的數據,達到節省存儲空間的目的。比如create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100; 創建一張生命周期為100的表。如果這張表或者分區的最後修改時間超過了100天將會被刪掉。需要注意的是生命周期是以分區為最小單位的,所以一個分區表,如果部分分區達到了生命周期的閥值,那麼這些分區會被直接刪掉,未達到生命周期閥值的分區不受影響。

另外可以通過命令 alter table table_name set lifecycle days;修改已經創建好的表的生命周期。

數據重新分布

ODPS表是數據的集合,也就是說不同的數據分布表對ODPS來說是等價的。但是在實際存儲中,不同數據分布對壓縮演算法的友好度也很大差別。下圖是我們對一張錶針對不同列進行排序的結果,在不同的數據分布的情況下,壓縮效果差距還是相當大的。

一般說來,每個表中都有存在1個或幾個對存儲空間影響比較的欄位,這些欄位就是影響壓縮效果的關鍵。目前看來,平均欄位長度,唯一值個數是兩個極其關鍵的參考值。

本來選自阿里雲大數據產品專家「隱林」,擅長MaxCompute、機器學習、分散式、可視化、人工智慧等大數據領域。

推薦閱讀:

未來營銷的闖關高配:大數據+虛擬現實+人工智慧
大數據時代來了,你準備好了嗎?
讀阿里巴巴中台戰略筆記
用Apache Spark進行大數據處理——第一部分:入門介紹
關於機器學習,你需要知道的三件事!

TAG:大數據 |