Hiveql - как использовать экранированные ключевые слова в предложении where?

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

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

SELECT ... FROM ... WHERE `table` = 'something' AND year = 2018

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

bash: table: command not found

Connecting to jdbc:hive2://localhost:10000

Connected to: Apache Hive (version 2.3.2-amzn-0)

Driver: Hive JDBC (version 2.3.2-amzn-0)

Transaction isolation: TRANSACTION_REPEATABLE_READ

. . . . . . . . . . . . . . . . Error: Error while compiling statement: FAILED: ParseException line 1:242 cannot recognize input near '=' ''something'' 'and' in expression specification (state=42000,code=40000)

Closing: 0: jdbc:hive2://localhost:10000

ExitValue: 1

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

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

В какой инструмент вы "запускаете" этот SQL-запрос, и bash пытается его проанализировать?!?!?

Samson Scharfrichter 10.08.2018 21:42

Билайн звонил с R-скрипта. Это безумие, я знаю ... Магия проектов "как есть" ...

MiguelFCerdan 10.08.2018 21:57

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

Samson Scharfrichter 11.08.2018 23:11

Долгосрочное исправление: используйте RJDBC для выполнения запросов Hive прямо из R.

Samson Scharfrichter 11.08.2018 23:13

@SamsonScharfrichter, краткосрочный обходной путь двойного обратного слеша сработал для меня как шарм. Спасибо! Я отправлю ваш ответ как правильный, если вы не против.

MiguelFCerdan 21.09.2018 13:59
0
5
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Short-term workaround: try escaping back-ticks i.e. \`table\` or maybe \\`table\\`

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

Вам нужно снова избежать экранирования ... из-за синтаксиса Markdown, используемого S.O.

Samson Scharfrichter 21.09.2018 17:13

Собственно, было вдвое больше! Четыре обратных слеша во втором случае, забавно! Спасибо, что заметили!

MiguelFCerdan 21.09.2018 17:16

Другие вопросы по теме