Hive ParseException - не может распознать ввод рядом с «концом» «строки»

Я получаю следующую ошибку при попытке создать таблицу Hive из существующей таблицы DynamoDB:

NoViableAltException(88@[])
at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:9123)
at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:30750)
...more stack trace...
FAILED: ParseException line 1:77 cannot recognize input near 'end' 'string' ',' in column specification

Запрос выглядит так (упрощено для защиты невиновных):

CREATE EXTERNAL TABLE moveProjects (cid string, end string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");

По сути, я пытаюсь создать таблицу Hive, содержащую содержимое таблицы Projects DynamoDB, но оператор создания выдает ошибку синтаксического анализа из Hive/Hadoop.


person Jens Roland    schedule 05.09.2013    source источник


Ответы (4)


Проблема на самом деле не является синтаксической ошибкой, Hive ParseException просто вызвано зарезервированным ключевым словом в Hive (в данном случае end).

Решение: используйте обратные кавычки вокруг имени столбца-нарушителя:

CREATE EXTERNAL TABLE moveProjects (cid string, `end` string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");

С добавленными обратными кавычками вокруг end запрос работает, как и ожидалось.

Зарезервированные слова в Amazon Hive (по состоянию на февраль 2013 г.):

ЕСЛИ, ИМЕЮЩИЙ, ГДЕ, ВЫБЕРИТЕ, УНИКАЛЬНОЕ СОЕДИНЕНИЕ, ПРИСОЕДИНЯЙТЕСЬ, ВКЛ, ПРЕОБРАЗОВАНИЕ, КАРТА, УМЕНЬШЕНИЕ, ТАБЛИЦА, ПРИВЕДЕНИЕ, ФУНКЦИЯ, РАСШИРЕННЫЙ, СЛУЧАЙ, КОГДА, ТОГДА, ИНАЧЕ, КОНЕЦ, БАЗА ДАННЫХ, КРЕСТ

Источник: Этот билет Hive из трекера Facebook Phabricator

person Jens Roland    schedule 05.09.2013
comment
Хорошее наблюдение. Спасибо. - person Tariq; 05.09.2013
comment
Я встречаю аналогичную проблему при использовании столбца _1. изменение на другое имя решает проблему. Спасибо за ответ. - person Rockie Yang; 01.07.2016
comment
div был еще одним ключевым словом. Заменил обратными кавычками и начал работать.. !! Сообщение об ошибке: FAILED: строка ParseException 52:16 не может распознать ввод рядом с 'div' 'STRING' ',' в спецификации столбца - person MoG; 17.09.2019

Вы всегда можете избежать зарезервированного ключевого слова, если хотите, чтобы ваш запрос работал!!

Просто замените end на `end`.

Вот список зарезервированных ключевых слов https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

CREATE EXTERNAL TABLE moveProjects (cid string, `end` string, category string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "Projects",
    "dynamodb.column.mapping" = "cid:cid,end:end,category:category");
person naren    schedule 04.10.2018

Я использовал /Date=20161003 в пути к папке, выполняя перезапись вставки, и это не удалось. Я изменил его на /Dt=20161003, и это сработало.

person Sat    schedule 03.10.2016
comment
Вы знаете, как мы можем разбить / 20161003 ? - person Masih; 03.04.2017

Я решил эту проблему, выполнив следующие действия:

вставить в my_table(my_field_0, ..., my_field_n) значения(my_value_0, ..., my_value_n)

person Dieudonné    schedule 05.02.2020