我正在使用 Java API 访问 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;");
谢谢。
最佳答案
答案很明显。您不能在单个 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() - Returns true if the first object that the query returns is a ResultSet object.
executeUpdate() - Returns an integer representing the number of rows affected by the SQL statement.
executeQuery() - Returns one ResultSet object.
HTH
关于java - 使用 java 使用语句类的单个 execute() 方法执行多个配置单元查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678990/