Проверка запроса Hive из службы Java

#java #hadoop #hive

Вопрос:

Я хочу проверить запрос Hive с помощью класса службы Java. Если таблицы нет в hive, то она должна вернуть какой-то статус, что она неверна. Например, если запрос «select * from example_table;», то после проверки это должно вернуть какое-то сообщение об ошибке. И если запрос «выберите * из real_table, где имя=’abc’;», то это должно вернуть OK или что-то в этом роде.

В настоящее время я могу запрашивать ProcessBuilder и обрабатывать поток:

     ProcessBuilder hiveProcessBuilder = new ProcessBuilder("hive", "-e",
            "select * from real_table where name='abc'");
    Process hiveProcess = hiveProcessBuilder.start();
    // other logics
 

Моя текущая проблема заключается в том, что если этот запрос «real_table» действителен, то он запускает задание по сокращению карты, а затем возвращает результат, и тогда я могу обработать поток и выяснить, является ли он действительным или нет. Весь этот процесс отнимает много времени. Предоставляет ли hive какой-либо метод для проверки запроса без запуска задания сокращения карты.

Комментарии:

1. Возможно, вы можете добавить «объяснить» к своему заявлению SQL, например explain select * from some_table where... , и отправить его. Вы получите ненулевой код возврата, если что-либо в вашем заявлении неверно (имя таблицы, выражения, синтаксис и т.д.). Если состояние ошибки > 0, вы можете записать сообщение об ошибке, чтобы получить более подробную информацию.

2. @mazaneicha Спасибо вам за ответ. Объясните, что запрос действительно работает как заклинание.

3. Рад слышать, что у вас все получилось 🙂