在apachedrill的wiki中,我只能看到通过sqlline客户端运行的查询。除了restapi之外,在drill中运行查询还有什么编程方法吗?有样品或指针吗?或者它与使用jdbc驱动程序来运行sql查询等效吗?
gz5pxeao1#
就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; } }
vvppvyoh2#
除了可以使用的sqlline之外钻取web ui以运行查询。在本地(嵌入式)安装上,默认端口为8047。或者下载和配置mapr的odbc驱动程序,它来将钻资源管理器(另一个用户界面)可以使用。https://drill.apache.org/docs/installing-the-driver-on-windows/或者配置任何其他与odbc一起工作的工具(我已经配置teradata sql assistant,以便使用mapr odbc驱动程序进行钻取)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类)
mctunoxg3#
您可以使用drill jdbc驱动程序,其文档如下:http://drill.apache.org/docs/using-the-jdbc-driver/请注意,如果使用maven构建java程序,则需要在本地安装钻取依赖项:
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
举个例子:https://github.com/vicenteg/drilljdbcexample
pjngdqdw4#
Other way to execute query by Calling REST API in Apache Drill
公共类requestquery{
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); } }
4条答案
按热度按时间gz5pxeao1#
就jdbc部分而言,我在java代码中使用了这样的东西-
vvppvyoh2#
除了可以使用的sqlline之外
钻取web ui以运行查询。在本地(嵌入式)安装上,默认端口为8047。
或者下载和配置mapr的odbc驱动程序,它来将钻资源管理器(另一个用户界面)可以使用。https://drill.apache.org/docs/installing-the-driver-on-windows/
或者配置任何其他与odbc一起工作的工具(我已经配置teradata sql assistant,以便使用mapr odbc驱动程序进行钻取)
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类)
mctunoxg3#
您可以使用drill jdbc驱动程序,其文档如下:http://drill.apache.org/docs/using-the-jdbc-driver/
请注意,如果使用maven构建java程序,则需要在本地安装钻取依赖项:
举个例子:https://github.com/vicenteg/drilljdbcexample
pjngdqdw4#
公共类requestquery{
}