HiveQL — Как использовать экранированные ключевые слова в предложении WHERE?

Я пытаюсь запросить таблицу, выбирая только те случаи, которые соответствуют определенному условию. Это запрос, вызываемый из Beeline, внутри R-скрипта. Проблема в том, что поле, которое должно соответствовать этому условию, имеет зарезервированное слово в качестве имени столбца: «таблица».

Всякий раз, когда я запускаю это в кластере AWS-EMR:

ВЫБЕРИТЕ... ИЗ... ГДЕ `таблица` = 'что-то' И год = 2018

Я получаю следующую ошибку:

bash: таблица: команда не найдена

Подключение к jdbc:hive2://localhost:10000

Подключено к: Apache Hive (версия 2.3.2-amzn-0)

Драйвер: Hive JDBC (версия 2.3.2-amzn-0)

Изоляция транзакции: TRANSACTION_REPEATABLE_READ

. . . . . . . . . . . . . . . . Ошибка: ошибка при компиляции оператора: FAILED: строка ParseException 1:242 не может распознать ввод рядом с '=' ''something'' 'and' в спецификации выражения (state=42000, code=40000)

Закрытие: 0: jdbc:hive2://localhost:10000

Выходное значение: 1

Оба блока, выделенные жирным шрифтом, должны быть закреплены. Обратите внимание, что ключевое слово «таблица» уже экранировано обратными кавычками.

Я искал в Интернете, но до сих пор не могу найти подходящее решение. Любая помощь будет оценена по достоинству.


person MiguelFCerdan    schedule 10.08.2018    source источник
comment
В какой инструмент вы запускаете этот SQL-запрос, который bash пытается разобрать SQL?!?!?   -  person Samson Scharfrichter    schedule 10.08.2018
comment
Билайн звонил из R-скрипта. Это безумие, я знаю... Магия проектов "как есть"...   -  person MiguelFCerdan    schedule 10.08.2018
comment
Краткосрочный обходной путь: попробуйте экранировать обратные галочки, т. е. \`table\` или, может быть, \\`table\\`   -  person Samson Scharfrichter    schedule 12.08.2018
comment
Долгосрочное исправление: используйте RJDBC для запуска запросов Hive прямо из R.   -  person Samson Scharfrichter    schedule 12.08.2018
comment
@SamsonScharfrichter, краткосрочный обходной путь двойной обратной косой черты сработал для меня как шарм. Спасибо! Я опубликую ваш ответ как правильный, если вы не возражаете.   -  person MiguelFCerdan    schedule 21.09.2018


Ответы (1)


Как отметил @SamsonScharfrichter в комментариях:

Краткосрочный обходной путь: попробуйте экранировать обратные кавычки, например \`table\` или, может быть, \\`table\\`

Это сработало для моей проблемы.

person MiguelFCerdan    schedule 21.09.2018
comment
Вам нужно еще раз избежать экранирования ... из-за синтаксиса Markdown, используемого S.O. - person Samson Scharfrichter; 21.09.2018
comment
На самом деле, это было в два раза больше! Четыре обратных слэша во втором случае, забавно! Спасибо, что заметили! - person MiguelFCerdan; 21.09.2018