Data Lake Analytics(簡稱DLA)在構建第一天就是支持直接關聯分析Table Store(簡稱OTS)裏的數據,實現存儲計算分離架構,知足用戶基於SQL接口分析Table Store數據需求。算法
玩轉DLA+OTS:https://ots.console.aliyun.com/index#/demo/cn-hangzhou/dla
王燁:DLA如何分析Table Store的數據數據庫
DLA控制檯:https://openanalytics.console.aliyun.com/架構
這是DLA與Table Store在生態中的關係,做爲存儲計算分離架構,DLA負責主要的SQL算子計算,而Table Store則負責部分計算(由DLA下推下來)和核心存儲功能。函數
目前,Table Store的寬數據表結構中的列, 主要分紅兩部分:主鍵(全部主鍵都不可改,也不爲空;其中第一主鍵是物理分區鍵),非主鍵列(可改可覆蓋可爲空,無關緊要):性能
假設有張表tbl(主鍵:pk1,pk2;非主鍵:col1,col2),當DLA收到這樣的SQL時:測試
select pk2,col1 from tbl where pk1 = 123 and pk2 >= '2019-01-10' and col2 = 'zzz'
DLA就會基於Table Store的SDK接口下發相關的查詢:優化
1)查詢tbl表數據,其中只查詢pk二、pk三、col3這幾個列;url
2)按照pk1作分區裁剪,只下推查詢到pk1=123所在的分區;
3)下推 pk1 =12三、pk2 >='2019-01-10'和col4 ='zzz' 這三個條件;
4)若是當前分區的數據很大,則會切分出多個分片,並行查詢;spa
這裏,最關鍵的條件就是 pk1 =123,DLA基於這個第一主鍵(分區鍵)條件來篩選OTS的目標分區而後下發查詢條件。其餘支持的分區條件有設計
比較條件:>,>=,=,<,<=,!= 範圍條件:[1,20], (2,10), (-∞,10], (20,+∞)等
針對上面的表結構,若是遇到以下的SQL:
select pk2,pk3,col3 from tbl where pk2 >= '2019-01-10' and col4 = 'zzz'
由於pk1並無出如今條件中,沒法作分區裁剪,所以目前DLA會先將整個TableStore的表切好分片,而後下推其餘條件,並行獲取每一個分片的數據並作計算。這樣的問題就是:
不管是計算成本仍是延時,都會影響客戶的體驗。
而多元索引是基於倒排索引來設計和實現的:
所以,DLA全面升級了,支持直接以SQL方式訪問Table Store的多元索引從而來加速查詢。
對DLA的客戶來講,只需一步,就可使用DLA來訪問Table Store的多元索引。由於目前統計信息採集及優化器等緣由,暫時還不支持自動判斷多元索引,因此須要利用DLA的hint來主動開啓:
/*+ ots-index-first=<相關的索引開關> */ select * from tbl1 where ...
其中,索引開關有幾種模式:
/*+ ots-index-first=auto */ select * from tbl1 where ...
/*+ ots-index-first=[tbl1, dla_schema2.tbl2, ...] */ select * from tbl1 join dla_schema2.tbl2 join dla_schema3.tbl3 where ...
/*+ ots-index-first=threshold:200 */ select * from tbl1 where ... /*+ ots-index-first=threshold:5% */ select * from tbl1 where ...
另外,早期客戶給DLA作的角色受權策略裏並無這些新增的多元索引接口,所以老客戶須要從新給DLA作跨雲服務訪問的角色受權。
雖然Table Store多元索引很好用,但他也不是銀彈,須要合理的使用。有幾個場景的約束:
固然,針對傳統數據庫的索引中的一些特性,在DLA中也儘可能採納進來,好比Covering Index 來避免隨機查詢主表,DLA和Table Store也支持,好比這樣的SQL:
-- pk1, pk2是主鍵,col1,col2是非主鍵列,索引是idx_col1_col2 select pk1, col1 from tbl where col2 = 21
這裏col1和col2都在索引中,而pk1和pk2也間接在索引中,所以這個SQL徹底能夠在索引上完成過濾和輸出,從而避免回主表查詢。
除了多元索引以外,目前Table Store團隊也在積極地推廣二級索引,幫助用戶更好的使用Table Store。將來DLA也會將這塊能力集成進來,這樣DLA能夠幫助用戶在主表、二級索引表、多元索引表之間最優化選擇,幫助客戶提高性能而且下降成本。
將來,DLA須要實現預先採集更多的統計信息,免去用戶主動添加hint的麻煩,徹底自動化的選擇和路由,作到真正的數據庫體驗。
將來,DLA還須要下推更多的計算到Table Store上,實現更好的」近存儲計算「,好比聚合能力下推、函數下推、支持全文索引等等,讓用戶使用DLA+Table Store得到更好的體驗。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。