MaxCompute2.0新功能介紹

摘要: 在過去的兩年內,MaxCompute進行了翻天覆地的重構,從1.0版本全面升級到了2.0版本。而大家或許對於MaxCompute 2.0的一些新特性並不瞭解,在本文中,MaxCompute技術專家秋鵬就爲大家詳細介紹MaxCompute 2.0的新特性。

摘要:在過去的兩年內,MaxCompute進行了翻天覆地的重構,從1.0版本全面升級到了2.0版本。而大家或許對於MaxCompute 2.0的一些新特性並不瞭解,在本文中,MaxCompute技術專家秋鵬就爲大家詳細介紹MaxCompute 2.0的新特性。

本文主要圍繞以下三個方面進行分享:
MaxCompute 2.0簡介
MaxCompute 2.0 vs 1.0
MaxCompute 2.0 vs 競品

一、MaxCompute 2.0簡介

MaxCompute之所以要進行重構是因爲MaxCompute 1.0上存在很多問題,在MaxCompute 2.0的概念提出前,MaxCompute就已經在線上服務內部和外部用戶一段時間了,並且也獲得了一些積極的反饋。但是MaxCompute 1.0中也存在一些問題需要解決,這些問題大概分爲兩個部分。首先,一些競爭對手比如Hive、Spark等用了很多MaxCompute還沒有用上的新功能,他們能夠達到比MaxCompute更加高效的性能,這就迫使MaxCompute嘗試增加新的功能,並且優化自身引擎,解決已知的問題。在引入新功能的過程中,發現需要對於MaxCompute引擎進行重構,使得引擎能夠支持新功能。此外,MaxCompute 1.0在用戶開發體驗上有待提升,相比於Hive以及MySQL存在一定差距,從原有系統向MaxCompute遷移存在一定的不兼容問題,這也制約了MaxCompute對於外部用戶的吸引力。此外,在MaxCompute 1.0的開發過程中缺乏完善並且好用的集成開發環境,使得用戶開發較爲困難。

MaxCompute2.0新功能介紹

因此,基於1.0版本所存在的問題,MaxCompute就進行了一系列的改進,並提出了MaxCompute 2.0的概念。MaxCompute 2.0首先提出了三個重要的設計目標:強大的編譯器,包容的生態以及高效的引擎。首先,編譯器需要支持腳本式語言,能夠讓用戶輕鬆編寫複雜邏輯,還需要能夠支持強大的IDE功能,比如實現錯誤實時提示以及代碼填充等,從而提高用戶開發體驗。對於生態而言,需要使得MaxCompute的SQL支持標準SQL,還需要兼容開源生態,使得用戶可以方便地將原有應用遷移到MaxCompute上。最後一點,還需要利用最新的分佈式計算框架來優化執行引擎,從而使得執行的效率更高。

MaxCompute2.0新功能介紹

二、MaxCompute 2.0 vs 1.0

前面所講的更多的是站在系統層面進行分享,接下來將圍繞大家日常開發使用MaxCompute來進行分享,本部分主要將對比MaxCompute 2.0版本和1.0版本的區別所在。

編譯器
MaxCompute 2.0在編譯器上進行了完全重構,也進行了大量的優化,如圖所示列舉了部分關鍵點,比如所有編譯錯誤都會行列號信息,這樣的中括號格式能夠方便IDE來實現各種各樣的自動化處理;第二個就是全新的error key,相比於之前的error code具有更高的可讀性;此外更重要的一點就是MaxCompute 2.0的編譯結果更可能是包含warning的,warning是編譯器在用戶的SQL裏面發現的有可能存在潛在問題的情況,而這些問題卻並不會影響用戶的SQL進一步編譯和執行,但是編譯器認爲有必要將這些潛在問題提出來讓用戶改正。此外,MaxCompute 2.0編譯器非常重要的一點新功能就是其支持錯誤恢復,這裏的錯誤恢復指的是當碰到用戶錯誤的時候會嘗試去猜測用戶SQL的實際意圖,嘗試去將錯誤恢復出來繼續進行編譯,這樣的好處就是在同一次編譯中的多次錯誤會一次性地報出來,方便用戶修改。這一功能對於IDE而言是非常重要的,因爲當用戶使用IDE來做語法檢查的時候會發現IDE能夠將整個腳本中的所有錯誤同時標識出來。

MaxCompute2.0新功能介紹

數據類型
MaxCompute 2.0新增了很多數據類型,如下圖所示。可以看出,MaxCompute 1.0只支持了幾個有限的數據類型,這些數據類型其實在大多數場景下其實是夠用的,但是將應用從已有的開源系統上移植過來的時候就會顯得不足。而MaxCompute 2.0中更多的數據類型能夠支持更豐富的表達能力。此外,MaxCompute 2.0還增加了很多常量的定義,比如TINYINT、SMALLINT、DATETIME以及TIMESTAMP等。當然了,這裏也有兩點需要注意,一點就是使用新類型需要使用新類型需要set odps.sql.type.system.odps2=true; 或者開Hive兼容。此外,還需要注意MaxCompute實際還支持CHAR類型和INTERVAL 類型,目前僅當打開Hive兼容模式下可用。

