Ошибка куста: отсутствует EOF в парсеисключении

Я не уверен, что я делаю неправильно здесь:

hive> CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
      stored as orc 
      tblproperties ("orc.compress"="NONE") 
      LOCATION "/user/hive/test_table";

      FAILED: ParseException line 1:107 missing EOF at 'LOCATION' near ')'

в то время как следующий запрос работает отлично:

hive>  CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
       stored as orc 
       tblproperties ("orc.compress"="NONE");
       OK
       Time taken: 0.106 seconds

Я что-то пропустил здесь. Любые указатели помогут. Спасибо!


person lex    schedule 17.03.2014    source источник


Ответы (6)


Попробуйте поставить «РАСПОЛОЖЕНИЕ» перед «tblproperties», как показано ниже, у меня сработало.

CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
  stored as orc 
  LOCATION "/user/hive/test_table"
  tblproperties ("orc.compress"="NONE");

Кажется, даже пример SQL из книги «Programming Hive» имеет неправильный порядок. Пожалуйста, обратитесь к официальному определению команды создания таблицы:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

person Haiying Wang    schedule 22.06.2015
comment
Тоже работал... Спасибо - person minhas23; 03.09.2015

@Haiying Wang указал, что LOCATION нужно ставить перед tblproperties.

Но я думаю, что ошибка также возникает, когда location указано выше stored as.

Лучше придерживаться правильного порядка:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
     [STORED AS DIRECTORIES]
  [
   [ROW FORMAT row_format] 
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

См.: Hive Create Table

person Ani Menon    schedule 15.03.2018

Проверьте этот пост:

Загрузка данных из .txt файл в таблицу сохраняется как ORC в Hive

И проверьте наличие исходных файлов в указанном каталоге /user/hive/test_table. Если файлы имеют формат .txt или какой-либо другой формат non ORC, вы можете выполнить шаги, описанные в сообщении выше, чтобы устранить ошибку.

person Neels    schedule 18.03.2014
comment
Спасибо за ответ, Neels, но я столкнулся с проблемой при создании таблицы. Мне было интересно, неправильный ли синтаксис или есть другое условие, которое мне нужно выполнить в виде предложения. Поправьте меня, если я ошибаюсь, атрибут местоположения предназначен для явного указания, где хранить данные таблицы. - person lex; 19.03.2014
comment
Можете ли вы попробовать, если что-то вроде этого работает для вас CREATE TABLE default.testtbl(int1 INT,string1 STRING) stored as TEXTFILE tblproperties ("orc.compress"="NONE") LOCATION "/user/hive/test_table" - person Neels; 20.03.2014
comment
Получена та же ошибка: ‹pre›‹code›hive› CREATE TABLE default.testtbl(int1 INT,string1 STRING) хранится как TEXTFILE tblproperties (orc.compress=NONE) LOCATION /user/hive/test_table; FAILED: строка ParseException 1:111 отсутствует EOF в «РАСПОЛОЖЕНИИ» рядом с «)» hive› ‹/code›‹/pre› - person lex; 29.03.2014
comment
Извините за не отформатированный комментарий выше. Редактор не дает мне редактировать текст. - person lex; 29.03.2014

В строке ParseException lineNumber отсутствует EOF в '.' рядом с 'schemaName':

Получил указанную выше ошибку при попытке выполнить следующую команду из сценария Linux для усечения таблицы куста.

dse -u имя пользователя -p пароль hive -e "обрезать таблицу keyspace.tablename;"

Исправлено: необходимо разделить команды в строке скрипта следующим образом:

dse -u имя пользователя -p пароль hive -e "использовать пространство ключей; обрезать таблицу пространство ключей.имя_таблицы;"

Удачного кодирования!

person Arunchunaivendan    schedule 03.06.2016

Получил ту же ошибку при создании таблицы в улье.

Я использовал команду drop, чтобы удалить таблицу, а затем снова запустил команду создания таблицы.

Работал на меня.

person Cyrus    schedule 22.03.2017

Если вы видите эту ошибку при запуске HiveQL из файла с помощью команды «hive -f file.hql». И то, что он указывает на первую строку вашего запроса, определенно связано с забытой точкой с запятой (;) для предыдущего запроса. Поскольку синтаксический анализатор ищет точку с запятой (;) как признак конца для каждого запроса. Например:

УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ. ХРАНИТСЯ В РАСПОЛОЖЕНИИ ТЕКСТОВОГО ФАЙЛА 's3://gts-promocube/source-data/Lowes/POS/';

Если вы сохраните вышеуказанное в файле и выполните его с помощью hive -f, вы получите сообщение об ошибке: FAILED: строка ParseException 2:0 отсутствует EOF в «CREATE» рядом с emp.

Решение: поставьте точку с запятой (;) для команды DROP TABLE выше.

person Ramesh Gajula    schedule 08.03.2019