分區表是指在建立表時指定分區空間,即指定表內的某幾個欄位作為分區列。大多數情況下,您可以將分區類比為檔案系統下的目錄。

MaxCompute將分區列的每個值作為一個分區(目錄),您可以指定多級分區,即將表的多個欄位作為表的分區,分區之間如多級目錄的關係。

使用資料時,如果指定需要訪問的分區名稱,則只會讀取相應的分區,可避免全表掃描,提高處理效率,降低費用。



分區類型

MaxCompute2.0對分區類型的支援進行了擴充,目前MaxCompute支援Tinyint、Smallint、Int、Bigint、Varchar和String分區類型。
说明 在舊版MaxCompute中,僅承諾String類型分區。因為曆史原因,雖然可以指定分區類型為Bigint,但是除了表的schema表示其為Bigint外,任何其他情況實際都被處理為String。樣本如下:
create table parttest (a bigint) partitioned by (pt bigint);
insert into parttest partition(pt) select 1, 2 from dual;
insert into parttest partition(pt) select 1, 10 from dual;
select * from parttest where pt >= 2;

執行上述語句後,返回的結果只有一行,因為10被當作字串和2比較,所以沒能返回。

分區使用限制

分區有以下使用限制。
  • 單表分區層級最多6級。
  • 單表分區數最多允許60000個分區。
  • 一次查詢最多查詢分區數為10000個分區。
樣本如下:
--建立一個二級分區表,以日期為一級分區,地區為二級分區
create table src (key string, value bigint) partitioned by (pt string,region string);
查詢時,Where條件過濾中使用分區列作為過濾條件。
select * from src where pt='20170601' and region='hangzhou'; --正確使用方式。MaxCompute在產生查詢計劃時只會將'20170601'分區下region為'hangzhou'二級分區的資料納入輸入中。
select * from src where pt = 20170601; -- 錯誤的使用方式。在這樣的使用方式下,MaxCompute並不能保障分區過濾機制的有效性。pt是String類型,當String類型與Bigint(20170601)比較時,MaxCompute會將二者轉換為Double類型,此時有可能會有精度損失。

部分對分區操作的SQL的運行效率則較低,會給您帶來較高的計費,例如輸出到動態分區(DYNAMIC PARTITION)

對於部分MaxCompute的操作命令,處理分區表和非分區表時的文法有差別,詳情請參見表操作INSERT 操作