我使用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;");
感谢。
答案 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对象。
HTH