使用Java的Statement类的单个execute()方法执行多个Hive查询。

4

我正在使用Java API访问HiveServer2,我需要在statements类的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个回答

3

答案是否定的。你不能在一个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() - 如果查询返回的第一个对象是ResultSet对象,则返回true。
executeUpdate() - 返回表示受SQL语句影响的行数的整数。
executeQuery() - 返回一个ResultSet对象。
参考资料:docs.oracle.com/javase 希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接