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



我正在使用Java API访问HiveServer2,我需要在单个调用中执行多个Hive查询来执行语句类的execute()方法。是否可以在一次调用 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;");


谢谢。

答案是很大的否定。不能在单个 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() - 如果查询返回的第一个对象是 一个结果集对象。

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

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

参考: docs.oracle.com/javase

最新更新