阿里雲交互式分析與Presto對比分析及使用注意事項
本文由阿里巴巴耿江濤帶來以「阿里雲交互式分析與Presto對比分析及使用注意事項」爲題的演講。文章首先介紹了Presto以及它的應用場景、特色、架構和原理、數據模型、數據類型,而且以Presto數據查詢做爲實例。而後介紹了阿里雲交互式分析,同時列舉了它的優點和典型應用場景,對權限、數據類型、實例對象層級進行講解,而且對交互式分析的兩大場景進行實踐分析,列舉了幾種表的特徵設置,以阿里雲交互式分析開發做爲示例展現其過程。最後,歸納性的總結了阿里雲交互式分析與Presto的區別。git
如下爲精彩視頻內容整理:
Presto介紹
Presto的應用場景
Presto是定位在數據倉庫和數據分析業務的分佈式SQL引擎,比較適合的應用場景有ETL、Ad-Hoc查詢、海量結構化數據與半結構化數據分析以及海量多維數據聚合與報表。特別須要注意的是,Presto是一個數倉類產品,其設計目標並非爲了替代MySQL、PostgreSQL等傳統的RDBMS數據庫,對事務支持有限,不適合在線業務場景。
Presto的數據都是在內存中,限制了在內存中的數據集大小。好比多個大表的join,這些大表是不能徹底放進內存的。實際應用中,對於在presto的查詢是有必定規定條件的,一個查詢在presto查詢超過30分鐘,就須要殺掉這個任務,這說明該查詢不適合在presto上使用。主要緣由是,查詢過大的話,會佔用整個集羣的資源,這會致使後續的查詢是沒有資源進行查詢的,這與presto的設計理念是衝突的。若是在進行一個查詢時,要等5分鐘纔有資源繼續查詢,這是不合理的,達不到理想的效果。
Presto的特色
Presto有如下幾個特色:
• 多數據源
目前Presto能夠支持Mysql、PostgreSQL、Cassanda、Hive、Kafka、JMX等多種Connector。
• 支持SQL
Presto已經能夠徹底支持ANSI SQL,並提供一個SQL Shell給用戶,用戶能夠直接使用ANSI SQL進行數據查詢和計算。
• 擴展性
Presto有很好的擴展性,開發人員能夠很容易地開發出適合於本身特定數據源的Connector,而且可使用SQL語句查詢和分析自定義Connector中的數據。
• 混合計算
在數據庫中的每種數據源都對應一種特定的Connector,用戶能夠根據業務須要在Presto中針對一種類型的Connector配置一個或者多個Catalog並查詢其中的數據,用戶能夠混合多個Catalog進行join查詢和計算。
• 高性能
經測試,Presto的查詢平均性能是Hive的10倍以上。
• 流水線
因爲Presto是基於PipeLine進行設計的,所以在進行海量數據處理的過程當中,終端用戶不用等到全部的數據處理完畢才能看到結果,而是能夠像自來水管道同樣,一旦計算開始,就能夠當即產生一部分結果數據,而且結果數據會一部分一部分地呈如今終端客戶面前。
Presto架構及其原理
如上圖所示爲Presto的架構圖,其中Coordinator表示中心的查詢角色,做用是接收查詢請求、解析SQL、生成執行計劃、任務調度以及worker管理。coordinator進行是presto集羣的master進程。Worker是執行任務的節點。Connector是presto以插件形式對數據存儲層進行了抽象,稱做鏈接器,不只包含Hadoop相關組件的鏈接器,還包括RDBMS鏈接器。 Discovery service是將coordinator和worker結合在一塊兒的服務;worker節點啓動後向discovery service服務註冊,coordinator經過discovery service獲取註冊的worker節點。從架構圖能夠看出,Presto具備混合計算的優點,能夠鏈接多種connector。
Presto的數據模型 sql
Presto的數據模型主要分爲三個層級,第一個層級爲Catalog,一個 Catalog 能夠包含多個 Schema,物理上指向一個外部數據源,能夠經過Connector訪問該數據源。此外,一次查詢能夠訪問一個或多個Catalog。第二個層級爲Schema,它至關於一個數據庫示例,一個Schema包含多張數據表。第三個層級爲Table,表示數據表,它與通常意義上的數據庫表相同。 數據庫
對於使用Presto,首先登陸服務器客戶端,輸入hive命令並建立數據庫爲git_database。而後在客戶端輸入命令,能夠鏈接到在hive建立的數據庫git_database,鏈接命令爲presto --server emr-header-1:9090 --catalog hive --schema --user hadoop。 segmentfault
上圖爲鏈接Presto的命令以及相應參數解釋。
Presto的數據類型
Presto的數據類型分爲數值類型、字符類型、日期和時間和複雜類型。其中數值類型有BOOLEAN,表示一個二值選項,值爲TRUE或FALSE。TINYINT表示一個8位有符號整型,以二進制補碼形式存儲。SMALLINT表示一個16位有符號整型,以二進制補碼形式存儲。INTEGER表示一個32位有符號整型,以二進制補碼形式存儲。BIGINT表示一個64位有符號整型,以二進制補碼形式存儲。DOUBLE表示一個64位多精度的二進制浮點數值類型。 DECIMAL表示一個固定精度的數值類型,最大可支持38位有效數字,有效數字在17位如下性能最好。定義DECIMAL類型字段時須要肯定兩個字面參數:一是精度(precision)數值總的位數,不包括符號位,二是範圍(scale)小數位數,可選參數,默認爲0。示例:DECIMAL '-10.7'該值可用DECIMAL(3,1)類型表示。
字符類型有VARCHAR表示一個可變長度的字符串類型,能夠設置最大長度。示例:VARCHAR,VARCHAR(10)。CHAR表示一個固定長度的字符串類型,使用時能夠指定字符串的長度,不指定則默認爲1。示例:CHAR,CHAR(10)。
日期和時間有DATE,表示一個日期類型的字段,日期包括年、月、日,可是不包括時間。示例:DATE ‘1988-01-30’。TIME表示一個時間類型,包括時、分、秒、毫秒。時間類型能夠加時區進行修飾。示例:TIME '18:01:02.345',無時區定義,使用系統時區進行解析。TIME '18:01:02.345 Asia/Shanghai',有時區定義,使用定義的時區進行解析。TIMESTAMP表示一個時間戳類型的字段,時間戳包含了日期和時間兩個部分的信息,取值範圍爲'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC,支持使用時區進行修飾。示例:TIMESTAMP '1988-01-30 01:02:03.321',TIMESTAMP '1988-01-30 01:02:03.321 Asia/Shanghai’ 。INTERVAL主要用於時間計算表達式中,表示一個間隔,單位能夠是以下幾個:YEAR-年、QUARTER-季度、MONTH-月、DAY-天、HOUR-小時、MINUTE-分鐘、SECOND-秒、MILLISECOND-毫秒。示例:DATE '2012-08-08' + INTERVAL '2' DAY。
複雜類型有JSON,表示字段爲一個JSON字符串,包括JSON對象、JSON數組、JSON單值(數值或字符串),還包括布爾類型的true、false以及表示空的null。示例:JSON '[1,null, 1988]'JSON '{"k1":1,"k2": "abc"}’。ARRAY表示一個數組,數組中各個元素的類型必須一致。示例:ARRAY[1,2,3]。MAP表示一個映射關係,由鍵數組和值數組組成。示例:MAP(ARRAY['foo','bar'],ARRAY[1,2])。ROW表示一行數據,行中每一個列都有列名對應,可使用運算符+列名的方式來訪問數據列。示例:CAST(ROW(1988,1.0,30) AS ROW(y BIGINT,m DOUBLE,d TINYINT ))。IPADDRESS表示一個IPv4或IPv6地址。內部實現上,將IPv4處理成IPv6地址使用(IPv4到IPv6映射表)。示例:IPADDRESS '0.0.0.0', IPADDRESS '2001:db8::1'。
Presto數據查詢示例
在hive中建立分區表和非分區表,並建立庫和表:
• 非分區表建立
CREATE TABLE weather (數組
city STRING , temp_lo int, -- 最低溫度 temp_hi int -- 最高溫度
);
INSERT INTO weather VALUES服務器
('beijing',40,50), ('hangzhou',46,55);
• 分區表建立
create table odps_test2( shop_name string, customer_id string, total_price INT )partitioned by (sale_date string);
INSERT overwrite table odps_test2 partition (sale_date='2013')values ('shop', '1234', 12);
INSERT overwrite table odps_test2 partition (sale_date='2014')values ('rest', '1111', 13);
INSERT overwrite table odps_test2 partition (sale_date='2015')values ('texy', '2222', 14); 架構
上圖所示爲Presto非分區表查詢。 併發
上圖所示爲Presto分區表查詢。
阿里雲交互式分析介紹
什麼是交互式分析
交互式分析是大數據生態體系下的實時交互式分析產品,支持PB級數據高併發實時寫入實時查詢,徹底兼容PostgreSQL協議,可使用主流BI工具(如Tableau、帆軟等)或SQL客戶端輕鬆訪問數據、開展BI分析或者即席查詢分析。
在離線大數據場景上,交互式分析(Interactive Analytics)與MaxCompute無縫打通,爲MaxCompute提供交互式查詢服務,真正實現「一套數據,兩種計算」。使用熟悉的工具以標準SQL查詢分析MaxCompute項目中的數據,快速獲取查詢結果。也可以使用主流BI工具(如Tableau、帆軟等)或SQL客戶端輕鬆鏈接到MaxCompute項目,開展BI分析或即席查詢。也能夠利用交互式分析(Interactive Analytics)的快速查詢特性,將項目表數據封裝成API對外服務,無需數據遷移就可以支持更豐富的應用場景。
交互式分析(Interactive Analytics)提供無服務器計算(Serverless)的服務方式,無需管理任何基礎設施,只需爲運行的查詢付費。
交互式分析的優點
交互式分析(Interactive Analytics)兼容PostgreSQL生態、支持MaxCompute數據直接查詢分析,支持實時寫入實時查詢,實時離線聯邦分析,低成本、高時效、快速構築企業實時數據倉庫。
• 極速響應
PB級數據亞秒級查詢響應,知足用戶實時多維分析透視和業務探索需求。支持向量化計算及列存儲智能索引,性能大幅領先於開源系統。
• MaxCompute加速查詢
無縫對接MaxCompute,無需移動數據,直接交互式分析,快速獲取查詢結果。能夠單獨查詢MaxCompute,也能夠與實時數據結合進行聯合計算。
• 高併發實時寫入和查詢
支持高併發實時數據的實時寫入和實時查詢,寫入速度可達數億TPS,寫入便可查。
• 統一引擎架構
採用統一的引擎架構,支持行存和列存兩種存儲模式,同時知足點查詢、即席查詢及OLAP場景。
• 簡單易用
兼容PostgreSQL生態,與大數據計算引擎及智能雲研發平臺DataWorks無縫連接。
交互式分析典型應用場景 less
實時數倉場景如上圖所示。業務數據實時寫入實時計算,並將數據進行ETL處理,再由交互式分析實時查詢,最終輸出到第三方分析工具,實現實時數據的實時分析。該場景下的典型應用有:數據部門的實時數倉、實時大屏、實時Reporting報表分析。也用於運維和數據應用的實時監控、實時異常檢測預警、實時Debug。同時用於業務部門的實時風控、實時推薦、實時效果分析、實時訓練等。 運維
MaxCompute加速查詢場景如上圖所示。業務數據寫入離線數倉MaxCompute,由交互式分析直接加速查詢或導入查詢,再對接BI分析工具,輕鬆實現離線數據的實時分析。該場景下的典型應用有:MaxCompute離線數據的實時查詢。此外,也用於MaxCompute離線數據報表分析以及MaxCompute離線數據的在線應用輸出(例如RESTful API)。
實時離線聯邦分析場景如上圖所示。業務數據按冷熱分開存儲,冷數據存儲在離線數倉MaxCompute,熱數據存儲在交互式分析,經過交互式分析實現實時離線數據聯邦分析,再對接BI分析工具,快速響應簡單查詢與複雜多維分析的業務要求。
交互式分析權限介紹
實例內的角色層級關係和權限介紹如上圖所示。
如下爲交互式分析(Interactive Analytics)中經常使用的角色名稱定義。
Cluster Admin:管理整個集羣。可建立、銷燬instance。阿里雲內部管理人員,權限不對外。
superuser:某個項目內的實例(instance)內的管理員,系統默認將實例申請帳號的擁有者設定爲superuser。擁有整個實例的權限,可建立、銷燬DB,也可建立角色以及爲角色受權等。
DB owner:某個DB的owner。系統默認superuser是DB的Owner,但superuser可受權給某個用戶,讓其成爲DB Owner。
普通用戶:通過受權後,可在某個DB裏執行普通的SQL。須要更多的權限,須要向superuser申請。
交互式分析數據類型介紹
上表爲基本類型介紹。其中重點爲double precision、text、timestamp with time zone以及date。
上圖所示爲基礎簡單操做。須要注意的是:對於timestamp with time zone類型,SQL標準經過判斷timestamptz類型數據的「+」或者「-」符號以及符號後面的時區偏移來識別時區,若是未代表時區偏移,將會有一個默認時區添加到數據上。交互式分析支持precision的範圍從0到38,scale範圍支持從0到precision。交互式分析的decimal須要明確指定precision和scale信息,不能使用省略的方式。
數組類型包括int4[]、int8[]、float4[]、float8[]、boolean[]、text[]。上圖所示爲插入數據和查詢數組類型的數據示例。
在插入數據時,例如,ARRAY可使用ARRAY關鍵字,如上圖所示。
也可使用{}表達式,如上圖所示。
查詢數組中單個元素,如上圖所示。
查詢數組中部分元素,如上圖所示。
交互式分析實例對象層級介紹
交互式分析新增schema功能以後,表的存儲結構從database.table改變爲database.schema.table。每一張表歸屬於一個schema,一個Database能夠有多個schema。不一樣的schema下能夠有相同的對象(表名、數據類型等)。 交互式分析當前版本主要支持create schema,alter schema rename以及在schema的建表功能。暫時不支持drop schema。
交互式分析場景分類
交互式分析場景分爲MaxCompute直接分析使用場景和MaxCompute導入查詢使用場景。MaxCompute直接分析使用場景做爲首選方案,查詢數據量小於100GB(通過分區過濾後,命中分區的大小,與查詢相關字段的大小無關)。MaxCompute導入查詢使用場景指單表查詢數據量大於100GB、複雜查詢、含索引的查詢、數據需更新、insert操做的場景。
針對MaxCompute直接分析使用場景,MaxCompute非分區表數據查詢過程以下:
首先在MaxCompute中建立非分區表。
而後創建交互式分析與MaxCompute的映射表。
針對MaxCompute直接分析使用場景,MaxCompute分區表數據直接查詢過程以下:
首先在MaxCompute中建立分區表。
而後創建交互式分析與MaxCompute的映射表。
針對MaxCompute導入查詢使用場景,MaxCompute非分區數據導入查詢過程以下:
首先在MaxCompute中建立非分區表並插入數據。
而後創建交互式分析與MaxCompute的映射表。
在交互式分析中建立真實存在的表。
最後,將MaxCompute源頭表中的數據導入到交互式分析。
針對MaxCompute導入查詢使用場景,MaxCompute分區數據導入查詢過程以下:
首先在MaxCompute中建立非分區表並插入數據。
而後創建交互式查詢與MaxCompute的映射表。
在交互式分析中建立真實存在的表。
在交互式分析中創建子分區。
最後,將MaxCompute中的數據導入交互式分析的子分區表。
表的特徵設置
上圖所示爲orientation的設置,在交互式分析(Interactive Analytics)中,數據庫表默認爲列存(column store)形式。列存對於OLAP場景較好,適合各類複雜查詢,行存對於kv場景較好,適合基於primary key的點查和掃描scan。
上圖所示爲clustering key的設置,互式分析(Interactive Analytics)會在聚簇索引上對數據進行排序,創建聚簇索引可以加速用戶在索引列上的range和filter查詢。clustering_key指定的列必須知足非空約束(not null)。clustering_key指定列時,可在列名後添加 :desc或者asc來代表構建索引時的排序方式。排序方式默認爲asc,即升序。數據類型爲float或double的列,不能設置爲clustering_key。
上圖所示爲bitmap columns的設置,bitmap_columns指定比特編碼列,交互式分析(Interactive Analytics)在這些列上構建比特編碼。bitmap能夠對segment內部的數據進行快速過濾,因此建議用戶把filter條件的數據建成比特編碼。設置bitmap_columns要求orientation爲 column,即列存表。bitmap_columns適合無序且取值很少的列,對於每一個取值構造一個二進制串,表示取值所在位置的bitmap。bitmap_columns指定的列能夠爲null。默認全部text列都會被隱式地設置到bitmap_columns中。
上圖所示爲dictionary encoding columns的設置,dictionary_encoding_columns指定字典編碼列,交互式分析(Interactive Analytics)爲指定列的值構建字典映射。字典編碼能夠將字符串的比較轉成數字的比較,加速group by、filter等查詢。設置dictionary_encoding_columns要求orientation爲column,即列存表。dictionary_encoding_columns指定的列能夠爲null。無序但取值較少的列適合設置dictionary_encoding_columns,能夠壓縮存儲。默認全部text列都會被隱式地設置到dictionary_encoding_columns中。
上圖所示爲time to live in seconds的設置,time_to_live_in_seconds指定了表的生存時間,單位爲秒,必須是非負數字類型,整數或浮點數都可。
上圖所示爲distribution_key的設置,distribution_key屬性指定了數據庫表分佈策略。columnName部分如設置單值,不要有多餘空格。如設置多值,則以逗號分隔,一樣不要有多餘的空格。distribution_key指定的列能夠爲null。交互式分析中,數據庫表默認爲隨機分佈形式。數據將被隨機分配到各個shard上。若是制定了分佈列,數據將按照指定列,將數據shuffle到各個shard,一樣的數值確定會在一樣的shard中。當以分佈列作過濾條件時,交互式分析能夠直接篩選出數據相關的shard進行掃描。當以分佈列作join條件時,交互式分析不須要再次將數據shuffle到其餘計算節點,直接在本節點join本節點數據便可,能夠大大提升執行效率。
交互式分析開發實例
購買交互式分析實例以下所示:
點擊連接,進入購買實例界面,選擇對應的交互式分析region,公測階段主要是華東一、華東二、華北二、華南1,而後選擇購買的計算資源,並對實例命名,選擇購買時長,最後點擊購買。
確認交互式分析的地域,計算資源,以及設置的實例名稱,最後點擊去支付。
查看交互式分析實例以下所示:
進入控制檯點擊DataWorks,選擇左側列表中的計算引擎列表,選擇交互式分析,查看當前購買交互式分析實例。
建立項目空間以下所示:
選擇左側列表中的工做空間列表,並點擊頁面的建立工做空間。
填寫相應的工做空間名稱,顯示名,以及模式選擇。
選擇引擎爲交互式分析,點擊下一步。
建立工做空間以下所示:
選擇實例顯示名稱以及選擇交互式分析實例名稱,數據庫名默認爲postgres。
添加子帳戶到到該項目空間以下所示:
選擇新建的項目空間點工做空間配置,選擇左側列表中的成員管理將須要添加到該項目空間的子帳戶添加到該項目空間。
交互式分析開發以下所示:
進入Dataworks界面,點擊該交互式分析的項目空間,點擊左側的所有產品,選擇Holo Studio,進行開發。
建立新的文件夾,並建立節點名稱,默認數據庫爲postgres。
進入Holo Studio點擊新建文件夾,建立交互式分析的節點,在此建立新的數據庫爲git_database。
點擊右上角的配置按鈕,進入工做空間管理,進入管理界面。實例開通成功後,系統會默認生成一個名爲postgres的數據庫,但該數據庫分配的資源小,若須要走生產任務,建議建立一個新的業務數據庫。
進入工做空間配置,點擊計算引擎信息中的的交互式分析,能夠查看到交互式分析實例的相關信息,在這裏點擊綁定交互式分析DB。
點擊綁定交互式分析按鈕,填寫在Holo Studio中的建立的數據庫git_database,而後點擊測試聯通性,點擊肯定。
交互式分析子帳戶受權以下所示:
使用主帳號登陸控制檯,點右側人像,點擊訪問控制,查看當前全部用戶。
選擇左側列表中的用戶管理須要添加到Holo Studio的用戶,並點擊。
點擊用戶名稱,能夠查看到用戶的基本信息,在UID字段中能夠看到一串數字,將這UID記錄下來。
進入所開發的Holo Studio的界面,在所創建的文件夾下,點擊Holo節點,輸入圖片中的語句create user 「p4_」 SUPERUSER,這裏的UID便是上頁保存的UID。
阿里雲交互式分析與Presto的區別
總之,阿里雲交互式分析的適用場景爲實時數倉和聯邦查詢(MaxCompute、Mysql、OSS…),實例架構對應飛天操做系統(內存+存儲混合型),操做方式爲HoloStudio界面開發,也支持其餘bi工具,而且兼容Postgres。數據模型層級分爲Instance、database、schema和table。權限控制爲簡單或複雜模型+Grant語句。數據類型支持複雜類型,支持表屬性設置。SQL爲Postgres SQL,支持數據存儲,能夠實時寫入、實時更新。生態(BI工具)爲Tableau、帆軟主流BI+雲QuickBI。
而Presto的適用場景爲聯邦查詢(Hive、Mysql、MongoDB…)。實例架構對應Presto架構(MPP),操做方式爲客戶端操做。數據模型層級分爲Catalog、Schema和Table。權限控制
爲Grant語句,數據類型支持複雜類型,不支持表屬性設置,SQL是Presto SQL,不支持數據存儲,不支持數據更新,生態(BI工具)爲Tableau、帆軟等主流BI。
查看更多:https://yqh.aliyun.com/detail..._content=g_1000107085
上雲就看雲棲號:更多雲資訊,上雲案例,最佳實踐,產品入門,訪問:https://yqh.aliyun.com/