65

在 Athena 中创建表时;它给了我以下例外:

输入没有可行的替代方案

4

13 回答 13

59

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

于 2016-12-01T13:35:51.593 回答
48

不幸的是,目前 Athena 中的语法验证错误消息不是很具有描述性,这个错误可能意味着“几乎”任何可能在 create table 语句中出现的语法错误。

虽然目前这很烦人,但您需要检查语法是否遵循创建表文档

一些例子是:

  • 反引号不在位(如前所述)
  • 缺少/多余的逗号(请记住,最后一列在列定义后不需要逗号
  • 缺少空格
  • 更多的 ..
于 2017-03-15T13:22:16.963 回答
11

当 DDL 的语法有一些愚蠢的错误时,通常会发生此错误。有几个答案可以根据那里的状态解释不同的错误。解决此问题的简单方法是耐心查看 DDL并逐行验证以下几点:-

  1. 检查缺少的逗号
  2. 不平衡`(反引号运算符)
  3. HIVE 不支持不兼容的数据类型(HIVE 数据类型参考
  4. 不平衡逗号
  5. 表名中的连字符
于 2019-06-18T08:14:55.600 回答
4

就我而言,这是因为表中最后一列后面有一个逗号。例如:

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

在我删除最后的逗号后,two STRING,它工作正常。

于 2019-01-11T16:19:01.750 回答
4

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

几个提示:

于 2019-10-02T23:10:42.393 回答
3

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

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

改为

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

一切都崩溃了。

必须做到:

WITH SERDEPROPERTIES (
  'escapeChar'='\\\\', 
  'quoteChar'='\\\"',
  'separatorChar'=',')
于 2020-02-20T20:18:32.733 回答
2

就我而言,它是PARTITIONED BY部分中的额外逗号,

于 2018-11-17T03:59:06.570 回答
1

就我而言,我错过了 S3 URL 的单引号

于 2018-12-06T10:25:31.053 回答
1

在我的情况下,根据 AWS 文档,其中一个表列名称用单引号括起来:( ('bucket')

于 2019-03-19T15:09:14.503 回答
1

正如其他用户所指出的,Athena 提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户提到的所需 DDL 语法(请参阅HIVE 数据类型参考)可能非常乏味,因为它相当广泛。

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

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

  1. 在AWS Glue中创建数据爬虫;AWS 和许多其他地方都经历了这需要的非常详细的步骤,所以我不会在这里重复
  2. 将爬虫指向您想要(但失败)上传到 Athena 的相同数据
  3. 将爬虫输出设置为表(在您已经创建的 Athena 数据库中)
  4. 运行爬虫并等待创建填充数据的表
  5. 在 Athena Query Editor 选项卡中找到新创建的表,单击三个垂直点 (...),然后选择“Generate Create Table DLL”: 在此处输入图像描述
  6. 这将使 Athena 为该表创建保证有效的 DLL (因为该表使用该 DLL 创建)
  7. 看看这个 DLL,看看它是否/在哪里/如何与您最初编写的 DLL 不同。自然地,这个自动生成的 DLL 不会对您可能觉得有用的数据类型有准确的选择,但至少您会知道它是 100% 有效的
  8. 最后,根据这个新的 Glue/Athena 生成的 DLL 更新您的 DLL,为您的特定用例调整列/字段名称和数据类型
于 2020-08-13T00:27:30.463 回答
1

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

于 2021-03-17T21:18:06.137 回答
0

第一次使用 UI 时对我来说并不明显的是,如果在创建表“向导”中出现错误,则可以取消,并且应该在新的查询窗口中写入失败的查询,供您编辑和修复。

我的数据库有一个hypen,所以我在查询中添加了反引号并重新运行它。

于 2020-03-31T17:45:52.210 回答
0

由于查询中有评论,这发生在我身上。

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

删除评论,运行查询,天使长出了翅膀!

于 2020-08-12T20:58:01.430 回答