Проверить синтаксис Hive HQL? - PullRequest
6 голосов
/ 16 ноября 2011

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

Ответы [ 3 ]

6 голосов
/ 18 ноября 2011

Да, есть!

На самом деле это довольно легко.

Шаги:

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

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

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

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

В ruby ​​это выглядит так:

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

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

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

4 голосов
/ 29 ноября 2012

"описать выбор * из предела категорий 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 выдастисключение, если у вас есть синтаксическая ошибка или если запрашиваемая таблица / столбец не существует.Если все в порядке, исключение не выдается, но также вы не получите никаких результатов, что не является злом

0 голосов
/ 03 августа 2016

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

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

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

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

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 и продолжить.

...