#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. Рад слышать, что у вас все получилось 🙂