使用java语句类的单个execute()方法执行多个hive查询

Posted

技术标签:

【中文标题】使用java语句类的单个execute()方法执行多个hive查询【英文标题】:Execute multiple hive queries using single execute() method of statement class using java 【发布时间】:2016-06-07 12:09:35 【问题描述】:

我正在使用 Java API 访问 HiveServer2,我需要在对 statements 类的 execute() 方法的一次调用中执行多个 hive 查询。是否可以在一次调用 execute() 方法时提交多个 hive 查询。我有配置单元属性设置为:

SET hive.exec.max.created.files=200000;
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET hive.exec.dynamic.partition = true; 
SET hive.exec.dynamic.partition.mode = nonstrict; 
set hive.exec.max.dynamic.partitions=5000;
set hive.exec.max.dynamic.partitions.pernode=5000; 
              .
              .
Statement stmt = con.createStatement();
stmt.execute("SET hive.exec.max.created.files=200000");
              .
              .

为此,我现在使用 execute() 方法一次设置一个属性。有什么办法让我可以通过在一次调用 execute() 方法中执行上述所有语句来设置所有这些属性。 预期:

stmt.execute("SET hive.exec.max.created.files=200000;
    SET hive.exec.dynamic.partition = true; 
    SET hive.exec.dynamic.partition.mode = nonstrict; 
    set hive.exec.max.dynamic.partitions=5000;
    set hive.exec.max.dynamic.partitions.pernode=5000;");

谢谢。

【问题讨论】:

【参考方案1】:

答案是大不。您不能在单个 execute() 方法中执行多个查询。为什么你不能在下面的 for 循环中做同样的事情

String[] queries = new String[] "SET hive.exec.dynamic.partition = true", "set hive.exec.max.dynamic.partitions=5000"; //and so on

Statement stmt = con.createStatement();

for(int i = 0; i < queries.length; i++)
   stmt.execute(queries[i]);

这也适用于多个 hive sql 查询,例如选择、插入、删除等。基于 sql 语句结果集打印或填充到 JTable 中。

注意:execute()、executeUpdate() 和 executeQuery() 不一样。根据你的sql语句选择。

execute() - 如果查询返回的第一个对象是,则返回 true 一个 ResultSet 对象。

executeUpdate() - 返回一个表示行数的整数 受 SQL 语句影响。

executeQuery() - 返回一个 ResultSet 对象。

参考:docs.oracle.com/javase

HTH

【讨论】:

以上是关于使用java语句类的单个execute()方法执行多个hive查询的主要内容,如果未能解决你的问题,请参考以下文章

:Using Parallel Execution 读书笔记

:Using Parallel Execution 读书笔记

executeexecuteQuery和executeUpdate之间的区别

executeexecuteQuery和executeUpdate之间的区别

JDBC中executeexecuteQuery和executeUpdate的区别

转载----executeexecuteQuery和executeUpdate之间的区别