本文针对drill版本1.8。
安装Drill
在官网下载tar包并解压即可,linux和windows都是如此。
注意:drill要求java版本是8或以上。
命令行使用Drill
最简单的方式是用embedded模式启动drill(启动后可以在浏览器里访问 http://localhost:8047 来管理drill):
bin/drill-embedded
这样就以嵌入模式启动了drill服务并同时进入了内置的sqline命令行。如果drill服务已经启动,则可以这样进入sqline命令行(参考):
bin/sqline -u jdbc:drill:drillbit=localhost
作为例子,用SQL语法查询一下drill自带的数据(命令行里的cp表示classpath,注意查询语句最后要加分号结尾):
apache drill> SELECT * FROM cp.`employee.json` LIMIT 3;
查询任意数据文件的内容:
apache drill> SELECT * FROM dfs.`/home/hao/apache-drill-1.16.0/sample-data/region.parquet`;
退出命令行用!quit
。
配置和查看Drill参数
如果要永久性修改参数值,需要修改$DRILL_HOME/conf/drill-override.conf文件(见文档);SET、RESET命令可以在当前session里修改参数值(文档)。
配置参数:
SET `store.parquet.block-size` = 536870912
重置参数为缺省值:
RESET `store.parquet.block-size`
查看参数:
select * from sys.options where name = 'store.parquet.block-size'
在java代码里使用Drill
下面是在java代码里使用Drill的例子代码,要注意的一点是,JDBC的URL是jdbc:drill:drillbit=localhost
,而不是很多教程上说的jdbc:drill:zk=localhost
:
package com.acme;
import java.sql.*;
public class DrillJDBCExample {
static final String JDBC_DRIVER = "org.apache.drill.jdbc.Driver";
//static final String DB_URL = "jdbc:drill:zk=localhost:2181";
static final String DB_URL = "jdbc:drill:drillbit=localhost"; //for embedded mode installation
static final String USER = "admin";
static final String PASS = "admin";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL,USER,PASS);
stmt = conn.createStatement();
/* Perform a select on data in the classpath storage plugin. */
String sql = "select employee_id,first_name,last_name from cp.`employee.json`";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("employee_id");
String first = rs.getString("first_name");
String last = rs.getString("last_name");
System.out.print("ID: " + id);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch(Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
try{
if(stmt!=null)
stmt.close();
} catch(SQLException se2) {
}
try {
if(conn!=null)
conn.close();
} catch(SQLException se) {
se.printStackTrace();
}
}
}
}
让Drill访问数据库
根据要访问的数据库的不同,需要为Drill添加相应的驱动,方法见RDBMS Storage Plugin
利用Drill将csv格式转换为parquet格式
原理是在drill里创建一张格式为parquet的表,该表的路径(下例中的/parquet1)对应的是磁盘上的一个目录。
ALTER SESSION SET `store.format`='parquet';
ALTER SESSION SET `store.parquet.compression` = 'snappy';
CREATE TABLE dfs.tmp.`/parquet1` AS
SELECT * FROM dfs.`/my/csv/file.csv`;
让drill支持.zip、.arc压缩格式
(暂缺)
参考资料
Drill in 10 Minutes
How to convert a csv file to parquet