導讀:前段時間公司業務需要,需要對現有用戶數據進行簡單的商業分析,因此找到了Apache Drill。本文將對Apache Drill進行簡單的說明,希望能夠幫助讀者理解并使用到實際項目中。
使用場景
Aache Drill 是一個用來分析大數據的工具,使用標準SQL查詢語句(即select語句)來完成數據查詢的JAVA框架,主要用于:
- 跨數據庫查詢:比如MySQL不同庫聯查
- 跨數據源查詢:比如mysql與oracle數據庫聯查、mysql與mongodb數據庫聯查,當然還支持更多的數據源。
如果你有以上的使用場景,那么它將會給你帶來強大的震撼。
介紹
Apache Drill 是一個分布式查詢引擎,實際上是GoolDremal的開源實現。
特點:
- 低延遲
- 支持SQL
- 學習成本低
- 支持jdbc
- 高性能
基于以上特點,我在使用過程中,發現非常簡單,很容易和現在的框架集成(springboot+mybatis),幾乎零成本,唯一的成本就是配置數據源,這塊成本也很小,因為Apache Drill提供了web ui操作。
基本用法
在這里我就不講具體安裝步驟了,我用Docker來代替。
- 通過apache/drill官方鏡像安裝并啟動
- 瀏覽器打開localhost:8047(web ui 默認端口,別忘記修改容器port)
- 配置數據源
web ui 首頁
- 點擊Storage,可以看到下圖
drill 自帶的web ui
- 通過create創建數據源
配置
配置代碼如下(這里是以mysql為例,mac系統)
{
"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
}
- 測試
使用需要注意一點:
SQL查詢語句比我們直接使用mysql等數據庫SQL,多了一個命名空間,也就是我們在創建數據圓的時候的名字,下面SQL中的mysql。
SELECT * from mysql.gadmins.sys_admin_function
5. jdbc client
pom.xml 添加依賴
<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));
}
拓展使用
由于我主要用來做數據查詢,最關鍵的就是SQL語句了,那么有2個拓展場景
- 通過自建web 管理SQL語句,執行測試、發布
- 通過結合DataQL引擎,可以讓SQL語句數據動起來,進一步對SQL查詢出來的數據進行轉化
總結
在調研的過程中,Apache Drill 給我的感覺就很來電,很有眼緣,當然也很符合我們的業務需要。在技術方案選型的過程中,是一個循序漸進的過程,未來還需要更多的調研,或許到一定階段,就需要其他框架來支撐業務,這也是程序員的最大樂趣之一。