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保證數據的持久性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章