Amazon Athena:输入时没有可行的替代方案
Amazon Athena: no viable alternative at input
在 Athena 中创建 table 时;它给了我以下异常:
no viable alternative at input
table 名称中不允许使用连字符..(虽然向导允许)..只需删除连字符,它就像一个魅力
不幸的是,目前 Athena 中的语法验证错误消息描述性不强,此错误可能意味着“几乎”在 create table 语句中出现任何可能的语法错误。
尽管目前这很烦人,但您需要检查语法是否遵循 Create table documentation
一些例子是:
- 没有反引号(正如已经指出的那样)
- Missing/extra 逗号(记住最后一列在列定义后不需要逗号
- 缺少空格
- 更多..
就我而言,这是 PARTITIONED BY 部分中的一个 额外逗号,
就我而言,我缺少 S3 的单引号 URL
在我的例子中,这是因为 table 中最后一列后面有一个尾随逗号。例如:
CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
one STRING,
two STRING,
) LOCATION 's3://my-bucket/some/path';
在我删除 two STRING,
末尾的逗号后,它工作正常。
就我而言,根据 AWS 文档,table 列名称之一用单引号引起来:( ('bucket')
这个错误一般出现在DDL的语法有些傻的时候errors.There有几个答案根据不同的状态解释不同的错误。解决这个问题的简单方法就是耐心看一下DDL 并逐行验证以下几点:-
- 检查是否缺少逗号
- 不平衡`(反引号运算符)
- HIVE 不支持不兼容的数据类型(HIVE DATA TYPES REFERENCE)
- 逗号不平衡
- table 名称中的 Hypen
我的案例:这是一个外部 table 并且位置有错字(因此不存在)
几个提示:
- 单击 "Format query" 按钮可以轻松发现错误
- 使用文档底部的示例 - 它有效 - 并使用您的参数修改它:https://docs.aws.amazon.com/athena/latest/ug/create-table.html
斜杠。我的是斜线。我有来自 Athena 的 DDL,保存为 python 字符串。
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='\"',
'separatorChar'=',')
已更改为
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='"',
'separatorChar'=',')
一切都崩溃了。
必须做到:
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'quoteChar'='\\"',
'separatorChar'=',')
我第一次使用 UI 时对我来说不明显的是,如果您在创建 table 'wizard' 时遇到错误,您可以取消并应该有使用失败的查询写入新查询 window,供您编辑和修复。
我的数据库有一个 hypen,所以我在查询中添加了反引号并重新运行它。
由于查询中有评论,我遇到了这种情况。
当我尝试“格式查询”按钮时,我意识到这是可能的,它把整个事情变成了几乎 1 行,大部分都被注释掉了。我的猜测是查询解析器在将查询发送到 Athena 之前运行此格式化程序。
删除了评论,运行 查询,天使长出了翅膀!
正如其他用户所指出的,Athena 提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户提到的所需 DDL 语法(参见 HIVE data types reference)可能会非常乏味,因为它相当广泛。
因此,另一个故障排除技巧是让 AWS 自己的数据解析引擎 (AWS Glue) 提示您 DDL 可能在哪里关闭。这里的想法是让 AWS Glue 使用其自己的内部规则解析数据,然后向您展示您可能在哪里犯了错误。
具体而言,以下是对我的 DDL 语句进行故障排除的步骤,这给我带来了很多麻烦:
- 在 AWS Glue 中创建数据爬虫; AWS 和许多其他地方都经历了这需要的非常详细的步骤,所以我不会在这里重复
- 将爬虫指向您想要(但未能)上传到 Athena 的相同数据
- 将爬虫输出设置为 table(在您已经创建的 Athena 数据库中)
- 运行 爬虫并等待 table 填充数据
- 在 Athena Query Editor 选项卡中找到 newly-created table,单击三个垂直点 (...),然后 select “生成 创建 Table动态链接库”:
- 这将使 Athena 为此 table 创建 保证有效 的 DLL(因为 table 已经 使用该 DLL 创建)
- 看一下这个 DLL,发现 if/where/how 它与您最初编写的 DLL 不同。当然,此 automatically-generated DLL 不会为您可能会发现有用的数据类型提供确切的选择,但至少您会知道它是 100% 有效的
- 最后,根据这个新 Glue/Athena-generated-DLL 更新您的 DLL,针对您的特定用例调整 column/field 名称和数据类型
在搜索并遵循此处所有好的答案之后。
我的问题是在 Node.js 工作时我需要删除可选的
ESCAPED BY '\' 在 Row 设置中使用以使我的查询正常工作。希望这对其他人有帮助。
在 Athena 中创建 table 时;它给了我以下异常:
no viable alternative at input
table 名称中不允许使用连字符..(虽然向导允许)..只需删除连字符,它就像一个魅力
不幸的是,目前 Athena 中的语法验证错误消息描述性不强,此错误可能意味着“几乎”在 create table 语句中出现任何可能的语法错误。
尽管目前这很烦人,但您需要检查语法是否遵循 Create table documentation
一些例子是:
- 没有反引号(正如已经指出的那样)
- Missing/extra 逗号(记住最后一列在列定义后不需要逗号
- 缺少空格
- 更多..
就我而言,这是 PARTITIONED BY 部分中的一个 额外逗号,
就我而言,我缺少 S3 的单引号 URL
在我的例子中,这是因为 table 中最后一列后面有一个尾随逗号。例如:
CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
one STRING,
two STRING,
) LOCATION 's3://my-bucket/some/path';
在我删除 two STRING,
末尾的逗号后,它工作正常。
就我而言,根据 AWS 文档,table 列名称之一用单引号引起来:( ('bucket')
这个错误一般出现在DDL的语法有些傻的时候errors.There有几个答案根据不同的状态解释不同的错误。解决这个问题的简单方法就是耐心看一下DDL 并逐行验证以下几点:-
- 检查是否缺少逗号
- 不平衡`(反引号运算符)
- HIVE 不支持不兼容的数据类型(HIVE DATA TYPES REFERENCE)
- 逗号不平衡
- table 名称中的 Hypen
我的案例:这是一个外部 table 并且位置有错字(因此不存在)
几个提示:
- 单击 "Format query" 按钮可以轻松发现错误
- 使用文档底部的示例 - 它有效 - 并使用您的参数修改它:https://docs.aws.amazon.com/athena/latest/ug/create-table.html
斜杠。我的是斜线。我有来自 Athena 的 DDL,保存为 python 字符串。
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='\"',
'separatorChar'=',')
已更改为
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='"',
'separatorChar'=',')
一切都崩溃了。
必须做到:
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'quoteChar'='\\"',
'separatorChar'=',')
我第一次使用 UI 时对我来说不明显的是,如果您在创建 table 'wizard' 时遇到错误,您可以取消并应该有使用失败的查询写入新查询 window,供您编辑和修复。
我的数据库有一个 hypen,所以我在查询中添加了反引号并重新运行它。
由于查询中有评论,我遇到了这种情况。
当我尝试“格式查询”按钮时,我意识到这是可能的,它把整个事情变成了几乎 1 行,大部分都被注释掉了。我的猜测是查询解析器在将查询发送到 Athena 之前运行此格式化程序。
删除了评论,运行 查询,天使长出了翅膀!
正如其他用户所指出的,Athena 提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户提到的所需 DDL 语法(参见 HIVE data types reference)可能会非常乏味,因为它相当广泛。
因此,另一个故障排除技巧是让 AWS 自己的数据解析引擎 (AWS Glue) 提示您 DDL 可能在哪里关闭。这里的想法是让 AWS Glue 使用其自己的内部规则解析数据,然后向您展示您可能在哪里犯了错误。
具体而言,以下是对我的 DDL 语句进行故障排除的步骤,这给我带来了很多麻烦:
- 在 AWS Glue 中创建数据爬虫; AWS 和许多其他地方都经历了这需要的非常详细的步骤,所以我不会在这里重复
- 将爬虫指向您想要(但未能)上传到 Athena 的相同数据
- 将爬虫输出设置为 table(在您已经创建的 Athena 数据库中)
- 运行 爬虫并等待 table 填充数据
- 在 Athena Query Editor 选项卡中找到 newly-created table,单击三个垂直点 (...),然后 select “生成 创建 Table动态链接库”:
- 这将使 Athena 为此 table 创建 保证有效 的 DLL(因为 table 已经 使用该 DLL 创建)
- 看一下这个 DLL,发现 if/where/how 它与您最初编写的 DLL 不同。当然,此 automatically-generated DLL 不会为您可能会发现有用的数据类型提供确切的选择,但至少您会知道它是 100% 有效的
- 最后,根据这个新 Glue/Athena-generated-DLL 更新您的 DLL,针对您的特定用例调整 column/field 名称和数据类型
在搜索并遵循此处所有好的答案之后。 我的问题是在 Node.js 工作时我需要删除可选的 ESCAPED BY '\' 在 Row 设置中使用以使我的查询正常工作。希望这对其他人有帮助。