Amazon Athena: нет реальной альтернативы на входе

При создании стола в Афине; это дает мне следующее исключение:

нет жизнеспособной альтернативы на входе


person Deepak Singhal    schedule 01.12.2016    source источник
comment
В моем случае имя таблицы не может начинаться с цифры, это должна быть буква.   -  person kenorb    schedule 21.05.2019


Ответы (13)


в имени таблицы нельзя использовать дефисы .. (хотя мастер позволяет это) .. Просто удалите дефис, и это сработает как шарм

person Deepak Singhal    schedule 01.12.2016
comment
В моем случае это произошло потому, что я начал имя таблицы с числа: 2017_04_03_some_data. Я перешел на some_data_20170403, и это сработало. - person Jonathan Morales Vélez; 02.05.2017
comment
Я получал ту же ошибку при попытке создать таблицу с именами столбцов с дефисами '-' - person campeterson; 01.09.2017
comment
в моем случае это было из-за наличия записи COMMENT в DDL. Сработало после снятия. - person tedder42; 10.04.2018
comment
В моем случае ) отсутствовал в конце. :) - person ChikuMiku; 23.04.2018
comment
Спасибо, ты спас мне наверное 30 минут моей жизни. - person Pawel; 23.08.2018
comment
В базе данных также не может быть дефисов. - person Alex Harvey; 24.08.2018
comment
Выбор этого в качестве ответа вводит в заблуждение. Ответ @esalgado должен быть выбранным ответом. - person Robert Penridge; 20.12.2018
comment
это слишком характерно для довольно общей ошибки, которая может быть вызвана любой синтаксической ошибкой в ​​запросе. @ deepak-singhal, вы должны обновить его для общего случая (см. другие ответы ниже). - person ives; 16.02.2020

К сожалению, на данный момент сообщения об ошибках проверки синтаксиса в Athena не очень информативны, эта ошибка может означать практически любые возможные синтаксические ошибки в операторе create table.

Хотя сейчас это раздражает, вам необходимо проверить, соответствует ли синтаксис Создание документации по таблицам

