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

时间:2016-06-07 12:09:35

标签: java hadoop hive hiveql hadoop2

我使用Java API访问HiveServer2,我要求在单个调用语句类的 execute()方法时执行多个hive查询。是否可以在对 execute()方法的一次调用中提交多个hive查询。我将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 个答案:

答案 0 :(得分:2)

答案很重要。您不能在单个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查询,如select,insert,delete等。基于sql语句结果集打印或填充JTable。

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

  

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

     

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

     

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

参考:docs.oracle.com/javase

HTH