亚马逊雅典娜:输入时没有可行的选择

时间:2016-12-01 13:35:52

标签: amazon-web-services amazon-athena

在雅典娜中创建一张桌子;它给了我以下例外:

  

输入

没有可行的选择

13 个答案:

答案 0 :(得分:25)

不幸的是,目前语法验证错误消息在Athena中描述性不强,此错误可能意味着“几乎”创建表语句中的任何可能的语法错误。

虽然目前很烦人,但您需要检查语法是否遵循Create table documentation

一些例子是:

  • 反引号不到位(已经指出)
  • 缺少/额外逗号(请记住,最后一列不需要列定义后的逗号
  • 缺少空格
  • 更多..

答案 1 :(得分:23)

表名中不允许使用连字符..(虽然向导允许)..只需删除连字符,它就像一个魅力

答案 2 :(得分:2)

斜线。我的是斜线。我有Athena的DDL,另存为python字符串。

iris.feature_names

已更改为

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

一切都崩溃了。

必须做到:

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

答案 3 :(得分:1)

在我的情况下,这是由于表的最后一列后面有逗号引起的。例如:

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

two STRING,末尾删除逗号后,它工作正常。

答案 4 :(得分:1)

当DDL的语法有一些愚蠢的错误时,通常会发生此错误。有多种答案可以根据状态来解释不同的错误。此问题的简单解决方案是耐心地研究DDL 和逐行验证以下几点:-

  1. 检查缺少的逗号
  2. 不平衡的`(反引号运算符)
  3. HIVE(HIVE DATA TYPES REFERENCE)不支持的数据类型不兼容
  4. 逗号不平衡
  5. 表名中的连字符

答案 5 :(得分:1)

在这里搜索并遵循所有好的答案之后。 我的问题是在 Node.js 中工作我需要删除可选的 ESCAPED BY '\' 在行设置中使用以使我的查询工作。希望这对其他人有帮助。

答案 6 :(得分:0)

在我的情况下,这是 PARTITIONED BY 部分中的逗号

答案 7 :(得分:0)

就我而言,我缺少S3 URL的单引号

答案 8 :(得分:0)

In my case, it was that one of the table column names was enclosed in single quotes, as per the AWS documentation :( ('bucket')

答案 9 :(得分:0)

我的情况:这是一个外部表,并且位置有错字(因此不存在)

提示对:

答案 10 :(得分:0)

我第一次使用UI时,对我来说并不明显的事情是,如果在创建表'wizard'中遇到错误,则可以取消,并且应该使用失败的查询以新的方式编写查询窗口,供您编辑和修复。

我的数据库有一个连字符,所以我在查询中添加了反引号,然后重新运行它。

答案 11 :(得分:0)

发生这种情况是因为查询中有评论。

当我尝试使用“格式查询”按钮时,我意识到这是一种可能性,它将整个内容变成几乎1行,大部分都被注释掉了。我的猜测是查询解析器在将查询发送到Athena之前运行此格式化程序。

删除评论,运行查询,然后天使振翅高飞!

答案 12 :(得分:0)

正如其他用户所指出的那样,Athena提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户已经提到的必需的DDL语法(请参阅HIVE data types reference),因为它涉及面很广,所以可能非常乏味。

因此,另一个故障排除技巧让AWS自己的数据解析引擎(AWS Glue)提示您DDL可能关闭的位置。这里的想法是让AWS Glue使用自己的内部规则解析数据,然后向您显示您可能在哪里犯了错误。

具体来说,以下是对我的DDL语句进行故障排除的工作步骤,这给我带来了很多麻烦:

  1. AWS Glue中创建一个数据搜寻器; AWS和其他许多地方都经过了非常详细的步骤,因此我在这里不再重复
  2. 将搜寻器指向您想要(但失败)上传到Athena的相同数据
  3. 将搜寻器的输出设置为表(在您已经创建的Athena数据库中)
  4. 运行搜寻器,等待带有填充数据的表被创建
  5. 在“雅典娜查询编辑器”选项卡中找到新创建的表,单击三个垂直点(...),然后选择“生成创建表DLL”: enter image description here
  6. 这将使Athena为此表创建DLL,该DLL被保证是有效的(因为该表已经已使用该DLL创建
  7. 看一下这个DLL,看看它是否/在何处/如何不同于您最初编写的DLL。自然地,此自动生成的DLL对于可能有用的数据类型没有确切的选择,但至少您会知道它是100%有效的
  8. 最后,根据这个新的Glue / Athena-generated-DLL更新您的DLL,并针对您的特定用例调整列/字段名称和数据类型