MaxCompute2.0新功能介紹

複雜類型
此外,MaxCompute 2.0還對於複雜類型進行了補充,支持了ARRAY、MAP以及STRUCT三種類型,並且這些複雜類型可以任意嵌套。MaxCompute 2.0對於複雜類型的定義、構造以及操作都進行了擴充,因此用戶可以很輕鬆地使用這些複雜類型來實現複雜的邏輯。

MaxCompute2.0新功能介紹

語法結構
MaxCompute 2.0相比於1.0增加了如下圖所示的很多語法結構。首先是Values表達式,其並不是MaxCompute原創的,在其他的SQL語言中也有,但是在MaxCompute 1.0中並沒有支持,這就導致在MaxCompute 1.0裏面構造一個簡單的數據是非常困難的。在MaxCompute 2.0中,因爲支持了Values表達式,因此用戶可以直接在SQL裏面通過Values表達式來構造一個簡單的維表。此外,目前還可以在Select語句中省略from表達式,相當於Select一個一行的values。

MaxCompute2.0新功能介紹

第二個新增的語法叫做“Common Table Expression(CTE)”,簡單而言CTE可以讓用戶通過使用WITH語句將子查詢提前,而踢到前面的SubQuery可以被反覆使用,即所謂的Common Table,而且Common Table之間可以相互引用。此外一個新增的語法及時“SEMI/ANTI JOIN”,這兩個語法其實算是SQL標準的功能,SEMI JOIN的語義是當JOIN條件滿足的時候返回滿足條件的行,而ANTI JOIN與之前恰好相反,就是當JOIN條件滿足的時候就過濾掉滿足條件的行,保留不滿足條件的行返回。

MaxCompute 2.0還支持了更加豐富的子查詢表達式,在MaxCompute 1.0中只支持了IN的SubQuery表達式,而在MaxCompute 2.0則引入了兩種新表達式,一種是EXISTS表達式,其含義是當後面的表達式有結果返回時爲TRUE,否則爲FALSE;另一種叫做SCALA SubQuery,也就是當後面的子查詢能夠確定是一行一列的時候,子查詢可以當做標量使用,進而可以參與其他表達式的計算。此外,在MaxCompute 2.0子查詢中支持了correlated,這使得子查詢的結果不再是固定的值,而是會根據外部表的行進行改變。MaxCompute 2.0提供的另外一個重要功能就是“SELECT TRANSFORM”,該語法完全與Hive兼容,其允許用戶使用第三方腳本來處理數據。另外一個引入的新功能是“User Defined Type”,這是MaxCompute獨有的功能,這個功能非常好用,其允許用戶直接在SQL中嵌入第三方語言,目前只支持了Java。使用new就可以創建對象,可以直接調用對象公共方法和訪問公共屬性,而且整個JDK都可以直接使用,還可以通過設置odps.sql.session.resources引用第三方包。

MaxCompute2.0新功能介紹

MaxCompute 2.0還支持外表和非結構化存儲,簡單而言在MaxCompute 1.0裏面,用戶只能引用內部定義的表,比如創建表之後將數據上傳上去才能夠使用。而目前的過程完全可以利用外表來實現,用戶可以定義和創建一個外表,可以直接從外部數據源讀取數據,這樣就省略了數據遷移的過程。而外部數據和內部數據的存儲肯定不一致,因此MaxCompute 2.0還引入了對於非結構化數據進行處理的機制,比如通過定義StorageHandler來處理非結構化存儲的序列化、反序列化以及讀寫過程。值得注意的是MaxCompute 2.0的外表在語法等方面完全兼容Hive,因此Hive用戶可以非常輕鬆地向MaxCompute 2.0進行遷移。MaxCompute 2.0還提供了“CLUSTERED BY”功能,我們可以在創建表的過程中指定表按照某一列進行CLUSTERED BY,這將會爲表建立一個聚集索引,能夠使用戶在查詢中利用索引進行優化,減少讀入的數據量。還有一個新功能就是“User Defined Join”,藉助此功能用戶可以自定義表的連接過程,原本的內置JOIN過程都可能會產生笛卡爾積結果,可能做了過多的爆炸式展開,而通過User Defined Join將會大大減少中間結果的產生。

MaxCompute2.0新功能介紹

