摘要:距離上一次MaxCompute新功能的線上釋出已經過去了大約一個季度的時間,而在這一段時間裡,MaxCompute不斷地在增加新的功能和特性,比如參數化視圖、UDF支援動态參數、支援分區裁剪、生成建表DDL語句功能等功能都已經得到了廣大開發者的廣泛使用。那麼,近期MaxCompute究竟還有哪些新特性呢?本文就為大家揭曉答案。
本文作者:曲甯,阿裡雲智能計算平台事業部産品專家
以下内容根據視訊以及PPT整理而成。
MaxCompute與阿裡雲大資料産品解決方案
在介紹MaxCompute新功能前,我們先快速對阿裡雲的大資料産品解決方案進行介紹,以便不熟悉MaxCompute的朋友能快速建立認知。
阿裡雲大資料解決方案中包含了資料接入、資料存儲及處理分析、資料服務以及線上應用等這樣的幾個次元。通常的情況下,基于MaxCompute和阿裡雲大資料解決方案搭建的系統會通過DataWorks實作離線多源異構資料的同步,并向MaxCompute大資料平台加載資料。與此同時,借助于DTS日志服務、Kafka消息隊列服務實作對實時資料的收集。之後,通過流式計算服務實作對于資料的實時計算和分析,并将資料投遞到實時線上的服務或者回流到統一的資料倉庫服務中去。資料落盤保留下來之後,将進行資料倉庫相關的處理分析,加工成為可以被業務消費、高品質的資料集。同時,利用機器學習平台可以開展包含資料準備、模型訓練、模型部署線上推理在内的完整智能應用。
在資料服務(data serving)次元,阿裡雲大資料産品解決方案中也提供了多種的服務,包括了關系型資料庫、分析型資料庫、ES等,這些服務能夠幫助使用者加速在面向線上應用場景下的資料消費。同時,阿裡雲大資料産品解決方案還能夠與阿裡雲線上的Quick BI、DataV以及第三方客戶自行購買的BI等工具進行結合。在雲上大資料場景下,DataWorks則承擔的是整體的資料開發、編排排程以及資料管理的職能。
What's New?MaxCompute産品近期釋出預覽
本次分享面對的主要群體是對于阿裡雲MaxCompute産品有所了解并且有一定使用經驗的客戶,是以所介紹的内容會比較細緻,但不會過多展開相關背景及原理介紹,更多地會面向MaxCompute已有的問題以及新推出的特性本身進行分享。

