在 Athena 中创建表时;它给了我以下例外:
输入没有可行的替代方案
表名中不允许使用连字符..(尽管向导允许)..只需删除连字符,它就像一个魅力
不幸的是,目前 Athena 中的语法验证错误消息不是很具有描述性,这个错误可能意味着“几乎”任何可能在 create table 语句中出现的语法错误。
虽然目前这很烦人,但您需要检查语法是否遵循创建表文档
一些例子是:
当 DDL 的语法有一些愚蠢的错误时,通常会发生此错误。有几个答案可以根据那里的状态解释不同的错误。解决此问题的简单方法是耐心查看 DDL并逐行验证以下几点:-
就我而言,这是因为表中最后一列后面有一个逗号。例如:
CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
one STRING,
two STRING,
) LOCATION 's3://my-bucket/some/path';
在我删除最后的逗号后,two STRING,
它工作正常。
我的情况:这是一个外部表,位置有错字(因此不存在)
几个提示:
斜线。我的是斜线。我有来自 Athena 的 DDL,保存为 python 字符串。
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'quoteChar'='\"',
'separatorChar'=',')
改为
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='"',
'separatorChar'=',')
一切都崩溃了。
必须做到:
WITH SERDEPROPERTIES (
'escapeChar'='\\\\',
'quoteChar'='\\\"',
'separatorChar'=',')
就我而言,它是PARTITIONED BY部分中的额外逗号,
就我而言,我错过了 S3 URL 的单引号
在我的情况下,根据 AWS 文档,其中一个表列名称用单引号括起来:( ('bucket')
正如其他用户所指出的,Athena 提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户提到的所需 DDL 语法(请参阅HIVE 数据类型参考)可能非常乏味,因为它相当广泛。
因此,另一个故障排除技巧是让 AWS 自己的数据解析引擎 (AWS Glue) 提示您 DDL 可能在哪里关闭。这里的想法是让 AWS Glue 使用自己的内部规则解析数据,然后向您展示您可能在哪里犯了错误。
具体来说,以下是对我的 DDL 语句进行故障排除的步骤,这给我带来了很多麻烦:
在这里搜索并关注所有好的答案之后。我的问题是在 Node.js 中工作,我需要删除 Row 设置中使用的可选 ESCAPED BY '\' 才能使我的查询正常工作。希望这对其他人有帮助。
第一次使用 UI 时对我来说并不明显的是,如果在创建表“向导”中出现错误,则可以取消,并且应该在新的查询窗口中写入失败的查询,供您编辑和修复。
我的数据库有一个hypen,所以我在查询中添加了反引号并重新运行它。
由于查询中有评论,这发生在我身上。
当我尝试“格式化查询”按钮时,我意识到这是一种可能性,它把整个事情变成了几乎 1 行,大部分都被注释掉了。我的猜测是查询解析器在将查询发送到 Athena 之前运行此格式化程序。
删除评论,运行查询,天使长出了翅膀!