腳本模式
MaxCompute 2.0提供了腳本模式功能,在腳本模式下,用戶所提交的腳本不再是以單條SQL爲單位的,而是以整個腳本爲單位提交查詢,因此更適合複雜的查詢。此外,腳本模式可以使用DDL語句,並且可以有多個不同的輸出,可以有多次insert into以及多個insert override等,所以腳本模式能夠最大限度地幫助用戶編寫複雜的邏輯。雖然腳本模式中,腳本是按照一整個腳本提交的,但是並不會逐條執行,而是將整個腳本作爲一個完整作業執行,其優點就是對於一些重複操作可以合併到一起。

MaxCompute2.0新功能介紹

參數化視圖
在MaxCompute 1.0版本的視圖定義中,並不允許傳遞參數,但是在2.0版本中則引入了參數化視圖功能,該功能允許用戶在定義VIVIEW時候定義參數,根據參數的不同使得VIEW的邏輯會出現一系列變化,這樣就能夠大大提升VIEW代碼的重用能力。如果能夠設計得很好,那麼用戶的絕大部分邏輯都能通過VIEW基於過程的過程方式實現。

MaxCompute2.0新功能介紹

MaxCompute Studio
MaxCompute 2.0提供了對於IDE的強大支持,其在開始研發的過程中就伴隨這MaxCompute Studio的設計和實現了。而MaxCompute Studio也提供了一些非常重要的功能,比如作業監控、作業分析、實時錯誤提示以及智能提示等。通過MaxCompute Studio,用戶可以非常直觀地監控作業的執行流程,幫助用戶直觀地掌控執行流程中的各個節點信息;此外,MaxCompute Studio還提供了一系列分析工具,幫助用戶分析參與作業的各個節點的執行信息等;此外,還提供了很多對於SQL開發的支持功能,比如用戶在MaxCompute Studio中做編輯的時候,就會把用戶的腳本做本地編譯,並發現其中存在的問題,然後以圖形化方式報告給用戶;另外一個就是實現了上下文提示,提示功能非常智能化,而這在開發腳本的過程中也是非常有幫助的。

MaxCompute2.0新功能介紹

即將上線的功能
除了上述功能之外,MaxCompute 2.0版本中還有如下圖所示的很多即將上線的功能,比如GROUPING SETS和CUBE/ROLLUP、INTERSECT/EXCEPT、內存計算、Java Runtime與Local run、更完善的腳本語言支持以及Table API支持等。

MaxCompute2.0新功能介紹

三、MaxCompute 2.0 vs 競品

Hive兼容模式
最後與大家簡單介紹一下MaxCompute 2.0與其他競品的區別。之所以介紹這一點,是因爲一些用戶期望從其他的產品上向MaxCompute 2.0進行遷移,希望能夠對於MaxCompute所支持的功能以及難度有一個直觀的瞭解。其實,MaxCompute 2.0對於Hive具有非常強的兼容能力,當用戶通過設置“SET odps.sql.hive.compatible=true;”就可以打開Hive兼容模式。在兼容模式下,不僅能夠兼容Hive的語法結構,還能夠對於數據類型、語義以及UDF和StorageHandler進行兼容。當打開MaxCompute 2.0的兼容模式,那麼在Hive上運行的應用就能夠非常方便地遷移到MaxCompute 2.0平臺上來。當然了,MaxCompute 2.0與Hive還存在一些在設計上的不兼容的地方,比如某些操作和MaxCompute概念不符合,比如database、schema等,因此沒有支持;在權限管理上,某些方式和MaxCompute不符,如column的權限管理,沒有支持。MaxCompute的resource是全局的,因此某些操作,如CREATEFUNCTION需要指定resource。而這些不兼容的地方,對於用戶也沒有太大影響,因此對於用戶而言,從Hive向MaxCompute進行遷移是非常方便的。而在MaxCompute在未來也將會支持任何符合SQL標準的語法。

MaxCompute2.0新功能介紹

MaxCompute 2.0核心優勢
MaxCompute 2.0除了在兼容方面做得比較好之外,還存在着很多的核心優勢。首先,最大的優勢就是MaxCompute是企業級服務,能夠提供7*24小時不間斷服務的系統級平臺,會有專業人員對於問題進行支持。MaxCompute 2.0具有包容的生態圈,大家可以從各個平臺上遷移過來,從而實現完整統一的計算系統。此外,MaxCompute 2.0所提供的更豐富的擴展能力能夠讓用戶更方便地擴展SQL能力。腳本模式和參數化視圖能夠讓用戶用腳本方式開發複雜的邏輯,從而實現複雜的功能。MaxCompute Studio所提供的強大的開發調試的支持,也是企業競品所沒有的。在經過一系列的改進之後,MaxCompute 2.0的執行引擎、優化器都是用了最新的算法模型和框架,因此性能不會輸給任何競品,並且已經經過了內部無數次驗證,因此用戶可以放心使用。

MaxCompute2.0新功能介紹

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