近期以來,MaxCompute大約每三個月就會疊代一個大版本釋出到線上,而中間則會有很多個小版本。到8月份的時候,已經距離上次MaxCompute線上釋出會經過了大約一個季度的時間,是以需要再做一次新特性的釋出。是以本次分享不僅涵蓋了MaxCompute針對日常需求的功能釋出,也包括了大版本釋出的内容。
本次所要介紹的MaxCompute産品近期的釋出情況主要包括三個部分,首先是近幾個月已經陸續釋出上線,并且産品文檔已經完備的功能,希望希望通過本次介紹讓開發者能夠更好地了解這些新的功能;其次是目前MaxCompute線上上所正在做的大版本更新中已經實作的一批灰階更新項目,本次也會對于其中一些比較成熟的功能進行分享;最後就是一些即将面向更大規模的使用者進行釋出的功能,也就是目前還處于定向内測階段的功能。
新Region開服:西南成都節點正式開服、國際Region提供Spark服務
随着阿裡雲西南成都節點的正式開服,大資料計算服務MaxCompute也正式在西南成都節點開服售賣。與此同時,MaxCompute也提供了很多國際的Region,阿裡雲根據使用者需求的強烈程度優先在香港、德國、新加坡、印度和美西這五個國際Region推出了Spark服務。
新功能:SQL-參數化視圖
MaxCompute近期釋出上線的版本圍繞着SQL核心功能的一些細節做了大量的優化和提升,其中一點就是參數化視圖。MaxCompute傳統的視圖(VIEW)中實作了一定的封裝與重用,但是并不接受調用者傳遞的任何參數,例如:調用者無法對視圖讀取的底層表進行資料過濾或傳遞其它參數,導緻代碼重用能力低下。MaxCompute近期釋出上線的版本的SQL引擎支援帶參數的視圖,支援傳入任意表或者其它變量來定制視圖的行為,進而增強了視圖的可用性和複用度。
新功能: SQL-UDTF/UDAF支援動态參數
新釋出的MaxCompute版本的SQL能夠支援UDF相關的動态參數。如下圖中的代碼所示,其中含有一個命名為JsonTuple的UDTF。這裡JsonTuple的業務需求就是首先讀取一個JSON串,其中包含了一系列JSON内容,并且需要解析其中某些節點的資訊。
面對像JsonTuple這樣的函數設計,雖然給定了一個JSON,但是可能需要根節點的參數,也可能需要根節點+子節點或者多個子節點的參數去提取并解析JSON字元串中的資訊,此時就造成了函數的不确定性,是以函數最好能夠支援使用者動态的參數輸入,也就是可以根據使用者的動态參數輸入提取相應的資訊。MaxCompute的UTDF和UTAF在參數清單中支援使用*的模式,表示接受任意長度、任意類型的輸入參數,進而滿足了上述場景的需求。
新功能: SQL-UDT支援資源(Resource)通路
User Defined Type,簡稱UDT,它屬于最近幾個版本MaxCompute的SQL裡面推出的比較新的功能,目前應用也不是非常廣泛。UDT是MaxCompute 2.0之後主張使用的NewSQL能力,其允許在SQL中直接引用第三方語言的類或者對象,擷取其資料内容或者調用其方法。目前,MaxCompute的SQL中的UDT提供的是對于Java UDT的支援。舉例而言,如果想要在MaxCompute中擷取整數中的最大值,通常需要自己寫一個UDF函數并通過其他語言實作出來,而其實在像Java這樣的進階語言中的一些内置方法就能夠實作,是以可以簡單地使用Select Java庫中的一個方法來獲得相應的能力。這是之前所釋出的UDT本身的能力,而今天要釋出的新特性則是UDT對于MaxCompute中資源通路的支援。MaxCompute中有很多種對象,其中一種就是資源,比如一些資料檔案。MaxCompute可以使用SQL通過Resource讀取文本檔案,也可以通過Set參數的方式将自定義的JAR作為UDT能夠直接通路的一個庫,并在UDT當中使用使用者自定義的第三方庫。
新功能:SQL-UDF支援分區裁剪
MaxCompute本身有大量的分區表,在分區的使用中一個很重要的優化點就是通過分區裁剪的方式在查詢中過濾分區。在過濾分區的時候,有時需要使用一些自定義的邏輯,通過一些自定義的功能來确定分區的範圍。當增加一個UDF時往往會發生全表掃描,這是因為在送出查詢的時候還不能确定送出的分區到底是哪個,是以會發生全表掃描,進而帶來比較高的費用和更重的負載。
新釋出的MaxCompute版本中的SQL已經能夠支援UDF分區裁剪的能力了。其邏輯是當送出的SQL存在UDF的時候,會首先将UDF單獨提取出來執行,将UDF的執行結果拿到之後再和原來的查詢語句進行拼裝再送出。這樣一來,當存在動态不确定的資訊時,首先會解析動态資訊,再确定分區範圍,進而進行分區裁剪,盡量減低資料掃描所産生的費用。其開發方式就是在UDF中加一些參數,就能夠使得UDF支援分區裁剪。
新功能:SQL-生成建表DDL語句功能
很多開發者都有将項目中資料表的DDL導出來的需求,新版本的MaxCompute也提供了相容Hive的SHOW Create table + 的方式。從下圖中的案例也可以看出,使用SHOW Create table + 之後就能夠獲得該表的DDL的腳本,通過這種方式就能夠實作重建表或者做表結構備份的工作。
新功能: SQL-支援指定表的列預設值
新版本的MaxCompute中也支援了指定表的列預設值。其實熟悉大資料發展曆程的同學們都應該有所了解,資料庫中存在很多比較完善技術,比如在校驗機制、限制條件上都提供了各種預設值可供開發者選擇。而大資料技術在這些方面所做的遠遠不夠,目前的發展趨勢是在資料的品質和資料的校驗等方面工作中,大資料技術越來越靠近資料庫技術。在MaxCompute最新的版本釋出中提供的DEFAULT VALUE就允許了使用者建立資料表的時候去指定預設值。
在上圖的代碼示例中,建立了一個表T,表T中包含了a、b兩列,這兩列的資料類型都是bigint,并且a的預設值設為10。當向這個表中插入資料記錄并且隻對于字段b進行插資料的時候,MaxCompute會自動地在結果當中将a的值按照預設值補齊,其等效于同時在a列中插入10并且在b列中插入100。這樣的功能在很多場景下用處還是比較大的,比如某些字段預設設定為0或者為空的情況。
新功能: SQL-支援LIMIT OFFSET
之前的時候,很多使用者也有這樣的一個呼聲,就是希望在MaxCompute的SQL上面做到像MySQL、PG這些資料庫一樣的分頁功能,能夠定位到在多少行之後取多少行資料,這樣的功能在資料庫中是非常通用的。以前,在MaxCompute的SQL裡面通過為每一行資料打一個唯一标示Row Number,再用Between And這樣的方式來變相地實作分頁功能。而在新版本的MaxCompute中,SQL本身就已經原生地支援了LIMIT OFFSET的文法,可以更加容易地實作分頁的需求。
新功能:SQL-新增内置函數JSON_TUPLE、EXTRACT
接下來介紹MaxCompute的SQL中兩個比較實用的函數——JSON_TUPLE和EXTRACT。MaxCompute本身在之前對于字元串的處理隻有一個getJsonObject()内建函數,而隻有這樣的一個函數是比較痛苦的,因為在建構JSON串的時候往往需要多次調用這個内建函數來擷取某個節點的值。
而新增的JSON_TUPLE函數則解決了這些問題。使用JSON_TUPLE首先可以獲得一個JSON字元串,該函數的參數則可以是多個動态的參數,比如想要擷取10個節點的值就可以帶10個參數,而且還适合使用嵌套式資料,是以JSON_TUPLE将來也會成為開發者使用較多的内建函數。此外,新版本MaxCompute的SQL中還支援了EXTRACT函數,能夠按年、按月、按日、按小時、按分鐘來截取日期。因為對于日期的處理也屬于高頻操作,是以EXTRACT函數也将會被高頻地使用。
新功能-分區管理
除了前面提到的MaxCompute在SQL中的一些增強功能之外,新版本的MaxCompute還提供了一些其他的能力,比如分區管理的能力。在分區管理部分,一個比較重要的場景就是由于開發者往往喜歡使用較多的分區,而當資料量大的時候可能會造成多級嵌套分區,是以表的分區數量就會非常龐大。而MaxCompute本身對于分區數量存在一個上限,當資料分區過多的時候就需要将曆史過往的分區進行合并,并且删除不必要的分區。
分區管理的最佳實踐就是在資料比較“熱”的情況下,分區切分得可能會比較細,當資料沉澱時間比較長的時候,過往的曆史資料被通路的頻率就會比較低,是以可以通過分區歸并的方式減少分區的數量。過去删除分區的時候也是比較痛苦的,需要每次通過drop partition來删除一個分區,而現在MaxCompute在drop partition指令裡面也支援了一次删除多個分區的能力,可以通過一次操作删除多個分區。
新功能-預付費資源監控報警
預付費資源監控報警是MaxCompute近期釋出的一個新功能。阿裡雲MaxCompute的很多使用者使用的都是預付費的固定CPU大小的資源組,在這種場景下,使用者往往會更加關注購買的資源是否過多,在業務高峰期能否将其充分地利用起來,是否需要需要擴容或者縮容等。與此同時,使用者還需要對于一些關鍵任務進行監控,比如在作業排隊比較嚴重,産生積壓的情況時,也希望能夠通過監控報警系統獲得排隊積壓資訊,并且及時告警,進而更加利于人工及時進行幹預,保證當核心業務出現問題時能夠得到及時處理。
MaxCompute所提供的預付費資源監控報警能力基于阿裡雲所提供的雲監控服務,并且結合了配額組CPU使用量、作業等待等待數、記憶體使用量、整體CPU使用率等一些關鍵名額,通過對以上這些名額進行規則配置,就能實作對于關鍵事件的短信通知以及實時告警,進而幫助使用者更好地管理和使用資源。
新功能-IP白名單支援IPV6
目前,IPV6已經成為阿裡雲整體都會支援的能力,而MaxCompute本身也支援了IPV6。對于IP白名單這個安全特性而言,過去MaxCompute支援IPV4,目前也擴充支援了IPV6,使用方式與原本的IPV4差異不大,通過白名單清單的設定就能夠同時支援IPV4和IPV6。
新規格:預付費套餐(計算資源+存儲資源)釋出
前面為大家介紹了MaxCompute在新版本的釋出中的一些功能,接下來将為大家介紹MaxCompute的一種新規格。新版本的MaxCompute中推出了預付費套餐(計算資源+存儲資源)的規格。對于MaxCompute而言,主要有兩種付費形式,其中一種是按量付費,這種方式具有極緻的彈性,并且能夠自動伸縮;另外一種是按作業付費,這種方式比較符合期望的财務支出,在成本效益方面更具有優勢。
本次新釋出的預付費打包套餐和之前的固定資源配額都屬于固定規格預付費方式。預付費套餐的售賣方式為混合付費,在開通時以包年包月方式購買計算資源(主要為CU)和存儲資源。使用時,公網下載下傳流量和超出的存儲容量按使用量收費。總體而言,預付費套餐相當于是對使用者的優惠套餐,相比于企業客戶線上下自行搭建的大資料常用配置的計算和存儲規模,阿裡雲本次所推出的預付費套餐将會提供一個十分具有競争力的價格,這樣一來既能夠保證企業每月的财務支出比較穩定,同時也能夠提供較高的成本效益。
體驗優化:文檔持續優化及最佳實踐指引
MaxCompute團隊一直以來都非常注重産品文檔的品質和體驗,也在進行着持續地優化,并在社群中也和廣大的開發者保持着密切的交流和互動,擷取了開發者在MaxCompute産品使用以及産品如何應用到生産的過程中的一些需求。MaxCompute團隊近期也将一些重點的、高頻的問題沉澱下來,形成了文檔化、案例形式的實踐指導,釋出到了官網上面。
這些文檔包含了如何基于MaxCompute建構和優化資料倉庫,同時也提供了一些數字化營運的具體案例,比如如何基于MaxCompute搭建網際網路線上的營運分析平台。此外,因為Python生态廣受歡迎,開發者也是人數衆多,是以PyODPS也受到了很多Python開發者的支援,通過前一個階段的回報,MaxCompute團隊也發現PyODPS在文檔方面存在一些不足之處,是以近期也做了專項整理。MaxCompute團隊整理了PyODPS的一些指導文檔和具體示例,大家可以到官網上去檢視最新釋出的指導文檔和案例。
新功能内測:中繼資料服務Information_Schema
前面分享的是MaxCompute新版本中的一些線上可用的功能,而在實際上還有一些功能目前處于内部定向邀請測試階段,這些功能也是社群中很多開發者以及企業客戶所非常看重的功能。這裡為大家介紹兩個處于内測階段的功能,其中第一個就是中繼資料服務。MaxCompute本身是一個多租戶的系統,使用者使用的時候非常希望将更多的資料以更加友好的方式開放給使用者,能夠幫助使用者自助地了解項目中的一些資訊,其中比較常見的就是中繼資料資訊,比如Table、Partition、Column、UDF、Resource、User等資訊。以往這些資訊都是通過指令的方式擷取,但是當中繼資料量非常大的時候,很難通過這種方式去獲得或者檢索和過濾資訊。而在傳統的資料庫技術領域有非常多的解決方案,是以MaxCompute中也提供了Information_Schema這樣的一套服務,在遵循規範的基礎之上也添加了一些MaxCompute特有的視圖和字段,既能夠滿足開發者原有的一些使用習慣,也能夠更好地結合MaxCompute本身的一些特點。
通過内建服務,MaxCompute首先會為使用者提供一個Information_Schema庫,使用者可以去自助地去通路相關的中繼資料資訊,比如項目中的表格、字段、視圖、建立人、建立時間以及表的大小和生命周期等。通過這種方式就能夠對于表的全局資訊有一個很好的把控。與此同時,MaxCompute也會提供準實時的作業曆史明細的查詢能力。作業曆史包含了日常的執行個體資訊、SQL的作業明細等。以往是通過show instance等指令擷取近期執行作業的資訊,而如今可以通過對于視圖的查詢方式來擷取本項目所有作業資訊,并且能夠通過一些過濾條件篩選出自己所需要的作業資訊。所查詢出來的資訊則包括了項目類、項目名稱、作業送出時間、作業狀态、作業的SQL語句、資料的掃描量、複雜度以及資源消耗等資訊,基于對于這些資訊的統計就能夠實作很多的性能優化以及診斷等相關工作。中繼資料服務Information_Schema這樣的能力也會在近期面向全體雲上使用者進行公測。
新功能内測:基于ActionTrail的行為審計日志服務
另一個要介紹的處于内測階段的功能就是基于ActionTrail的行為審計日志服務。對于阿裡雲MaxCompute團隊而言,經常會有企業送出工單希望能夠幫助他們檢查一下某張表的資料被誰删除了,或者某個賬号近期是否進行了資料下載下傳。是以,MaxCompute也将要推出基于ActionTrail的行為審計日志服務,這款服務能夠完整地記錄項目内的使用者操作行為,并通過接入阿裡雲Action Trail服務将MaxCompute使用者行為日志實時推送給客戶,滿足客戶實時審計、問題回溯分析等需求。被審計的行為包含了對于表的建立、删除以及對于表結構的變更、寫入資料、下載下傳資料等,而日志資訊也包含了企業比較關心的用戶端資訊、操作的具體SQL内容、送出人、送出時間等關鍵資訊。