通过 Java 的 Apache Drill 连接
Apache Drill connection through Java
在 Apache Drill 的 Wiki 中,我只能通过 SqlLine 客户端看到查询 运行ning。除了 REST API 之外,在 Drill 中是否有任何编程方式 运行 查询?有任何示例或指示吗?
或者它是否等同于使用 JDBC 驱动程序来 运行 SQL 查询?
除了 sqlline 你还可以使用
- Drill Web UI 到 运行 查询。本地默认端口为 8047
(嵌入式)安装。
- 或者下载并配置MapR ODBC
驱动程序,它会随附 Drill Explorer(另一个 UI),它可以是
用过的。
https://drill.apache.org/docs/installing-the-driver-on-windows/
- 或者配置任何其他适用于 ODBC 的工具(我已经配置
Teradata SQL Assistant to Drill using MapR ODBC driver)
- JDBC 集成 - 使用 SQuirrel 或 DBVisualizer,您可以通过它们 运行
查询。
https://drill.apache.org/docs/using-jdbc-with-squirrel-on-windows/
- 以编程方式将通过 JDBC。 ( 使用
drill-jdbc-all-1.0.0jar 和 org.apache.drill.jdbc.Driver class)
您可以使用 Drill JDBC 驱动程序,它记录在此处:http://drill.apache.org/docs/using-the-jdbc-driver/
请注意,如果您使用 Maven 构建 Java 程序,则需要在本地安装 Drill 依赖项:
mvn install:install-file -Dfile=/opt/apache-drill-1.0.0/jars/drill-java-exec-1.0.0-rebuffed.jar -DgroupId=org.apache.drill.exec -DartifactId=drill-java-exec -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=/opt/apache-drill-1.0.0/jars/drill-common-1.0.0-rebuffed.jar -DgroupId=org.apache.drill -DartifactId=drill-common -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true
只是为了 JDBC 部分,我在我的 Java 代码中使用了类似的东西 -
-------------
Dependency
-------------
<dependency>
<groupId>org.apache.drill.exec</groupId>
<artifactId>drill-jdbc</artifactId>
<version>1.1.0</version>
</dependency>
----------
Testcase
----------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import org.apache.drill.exec.ExecConstants;
import org.apache.drill.jdbc.Driver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestDrillJdbcDriver {
/* Drill JDBC Uri for local/cluster zookeeper */
public static final String DRILL_JDBC_LOCAL_URI = "jdbc:drill:zk=local";
/* Sample query used by Drill */
public static final String DRILL_SAMPLE_QUERY = "SELECT * FROM cp.`employee.json` LIMIT 20";
@Test
public void testDrillJdbcDriver() throws Exception {
Connection con = null;
try {
con = new Driver().connect(DRILL_JDBC_LOCAL_URI, getDefaultProperties());
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(DRILL_SAMPLE_QUERY);
int count = 0;
while (rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
count++;
}
Assert.assertEquals(count, 20, "Twenty rows were expected.");
} catch (Exception ex) {
System.out.println(ex);
} finally {
if (con != null) {
con.close();
}
}
}
public static Properties getDefaultProperties() {
final Properties properties = new Properties();
properties.setProperty(ExecConstants.HTTP_ENABLE, "false");
return properties;
}
}
Other way to execute query by Calling REST API in Apache Drill
public class 请求查询 {
private String queryType;
private String query;
public String getQueryType() {
return queryType;
}
public void setQueryType(String queryType) {
this.queryType = queryType;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ramyam.eis.apache.drill.api.model.RequestQuery;
public class RestAPI {
private static Log logger = LogFactory.getLog(RestAPI.class);
public static void main(String[] args) {
getQueryResponce();
}
private static void getQueryResponce(){
Client client = null;
WebTarget target = null;
try {
logger.info("---------Started execution-----------");
RequestQuery query = new RequestQuery();
query.setQueryType("SQL");
//MySQL
//query.setQuery("SELECT * FROM MYSQL.foodmart.collections");
//query.setQuery("SELECT * FROM MYSQL.foodmart.collections limit 100");
//query.setQuery("SELECT payment_due_from,NumItems FROM MYSQL.foodmart.collections limit 10");
//query.setQuery("SELECT count(SPORTS_PREFERENCE) FROM MYSQL.foodmart.collections group by SPORTS_PREFERENCE");
//query.setQuery("SELECT DISTINCT payment_due_from FROM MYSQL.foodmart.collections ");
//Mongo DB
//query.setQuery("select * from mongo.apache_drill.pt_BMS_preferences_data where SPORTS_PREFERENCE = 'Cricket' limit 10");
//query.setQuery("SELECT COUNT(SPORTS_PREFERENCE) FROM mongo.apache_drill.pt_BMS_preferences_data GROUP BY SPORTS_PREFERENCE");
query.setQuery("SELECT DISTINCT(SPORTS_PREFERENCE) FROM mongo.apache_drill.pt_BMS_preferences_data ");
client = ClientBuilder.newClient();
target = client.target("http://localhost:8047/query.json");
//target = target.path(path);
Response response = target.request().accept(MediaType.APPLICATION_JSON)
.post(Entity.json(query), Response.class);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
String string = response.readEntity(String.class);
logger.info(query.getQueryType()+"->"+query.getQuery());
logger.info("Responce:\n"+string);
logger.info("---------End execution-----------");
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(),e);
}
}
在 Apache Drill 的 Wiki 中,我只能通过 SqlLine 客户端看到查询 运行ning。除了 REST API 之外,在 Drill 中是否有任何编程方式 运行 查询?有任何示例或指示吗?
或者它是否等同于使用 JDBC 驱动程序来 运行 SQL 查询?
除了 sqlline 你还可以使用
- Drill Web UI 到 运行 查询。本地默认端口为 8047 (嵌入式)安装。
- 或者下载并配置MapR ODBC 驱动程序,它会随附 Drill Explorer(另一个 UI),它可以是 用过的。 https://drill.apache.org/docs/installing-the-driver-on-windows/
- 或者配置任何其他适用于 ODBC 的工具(我已经配置 Teradata SQL Assistant to Drill using MapR ODBC driver)
- JDBC 集成 - 使用 SQuirrel 或 DBVisualizer,您可以通过它们 运行 查询。 https://drill.apache.org/docs/using-jdbc-with-squirrel-on-windows/
- 以编程方式将通过 JDBC。 ( 使用 drill-jdbc-all-1.0.0jar 和 org.apache.drill.jdbc.Driver class)
您可以使用 Drill JDBC 驱动程序,它记录在此处:http://drill.apache.org/docs/using-the-jdbc-driver/
请注意,如果您使用 Maven 构建 Java 程序,则需要在本地安装 Drill 依赖项:
mvn install:install-file -Dfile=/opt/apache-drill-1.0.0/jars/drill-java-exec-1.0.0-rebuffed.jar -DgroupId=org.apache.drill.exec -DartifactId=drill-java-exec -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=/opt/apache-drill-1.0.0/jars/drill-common-1.0.0-rebuffed.jar -DgroupId=org.apache.drill -DartifactId=drill-common -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true
只是为了 JDBC 部分,我在我的 Java 代码中使用了类似的东西 -
-------------
Dependency
-------------
<dependency>
<groupId>org.apache.drill.exec</groupId>
<artifactId>drill-jdbc</artifactId>
<version>1.1.0</version>
</dependency>
----------
Testcase
----------
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import org.apache.drill.exec.ExecConstants;
import org.apache.drill.jdbc.Driver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestDrillJdbcDriver {
/* Drill JDBC Uri for local/cluster zookeeper */
public static final String DRILL_JDBC_LOCAL_URI = "jdbc:drill:zk=local";
/* Sample query used by Drill */
public static final String DRILL_SAMPLE_QUERY = "SELECT * FROM cp.`employee.json` LIMIT 20";
@Test
public void testDrillJdbcDriver() throws Exception {
Connection con = null;
try {
con = new Driver().connect(DRILL_JDBC_LOCAL_URI, getDefaultProperties());
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(DRILL_SAMPLE_QUERY);
int count = 0;
while (rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
count++;
}
Assert.assertEquals(count, 20, "Twenty rows were expected.");
} catch (Exception ex) {
System.out.println(ex);
} finally {
if (con != null) {
con.close();
}
}
}
public static Properties getDefaultProperties() {
final Properties properties = new Properties();
properties.setProperty(ExecConstants.HTTP_ENABLE, "false");
return properties;
}
}
Other way to execute query by Calling REST API in Apache Drill
public class 请求查询 {
private String queryType;
private String query;
public String getQueryType() {
return queryType;
}
public void setQueryType(String queryType) {
this.queryType = queryType;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ramyam.eis.apache.drill.api.model.RequestQuery;
public class RestAPI {
private static Log logger = LogFactory.getLog(RestAPI.class);
public static void main(String[] args) {
getQueryResponce();
}
private static void getQueryResponce(){
Client client = null;
WebTarget target = null;
try {
logger.info("---------Started execution-----------");
RequestQuery query = new RequestQuery();
query.setQueryType("SQL");
//MySQL
//query.setQuery("SELECT * FROM MYSQL.foodmart.collections");
//query.setQuery("SELECT * FROM MYSQL.foodmart.collections limit 100");
//query.setQuery("SELECT payment_due_from,NumItems FROM MYSQL.foodmart.collections limit 10");
//query.setQuery("SELECT count(SPORTS_PREFERENCE) FROM MYSQL.foodmart.collections group by SPORTS_PREFERENCE");
//query.setQuery("SELECT DISTINCT payment_due_from FROM MYSQL.foodmart.collections ");
//Mongo DB
//query.setQuery("select * from mongo.apache_drill.pt_BMS_preferences_data where SPORTS_PREFERENCE = 'Cricket' limit 10");
//query.setQuery("SELECT COUNT(SPORTS_PREFERENCE) FROM mongo.apache_drill.pt_BMS_preferences_data GROUP BY SPORTS_PREFERENCE");
query.setQuery("SELECT DISTINCT(SPORTS_PREFERENCE) FROM mongo.apache_drill.pt_BMS_preferences_data ");
client = ClientBuilder.newClient();
target = client.target("http://localhost:8047/query.json");
//target = target.path(path);
Response response = target.request().accept(MediaType.APPLICATION_JSON)
.post(Entity.json(query), Response.class);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
String string = response.readEntity(String.class);
logger.info(query.getQueryType()+"->"+query.getQuery());
logger.info("Responce:\n"+string);
logger.info("---------End execution-----------");
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(),e);
}
}