Проверить синтаксис Hive HQL?

86
7

Существует ли программный способ проверки утверждений HiveQL для ошибок, таких как основные синтаксические ошибки? Я бы хотел проверить инструкции перед отправкой их на Elastic Map Reduce, чтобы сохранить время отладки.

спросил(а) 2011-11-16T20:13:00+04:00 8 лет, 8 месяцев назад
1
Решение
100

Да, есть!


Это довольно легко.


Шаги:


1. Получите на свой язык клиент-уловщик.


Я в рубине, поэтому я использую эту оболочку - https://github.com/forward/rbhive (gem install rbhive)


Если вы не находитесь в рубине, вы можете загрузить источник улья и запустить бережливость во включенных файлах конфигурации экономии, чтобы генерировать код клиента на большинстве языков.

2. Подключитесь к улей на порт 10001 и выполните запрос описания


В рубине это выглядит так:


RBHive.connect(host, port) do |connection|
connection.fetch("describe select * from categories limit 10")
end

Если запрос недействителен, клиент будет генерировать исключение с подробностями о том, почему синтаксис недействителен. Описать вернет вам дерево запросов, если синтаксис IS действителен (в этом случае вы можете игнорировать)


Надеюсь, что это поможет.

ответил(а) 2011-11-18T02:36:00+04:00 8 лет, 7 месяцев назад
86

"описать select * из категории limit 10" не работает для меня.


Возможно, это связано с используемой версией Hive.
Я использую Hive 0.8.1.4


Проведя некоторое исследование, я нашел аналогичное решение для одного Мэтью Рэтбоуна:


Hive предоставляет команду EXPLAIN, которая отображает план выполнения запроса. Синтаксис этого оператора выглядит следующим образом:


Запрос EXPLAIN [EXTENDED]

Итак, для всех, кто также использует rbhive:


RBHive.connect(host, port) do |c|
c.execute("explain select * from categories limit 10")
end

Обратите внимание, что вам нужно подставить c.fetch с помощью c.execute, так как объяснение не вернет никаких результатов, если оно выполнено успешно. = > rbhive выдаст исключение независимо от правильности вашего синтаксиса.


execute выдаст исключение, если у вас есть синтаксическая ошибка или если запрашиваемая таблица/столбец не существует. Если все в порядке, исключение не исключено, но вы также не получите никаких результатов, что не является злой вещью.

ответил(а) 2012-11-29T20:00:00+04:00 7 лет, 7 месяцев назад
40

В последней версии hive 2.0 поставляется с инструментом hplsql, который позволяет нам проверять команды куста, фактически не запуская их.


Конфигурация:
добавьте ниже XML в папку hive/conf и перезапустите куст


https://github.com/apache/hive/blob/master/hplsql/src/main/resources/hplsql-site.xml


Чтобы запустить hplsql и проверить запрос, используйте следующую команду:
Чтобы проверить запрос Singe


hplsql -offline -trace -e 'select * from sample'



(или)
Чтобы проверить весь файл


hplsql -offline -trace -f samplehql.sql



Если синтаксис запроса верен, ответ от hplsql будет примерно таким:


Ln:1 SELECT // type
Ln:1 select * from sample // command
Ln:1 Not executed - offline mode set // execution status

если синтаксис запроса неверен, проблема с синтаксисом в запросе будет сообщена


Если версия улья более старая, нам нужно вручную поместить банки hplsql внутри hive/lib и продолжить.

ответил(а) 2016-08-03T13:05:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема