全部產品
Search
文件中心

MaxCompute:分區

更新時間:Jun 19, 2024

分區表是指擁有分區空間的表,即將表資料按照某個列或多個列進行劃分,從而將表中的資料分散儲存在不同的物理位置上。合理設計和使用分區,可以提高查詢效能、簡化資料管理,並支援更靈活的資料訪問和操作。

概述

分區可以理解為分類,通過分類把不同類型的資料放到不同的目錄下。分類的標準就是分區欄位,可以是一個,也可以是多個。

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

分區表的意義在於最佳化查詢。查詢表時通過WHERE子句查詢指定所需查詢的分區,避免全表掃描,提高處理效率,降低計算費用。使用資料時,如果指定需要訪問的分區名稱,則只會讀取相應的分區。分區表

部分對分區操作的SQL的運行效率較低,會給您帶來較高的費用,例如插入或覆寫動態分區資料(DYNAMIC PARTITION)

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

使用限制

  • 單表分區層級最多為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; 

相關文檔

分區相關操作(如添加分區、修改分區值等)命令請參見分區和列操作