Вот несколько примеров:

  • Обратные кавычки не на месте (как уже указывалось)
  • Отсутствующие / лишние запятые (помните, что последний столбец не требует запятой после определения столбца
  • Отсутствующие пробелы
  • Более ..
person esalgado    schedule 15.03.2017
comment
Мой Еще .. был лишним >. - person CorayThan; 07.06.2017
comment
В моем DDL отсутствовала запятая. К счастью, ошибка выдает номер строки, на которую нужно посмотреть в начале. - person Nirmal; 13.12.2017
comment
Я по ошибке поставил пробел в названии атрибута. В основном возникшая ошибка указывает на то, что что-то не так с синтаксисом запроса, как я это вижу. - person Divyesh Kalbhor; 10.09.2018
comment
Спасибо! Кстати, документация по созданию таблиц перемещена в docs.aws. amazon.com/athena/latest/ug/create-table.html - person burkay; 29.10.2019
comment
Мое More .. было неразрывным пробелом \ xa0 вместо обычного пробела. @Nirmal номер строки, указанный в ошибке, вводит в заблуждение! - person shantanuo; 18.08.2020
comment
- без запятой после последней комбинации col_name data_type - person 00schneider; 23.02.2021
comment
My More ... отсутствовали обратные кавычки от имени базы данных - person Panagiotis Simakis; 16.03.2021

Эта ошибка обычно возникает, когда синтаксис DDL содержит несколько глупых ошибок. Существует несколько ответов, объясняющих различные ошибки в зависимости от их состояния. Простое решение этой проблемы - терпеливо изучить DDL и проверить следующие моменты построчно:-

  1. Проверьте отсутствие запятых
  2. Несбалансированный `(оператор обратного апострофа)
  3. Несовместимый тип данных, не поддерживаемый HIVE (ССЫЛКА НА ТИПЫ ДАННЫХ HIVE)
  4. Несбалансированная запятая
  5. Hypen в названии таблицы
person Nitin Vashisth    schedule 18.06.2019

В моем случае это было из-за запятой после последнего столбца в таблице. Например:

CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
  one STRING,
  two STRING,
) LOCATION 's3://my-bucket/some/path';

После того, как я удалил запятую в конце two STRING,, все заработало.

person Ralph Bolton    schedule 11.01.2019

Мой случай: это была внешняя таблица, и в этом месте была опечатка (следовательно, не существовало)

Пара советов:

  • Нажмите кнопку "Форматировать запрос", чтобы легко находить ошибки.
  • Используйте пример внизу документации - он работает - и измените его своими параметрами: https://docs.aws.amazon.com/athena/latest/ug/create-table.html
person E-dou    schedule 02.10.2019

Слэши. У меня были косые черты. У меня был DDL от Афины, сохраненный как строка Python.

WITH SERDEPROPERTIES ( 
  'escapeChar'='\\', 
  'quoteChar'='\"',
  'separatorChar'=',')  

был изменен на

WITH SERDEPROPERTIES ( 
  'escapeChar'='\', 
  'quoteChar'='"',
  'separatorChar'=',')

И все развалилось.

Пришлось сделать это:

WITH SERDEPROPERTIES (
  'escapeChar'='\\\\', 
  'quoteChar'='\\\"',
  'separatorChar'=',')
person Jason Nichols    schedule 20.02.2020
comment
Пожалуйста, уточните здесь: conomics.stackexchange.com/a/6354/4483 - person BCLC; 18.08.2020

В моем случае это была лишняя запятая в разделе РАЗДЕЛАНО ПО,

person Siva Budati    schedule 17.11.2018

В моем случае мне не хватало одинарных кавычек для URL-адреса S3.

person Akshay Kalbhor    schedule 06.12.2018

В моем случае одно из имен столбцов таблицы было заключено в одинарные кавычки, как указано в документации AWS :( ('bucket')

person Phil    schedule 19.03.2019

Как отмечали другие пользователи, стандартное сообщение об ошибке проверки синтаксиса, предоставляемое Athena, не особенно полезно. Тщательная проверка необходимого синтаксиса DDL (см. справочник по типам данных HIVE), другие пользователи, упомянутые выше, могут быть довольно утомительными, поскольку они довольно обширны.

Итак, дополнительный прием для устранения неполадок - позволить собственному механизму анализа данных AWS (AWS Glue) подсказать вам, где может быть отключен DDL. Идея состоит в том, чтобы позволить AWS Glue проанализировать данные, используя собственные внутренние правила, а затем показать вам, где вы могли допустить ошибку.

В частности, вот шаги, которые помогли мне устранить неполадки с моим оператором DDL, который доставлял мне много проблем:

  1. создать сканер данных в AWS Glue; AWS и многие другие места проходят через очень подробные шаги, которые для этого требуются, поэтому я не буду повторять это здесь.
  2. укажите поисковому роботу те же данные, которые вы хотели (но не смогли) загрузить в Афину.
  3. установите вывод поискового робота в таблицу (в уже созданной вами базе данных Athena)
  4. запустить краулер и дождаться создания таблицы с заполненными данными
  5. найдите вновь созданную таблицу на вкладке редактора запросов Athena, щелкните три вертикальные точки (...) и выберите «Создать DLL-библиотеку для создания таблицы»:  введите описание изображения здесь
  6. это заставит Athena создать DLL для этой таблицы, которая гарантированно действительна (поскольку таблица была уже создана с использованием этой DLL)
  7. Взгляните на эту DLL и посмотрите, отличается ли / где / чем она от библиотеки DLL, которую вы изначально написали. Естественно, эта автоматически сгенерированная DLL не будет иметь точного выбора типов данных, которые вы можете найти полезными, но, по крайней мере, вы будете знать, что она действительна на 100%.
  8. наконец, обновите свою DLL на основе этой новой Glue / Athena-generated-DLL, настроив имена столбцов / полей и типы данных для вашего конкретного варианта использования.
person drapkin11    schedule 13.08.2020

После поиска и следования всем хорошим ответам здесь. Моя проблема заключалась в том, что при работе в Node.js мне нужно было удалить необязательный ESCAPED BY '\', используемый в настройках строки, чтобы мой запрос работал. Надеюсь, это поможет другим.

person Meccles    schedule 17.03.2021

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

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

person javs    schedule 31.03.2020

Это случилось со мной из-за комментариев в запросе.

Я понял, что это возможно, когда попробовал кнопку «Форматировать запрос», и она превратила все это почти в одну строку, в основном закомментированную. Я предполагаю, что синтаксический анализатор запросов запускает это средство форматирования перед отправкой запроса в Афину.

Удалил комментарии, запустил запрос, и ангел получил свои крылья!

person Grant G    schedule 12.08.2020