導(dǎo)讀:前段時(shí)間公司業(yè)務(wù)需要,需要對(duì)現(xiàn)有用戶(hù)數(shù)據(jù)進(jìn)行簡(jiǎn)單的商業(yè)分析,因此找到了Apache Drill。本文將對(duì)Apache Drill進(jìn)行簡(jiǎn)單的說(shuō)明,希望能夠幫助讀者理解并使用到實(shí)際項(xiàng)目中。
使用場(chǎng)景
Aache Drill 是一個(gè)用來(lái)分析大數(shù)據(jù)的工具,使用標(biāo)準(zhǔn)SQL查詢(xún)語(yǔ)句(即select語(yǔ)句)來(lái)完成數(shù)據(jù)查詢(xún)的JAVA框架,主要用于:
- 跨數(shù)據(jù)庫(kù)查詢(xún):比如MySQL不同庫(kù)聯(lián)查
- 跨數(shù)據(jù)源查詢(xún):比如mysql與oracle數(shù)據(jù)庫(kù)聯(lián)查、mysql與mongodb數(shù)據(jù)庫(kù)聯(lián)查,當(dāng)然還支持更多的數(shù)據(jù)源。
如果你有以上的使用場(chǎng)景,那么它將會(huì)給你帶來(lái)強(qiáng)大的震撼。
介紹
Apache Drill 是一個(gè)分布式查詢(xún)引擎,實(shí)際上是GoolDremal的開(kāi)源實(shí)現(xiàn)。
特點(diǎn):
- 低延遲
- 支持SQL
- 學(xué)習(xí)成本低
- 支持jdbc
- 高性能
基于以上特點(diǎn),我在使用過(guò)程中,發(fā)現(xiàn)非常簡(jiǎn)單,很容易和現(xiàn)在的框架集成(springboot+mybatis),幾乎零成本,唯一的成本就是配置數(shù)據(jù)源,這塊成本也很小,因?yàn)锳pache Drill提供了web ui操作。
基本用法
在這里我就不講具體安裝步驟了,我用Docker來(lái)代替。
- 通過(guò)apache/drill官方鏡像安裝并啟動(dòng)
- 瀏覽器打開(kāi)localhost:8047(web ui 默認(rèn)端口,別忘記修改容器port)
- 配置數(shù)據(jù)源

web ui 首頁(yè)
- 點(diǎn)擊Storage,可以看到下圖

drill 自帶的web ui
- 通過(guò)create創(chuàng)建數(shù)據(jù)源

配置
配置代碼如下(這里是以mysql為例,mac系統(tǒng))
{
"type": "jdbc",
"driver": "com.mysql.cj.jdbc.Driver",
"url": "jdbc:mysql://docker.for.mac.host.internal:3306?serverTimezone=Asia/Shanghai",
"username": "root",
"password": "java",
"caseInsensitiveTableNames": false,
"enabled": true
}
- 測(cè)試

使用需要注意一點(diǎn):
SQL查詢(xún)語(yǔ)句比我們直接使用mysql等數(shù)據(jù)庫(kù)SQL,多了一個(gè)命名空間,也就是我們?cè)趧?chuàng)建數(shù)據(jù)圓的時(shí)候的名字,下面SQL中的mysql。
SELECT * from mysql.gadmins.sys_admin_function
5. jdbc client
pom.xml 添加依賴(lài)
<dependency>
<groupId>org.apache.drill.exec</groupId>
<artifactId>drill-jdbc-all</artifactId>
<version>1.17.0</version>
</dependency>
java代碼
Class.forName("org.apache.drill.jdbc.Driver");
Connection connection =DriverManager.getConnection("jdbc:drill:zk=
node3.mynode.com:2181/drill/my_cluster_com-drillbits");
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("SELECT * from mysql.gadmins.`sys_admin_function`");
while(rs.next()){
System.out.println(rs.getString(1));
}
拓展使用
由于我主要用來(lái)做數(shù)據(jù)查詢(xún),最關(guān)鍵的就是SQL語(yǔ)句了,那么有2個(gè)拓展場(chǎng)景
- 通過(guò)自建web 管理SQL語(yǔ)句,執(zhí)行測(cè)試、發(fā)布
- 通過(guò)結(jié)合DataQL引擎,可以讓SQL語(yǔ)句數(shù)據(jù)動(dòng)起來(lái),進(jìn)一步對(duì)SQL查詢(xún)出來(lái)的數(shù)據(jù)進(jìn)行轉(zhuǎn)化
總結(jié)
在調(diào)研的過(guò)程中,Apache Drill 給我的感覺(jué)就很來(lái)電,很有眼緣,當(dāng)然也很符合我們的業(yè)務(wù)需要。在技術(shù)方案選型的過(guò)程中,是一個(gè)循序漸進(jìn)的過(guò)程,未來(lái)還需要更多的調(diào)研,或許到一定階段,就需要其他框架來(lái)支撐業(yè)務(wù),這也是程序員的最大樂(lè)趣之一。