分區表是指擁有分區空間的表,即將表資料按照某個列或多個列進行劃分,從而將表中的資料分散儲存在不同的物理位置上。合理設計和使用分區,可以提高查詢效能、簡化資料管理,並支援更靈活的資料訪問和操作。
概述
分區可以理解為分類,通過分類把不同類型的資料放到不同的目錄下。分類的標準就是分區欄位,可以是一個,也可以是多個。
MaxCompute將分區列的每個值作為一個分區(目錄),您可以指定多級分區,即將表的多個欄位作為表的分區,分區之間類似多級目錄的關係。
分區表的意義在於最佳化查詢。查詢表時通過WHERE子句查詢指定所需查詢的分區,避免全表掃描,提高處理效率,降低計算費用。使用資料時,如果指定需要訪問的分區名稱,則只會讀取相應的分區。
部分對分區操作的SQL的運行效率較低,會給您帶來較高的費用,例如插入或覆寫動態分區資料(DYNAMIC PARTITION)。
使用限制
單表分區層級最多為6級。
單表分區數最大值為60000個。
單次查詢允許查詢最多的分區個數為10000個。
STRING分區類型的分區值不支援使用中文。
使用說明
分區資料不宜過小,如果建立很多過小分區,會導致計算查詢效能下降。建議單分區資料不要小於一萬行。
分區列的資料類型
MaxCompute 2.0資料類型版本支援的分區欄位為TINYINT、SMALLINT、INT、BIGINT、VARCHAR、STRING。
在Meta中表的分區值通常以STRING類型進行儲存。對於非字串類型的分區欄位,其值會在內部被自動轉換為字串類型。為避免因資料類型轉換導致的異常,建議在設計分區欄位時使用STRING類型。
MaxCompute 1.0資料類型版本支援的分區欄位僅有STRING。雖然可以指定分區列的類型為BIGINT,但是除了表的欄位顯示為BIGINT類型,任何其他情況(例如,欄位的計算和比較)下都當作STRING類型處理。執行如下語句後,返回結果為空白。
---建立表parttest。
create table parttest (a bigint) partitioned by (pt bigint);
---向表中插入資料。
insert into parttest partition(pt)(a,pt) values (1, 1);
insert into parttest partition(pt)(a,pt) values (1, 10);
---查詢表中欄位pt大於等於2的行。
select * from parttest where pt >= '2';
樣本
建立分區。
--建立一個二級分區表,以日期為一級分區,地區為二級分區 CREATE TABLE src (shop_name string, customer_id bigint) PARTITIONED BY (pt string,region string);
使用分區列作為過濾條件查詢資料。
--正確使用方式。MaxCompute在產生查詢計劃時只會將'20170601'分區下region為'hangzhou'二級分區的資料納入輸入中。 select * from src where pt='20170601'and region='hangzhou'; --錯誤的使用方式。在這樣的使用方式下,MaxCompute並不能保障分區過濾機制的有效性。pt是STRING類型,當STRING類型與BIGINT(20170601)比較時,MaxCompute會將二者轉換為DOUBLE類型,此時有可能會有精度損失。 select * from src where pt = 20170601;
相關文檔
分區相關操作(如添加分區、修改分區值等)命令請參見分區和列操作。