天天看點

MaxComwwwzs12558comI3578II9877-pute 基本概念與術語

項目空間

• 項目空間(Project)是MaxCompute的基本組織單元,類似于傳統資料庫的DataBase或Schema的概念,是進行多使用者隔離和通路控制的主要邊界。項目空間中包含多個對象,例如表(Table)、資源(Resource)、函數(Function)和執行個體(Instance)等。

• 一個使用者可以同時擁有多個項目空間的權限。通過安全授權,可以跨項目空間通路對象。

• 通過在MaxCompute用戶端中運作use

project指令進入一個項目空間。

• 表是MaxCompute的資料存儲單元,邏輯上是二維結構,MaxCompute中不同類型計算任務的操作對象(輸入、輸出)都是表。

• MaxCompute的表分為内部表和外部表(2.0版本開始支援)。

• 對于内部表,所有的資料都被存儲在MaxCompute中。

• 對于外部表,MaxCompute并不真正持有資料,表格的資料可以存放在OSS或OTS中,MaxCompute僅會記錄表格的Meta資訊,OSS上的資訊可以是非結構化的,例如視訊、音頻等。

• MaxCompute與Oracle等資料庫不同,系統并不會自動建立dual表。

分區

• 分區表是指在建立表時指定分區空間,即指定表内的一個或某幾個字段作為分區列。分區表實際就是對應分布式檔案系統上的獨立檔案夾,該檔案夾下是該分區的所有資料檔案。

• 分區表的意義在于優化查詢。查詢表時通過where子句查詢指定分區,避免全表掃描。

• MaxCompute将分區列的每個值作為一個分區,同時也可以指定多級分區,即将表的多個字段作為表的分區,如多級目錄的關系。

• MaxCompute

2.0支援字段類型為TINYINT、SMALLINT、INT、BIGINT、VARCHAR、STRING的分區,雖然可以指定分區類型為BIGINT,但是除了表的字段表示為BIGINT,任何其他情況實際都被處理為STRING。建議使用STRING。

分區使用限制

• 單表分區層級最多為6級。

• 單表分區數最多允許60000個分區。

• 單詞查詢允許查詢的最多分區個數為10000個。

• STRING分區類型的分區值不支援使用中文。

錯誤的分區使用方式:

select * from src where pt=20170601;

在這樣的使用方式下,MaxCompute并不能保障分區過濾機制的有效性。pt是STRING類型,當STRING類型與BIGINT(20170601)比較時,MaxCompute會将二者轉換為DOUBLE類型,此時有可能會有精度損失。

生命周期

MaxCompute表的生命周期(Lifecycle),指表(分區)資料從最後一次更新的時間算起,在經過指定的時間後沒有變動,則此表(分區)将被MaxCompute自動回收,這個指定的時間就是生命周期。

• 生命周期機關:Days(天),隻接受正整數。

• 對于非分區表,如果表資料在生命周期内沒有被修改,生命周期結束時,此表将會被MaxCompute自動回收(類似drop table),生命周期從最後一次表資料被修改的時間(LastDataModifiedTime)起進行計算。

• 對于分區表,每個分區可以分别被回收,在生命周期内資料未被修改的分區,經過指定的天數後,此分區将會被回收,否則會被保留。同理,生命周期是從最後一次分區資料被修改的時間起進行計算。不同于非分區表的是,分區表的最後一個分區被回收後,該表不會被删除。

• 生命周期回收為每天定時啟動,掃描所有分區,隻有被掃描時發現分區/表超過生命周期的指定時間,分區/表才會被回收。

• 生命周期隻能設定到表級别,不能設定到分區級,建立表時即可指定生命周期。

資源

資源(Resource)是MaxCompute的特有概念,如果需要使用UDF、MapReduce,讀取第三方庫等,都需要依賴資源來完成,如下所示:

• SQL UDF:編寫UDF時,需要将編譯好的jar包或編寫好的Python UDF腳本檔案以資源的形式上傳到MaxCompute,運作UDF時,MaxCompute會自動下載下傳jar包或python腳本來運作UDF。

