hadoop—使用java语句类的单个execute()方法执行多个配置单元查询

uhry853o  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(341)

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

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;");

谢谢。

cwdobuhd

cwdobuhd1#

答案是否定的。不能在一个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]);
}

这也适用于多个配置单元sql查询,如select、insert、delete等,。根据sql语句结果集打印或填充到jtable中。
注意:execute()、executeupdate()和executequery()不一样。根据sql语句进行选择。
execute()-如果查询返回的第一个对象是resultset对象,则返回true。
executeupdate()-返回一个整数,表示受sql语句影响的行数。
executequery()-返回一个resultset对象。
参考:docs.oracle.com/javase
hth公司

相关问题