Druid.io系列5:查詢過程

大樹葉發表於2018-04-30

Druid使用JSON over HTTP 作為底層的查詢語言,不過強大的社群也為我們提供了多種查詢方式,比如Python介面pydruid、R介面RDruid、JavaScript介面plywood、類SQL介面plyql、PHP介面druid-php等。

Druid查詢目前只支援單表操作,基本涵蓋了ANSISQL中常用的查詢語句,包括:

聚合類(Aggregation)查詢 
時間序列查詢 
TopN查詢 
GroupBy

元資訊(Metadata)類查詢 
時間範圍查詢(資料集最早和最近出現時間點) 
Segment元資訊 
DataSource元資訊

搜尋類(Search)查詢(包括Select查詢) 
不過Druid目前還不支援JOIN類操作,以上已支援的各類查詢的詳細說明可以參見:http://druid.io/docs/0.9.1.1/querying/searchquery.html

查詢過程 
在介紹BrokerNode中已基本概述了Druid是如何查詢叢集內的資料。BrokerNode作為叢集內查詢入口,需要了解資料在叢集內的分佈情況,才能將查詢請求傳送給對應的資料節點(包括HistoricalNode和Real-TimeNode),BrokerNode會merge每個節點返回的資料,最終返回給使用者。

在這裡主要說下帶有過濾(filter)的查詢請求,我們知道Segments內部存在點陣圖索引,所以資料的過濾操作完全可以轉換為bitmap的按位邏輯操作,所以無論是HistoricalNodes還是Real-TimeNodes,都不需要去檢視原始資料,只需要通過點陣圖索引的按位邏輯操作,獲得符合過濾條件的行號,再取出需要的列返回給Broker即可。

相關文章