• MapReduce:編寫MapReduce程式後,将編譯好的jar包上傳到MaxCompute,運作MapReduce作業時,MapReduce架構會自動下載下傳這個資源進而擷取代碼。

• MaxCompute支援上傳的單個資源大小上限為500MB,資源包括File類型、Table類型、Jar類型和Archive類型。

函數

MaxCompute提供了内建函數與自定義函數,自定義函數分為标量值函數(UDF)、自定義聚合函數(UDAF)和自定義表值函數(UDTF)。

• UDF

廣義的UDF代表自定義标量函數、自定義聚合函數及自定義表函數三種類型的自定義函數的集合。狹義的UDF指使用者自定義标量值函數,即讀入一行資料,寫出一條輸出。

• UDAF

自定義聚合函數,即多條輸入記錄聚合成一條輸出值,可以與SQL中的GROUP BY語句聯用。

• UDTF

自定義表值函數,輸入多個字段,傳回多個字段,逐行記錄進行處理。簡單的說,UDF是特殊的UDTF。

任務

任務(Task)是MaxCompute的基本計算單元,對于計算型任務,例如SQL、MapReduce,MaxCompute會對其進行解析,得出任務的執行計劃,執行計劃由具有依賴關系的多個執行階段(Stage)構成。

• 執行計劃邏輯上可以被看做一個有向無環圖,圖中的點是執行階段,各個執行階段的依賴關系是圖的邊。MaxCompute會依照圖(執行計劃)中的依賴關系執行各個階段。在同一個執行階段内,會有多個程序,也稱之為Worker,共同完成該執行階段的計算工作。同一個執行階段的不同Worker隻是處理的資料不同,執行邏輯完全相同。計算型任務在執行時,會被執行個體化。

• 另一方面,部分MaxCompute任務并不是計算型的任務,例如SQL中的DDL語句,這些任務本質上僅需要讀取、修改MaxCompute中的中繼資料資訊,是以這些任務無法被解析出執行計劃。

任務執行個體

在MaxCompute中,部分任務在執行時會被執行個體化,任務執行個體會經曆運作(Running)和結束(Terminated)兩個階段。運作階段的狀态為Running,而結束階段會有Success、Failed、Canceled三種狀态。

ACID語義

相關術語

• 操作:指在MaxCompute上送出的單個作業。

• 資料對象:指持有實際資料的對象,例如非分區表、分區。

• INTO類作業:INSERT INTO、DYNAMIC INSERT INTO等。

• OVERWRITE類作業:INSERT OVERWRITE、DYNAMIC INSERT OVERWRITE等。

• Tunnel資料上傳:可以歸結為INTO類或OVERWRITE類作業。

ACID語義描述

• 原子性(Atomicity):一個操作或是全部完成,或是全部不完成,不會結束在中間某個環節。

• 一緻性(Consistency):從操作開始至結束的期間,資料對象的完整性沒有被破壞。

• 隔離性(Isolation):操作獨立于其它并發操作完成。

• 持久性(Durabillity):操作處理結束後,對資料的修改将永久有效,即使出現系統故障,該修改也不會丢失。

MaxCompute的ACID具體情形

• 原子性(Atomicity)

• 任何時候MaxCompute會保證在沖突時隻會有一個作業成功,其它沖突作業失敗。

• 對于單個表/分區的CREATE/OVERWRITE/DROP操作,可以保證其原子性。

• 跨表操作時不支援原子性(例如MULTI-INSERT)。

• 在極端情況下,以下操作可能不保證原子性:

• DYNAMIC INSERT OVERWRITE多于一萬個分區,不支援原子性。

• INTO類操作:事務復原時會有資料清理失敗。

• 一緻性(Consistency)

• OVERWRITE類作業可保證一緻性。

• INTO類作業在沖突失敗後可能存在失敗作業的資料殘留。

• 隔離性(Isolation)

• 非INTO類操作保證讀已送出。

• INTO類操作存在讀未送出的場景。

• 持久性(Durability)

• MaxCompute保證資料的持久性。