2016-06-07 2 views
3

Я использую Java API для доступа к HiveServer2, у меня есть требование выполнения нескольких запросов на улей в одном вызове execute() метод класса операторов. Возможно ли отправить несколько запросов куста в один вызов на метод execute(). У меня есть улое свойство, чтобы установить, как:Выполнять несколько запросов куста, используя единственный метод execute() класса statement с помощью java

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


Спасибо.

ответ

2

Ответ большой НЕТ. Вы не можете выполнять несколько запросов в одном методе execute(). Почему вы не можете сделать то же самое в цикле, как показано ниже

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 запросов слишком, как выбирать, вставлять, удалять и т.д. ,. на основе результатов sql-запроса, напечатанных или заполненных в JTable.

Примечание: execute(), executeUpdate() и executeQuery() не совпадают. Выберите на основе вашего оператора sql.

execute() - возвращает true, если первый объект, возвращаемый запросом, - объект ResultSet.

executeUpdate() - Возвращает целое число, представляющее число строк , на которые влияет инструкция SQL.

executeQuery() - возвращает один объект ResultSet.

Ссылка: docs.oracle.com/javase

НТН