Athena 中的故障排除 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Athena 中的故障排除

Athena 团队从客户问题中收集了以下故障排除信息。虽然并不全面,但它包括有关一些常见性能、超时和内存不足问题的建议。

创建表作为选择 (CAS)

重复的数据与并发 CTAS 语句一起发生

Athena 不维护 CTAS 的并发验证。确保同一位置没有重复的 CTAS 语句。即使 CTAS 或 INSERT INTO 语句失败,孤立数据也可以保留在语句中指定的数据位置。

数据文件问题

Athena 无法读取隐藏的文件

Athena 将以下划线 (_) 或句点 (.) 开头的源文件视为隐藏文件。要解决此限制,请重命名文件。

Athena 无法读取存储在 Glacier 存储类中的文件

要解决该问题,请将恢复的对象复制回 Amazon S3。有关更多信息,请参阅Amazon Athena 中 SQL 查询的注意事项和限制

Athena 读取我从Amazon Glue爬网程序

Athena 不承认排除模式,您指定Amazon Glue爬网程序。例如,如果您的 Amazon S3 存储桶包含.csv.json文件,并排除.json文件时,Athena 会查询两组文件。要避免这种情况,请将要排除的文件放置在其他位置。

配置单元数据:解析字段值时出错

在以下情况下可能出现此错误:

配置单元图标错误:输入流意外结束

此消息表示该文件已损坏或为空。检查文件的完整性,然后重新运行查询。

移动设备错误:通过亚马逊服务 3 模式。卓越亚马逊 3 例外情况:指定的键不存在

当查询正在运行时删除文件时,通常会发生此错误。重新运行查询,或检查您的工作流,以查看查询运行时是否另一个作业或进程正在修改文件。

配置单元不能打开拆分:打开配置单元拆分 s3 时出错://bucket-name

当您查询具有大量对象的 Amazon S3 存储桶前缀时,可能会发生此错误。有关更多信息,请参阅 。如何解决 “蜂巢 _ 不能 _ 打开 _ 拆分:打开 Hive 拆分 s3 时出错://awsdocc-例子存储桶/:在 Athena 中慢下来” 错误?中的Amazon知识中心。

配置单元未知错误:无法创建输入格式

此错误可能是由于类似于以下的问题导致的:

  • 这些区域有:Amazon Glue爬虫无法对数据格式进行分类

  • 某些Amazon Glue表定义属性为空

  • Athena 不支持 Amazon S3 中文件的数据格式

有关更多信息,请参阅 。如何解决 Athena 中 “无法创建输入格式” 的错误?中的Amazon知识中心或观看知识中心视频

组织阿帕奇·帕克·奥·群·柱子不能投射到组织。

此错误是由镶木地板架构不匹配引起的。具有非基本类型的列(例如array)被声明为原始类型(例如string) 在Amazon Glue。若要解决此问题,请检查文件中的数据架构,并将其与Amazon Glue。

为保存查询结果而提供的 S3 位置无效。

请确保您为查询结果指定了有效的 S3 位置。有关更多信息,请参阅指定查询结果位置主题中的 使用查询结果、输出文件和查询历史记录

联合查询

有关排查联合查询的信息,请参阅常见问题在 GitHub 的 awslab/aws-雅典-查询-联合部分中。

尝试读取 JSON 数据时出现 NULL 或错误的数据错误

当您尝试读取 JSON 数据时,NULL 或不正确的数据错误可能是由于多种原因造成的。要识别在使用 OpenX SerDE 时导致错误的行,请将ignore.malformed.jsontrue。格式错误的记录将返回为 NULL。有关更多信息,请参阅 。我在 Amazon Athena 中尝试读取 JSON 数据时收到错误中的Amazon知识中心或观看知识中心视频

配置单元数据:解析字段 0 的字段值时出错:java.lang.ang.ang.ang.ang.bessenService

这些区域有:OpenX JSON SerDe当它无法解析 Athena 查询中的列时,会引发此错误。如果您将列定义为map或者struct,但基础数据实际上是stringint或其他基本类型。

配置单元图标错误:行不是有效的 JSON 对象-JSONException:复制密钥

此错误在您使用 Athena 查询Amazon Config资源,这些资源在不同的大小写中具有相同名称的多个标签。解决方案是运行创建表,使用与服务器属性 '的情况。不敏感' = '假'并映射名称。有关的信息case.insensitive和映射,请参阅JSON SerDe 库。有关更多信息,请参阅 。如何解决 “蜂巢 _ 图片错误:行不是有效的 JSON 对象-JSONException:从中读取文件时重复密钥”Amazon Config?中的Amazon知识中心。

多个 JSON 记录返回选择计数 1

如果您使用的是OpenX JSON SerDe,请确保记录由换行符分隔。有关更多信息,请参阅 。即使输入 JSON 文件有多条记录,Amazon Athena 中的 SELECT COUNT 查询也仅返回一条记录中的Amazon知识中心。

无法查询由Amazon Glue使用自定义 JSON 分类器的爬虫

Athena 引擎不支持自定义 JSON 分类器。要解决该问题,请创建不含自定义分类器的新表。要转换 JSON,您可以使用 CTAS 或创建视图。例如,如果您正在使用数组,则可以使用 UNNEST 选项来拼合 JSON。另一个选择是使用一个Amazon GlueETL 作业,支持自定义分类器,在 Amazon S3 中将数据转换为镶木地板,然后在 Athena 中查询它。

MSCK REPAIR TABLE

有关 MSCK 修复表相关问题的信息,请参阅注意事项和限制Troubleshooting的部分MSCK REPAIR TABLE页.

输出问题

无法验证/创建输出存储桶

如果指定的查询结果位置不存在或不存在适当的权限,则可能会发生此错误。有关更多信息,请参阅 。如何解决 Amazon Athena 中的 “无法验证/创建输出存储桶” 错误?中的Amazon知识中心。

时间戳结果为空

Athena 需要 Java 时间戳格式。有关更多信息,请参阅 。当我在 Amazon Athena 中查询表时,TIMESTAMP 结果为空中的Amazon知识中心。

以 CSV 以外的格式存储 Athena 查询输出

目前,Athena 仅以 CSV 格式输出文件,但您可以通过使用 CTAS 查询并配置format 表属性。有关更多信息,请参阅 。如何以 CSV 以外的格式(如压缩格式)存储 Athena 查询输出?中的Amazon知识中心。

为保存查询结果而提供的 S3 位置无效

如果输出存储桶位置与运行查询的地区不在同一地区,则可能会收到此错误消息。要避免这种情况,请在运行查询的区域中指定查询结果位置。要查看相关步骤,请参阅 指定查询结果位置

分区问题

MSCK 修复表不会删除过时的分区

如果您在 Amazon S3 中手动删除分区,然后运行 MSCK 修复表,您可能会收到错误消息文件系统中缺少分区。发生这种情况的原因是 MSCK 修复表不会从表元数据中删除过时的分区。使用ALTER TABLE DROP PARTITION手动删除过时的分区。有关更多信息,请参阅的 "疑难解答" 部分。MSCK REPAIR TABLE主题。

MSCK 修复表故障

当大量的分区(例如,超过 100,000 个)与特定表相关联时,MSCK REPAIR TABLE可能会因内存限制而失败。要解决该限制,请使用ALTER TABLE ADD PARTITION相反。

MSCK 修复表检测到分区,但不会将它们添加到Amazon Glue

如果 Amazon S3 路径使用骆驼大小写而不是小写,或者 IAM 策略不允许glue:BatchCreatePartitionaction. 有关更多信息,请参阅 。MSCK 修复表检测到 Athena 中的分区,但不会将它们添加到Amazon Glue Data Catalog中的Amazon知识中心。

日期格式为 DD-毫米-年-H-毫米-毫米-SS 或 YYY-毫米-DD 的分区投影范围不起作用

要正常工作,必须将日期格式设置为yyyy-MM-dd HH:00:00。有关更多信息,请参阅堆栈溢出帖子。Athena 分区投影无法按预期工作

分区 BY 不支持 BIGINT 类型

将数据类型转换为string,然后重试。

没有可用的有意义的分区

此错误消息通常意味着分区设置已损坏。若要解决此问题,请删除该表并创建具有新分区的表。

分区投影不能与范围分区结合使用

检查时间范围单位投影。<columnName>.interval.单位匹配分区的分隔符。例如,如果分区按天分隔,则小时范围单位将不起作用。

配置单元未知错误:无法创建输入格式

一个或多个胶水分区以不同的格式声明,因为每个胶水分区都有自己的特定输入格式。请检查您的分区是如何定义的Amazon Glue。

配置单元分区模式不匹配

如果分区的架构与表的架构不同,则查询可能会因而失败配置单元分区模式不匹配。有关更多信息,请参阅同步分区架构以避免“HIVE_PARTITION_SCHEMA_MISMATCH”

语义异常表未进行分区,但分区规范存在

如果没有定义分区,则会出现此错误。CREATE TABLE网页。有关更多信息,请参阅 。如何解决错误 “失败:语义异常表没有分区,但分区规范存在” 在 Athena?中的Amazon知识中心。

从分区数据返回零条记录

此问题可能由于多种原因而发生。有关可能的原因和解决方案,请参阅我在 Amazon Athena 中创建了一个具有定义分区的表,但是当我查询表时,返回零条记录中的Amazon知识中心。

Permissions

查询 Amazon S3 时的访问被拒绝错误

当您没有读取存储桶中数据的权限、写入结果存储桶的权限或 Amazon S3 路径包含区域终端节点(如us-east-1.amazonaws.com。有关更多信息,请参阅 。当我运行 Athena 查询时,出现 “访问被拒绝” 错误中的Amazon知识中心。

状态代码的访问被拒绝:对 Amazon S3 中的加密数据运行 DDL 查询时出现 403 错误

何时可能会收到错误消息访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求编号:<request_id>如果满足以下条件:

  1. 你运行一个 DDL 查询,如ALTER TABLE ADD PARTITION或者MSCK REPAIR TABLE

  2. 您的存储桶具有默认加密配置为使用SSE-S3

  3. 存储桶还具有类似以下内容的存储桶策略,该策略强制PutObject请求来指定PUTheaders"s3:x-amz-server-side-encryption": "true""s3:x-amz-server-side-encryption": "AES256"

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption": "true" } } }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } } ] }

在这种情况下,建议的解决方案是删除上述存储桶策略,因为存储桶的默认加密已存在。

查询另一个账户中的 Amazon S3 存储桶时,状态代码为 403 的访问被拒绝

当您尝试查询由另一个Amazon服务,第二个账户是存储桶拥有者,但不拥有存储桶中的对象。有关更多信息,请参阅 。当我在另一个账户中查询存储桶时,我收到 Amazon Athena 中的 Amazon S3 异常 “访问被拒绝,状态代码:403”中的Amazon知识中心或观看知识中心视频

使用 IAM 角色证书连接到 Athena JDBC 驱动程序

您可以检索角色的临时证书,以验证JDBC 连接到 Athena。临时证书的最大生命周期为 12 小时。有关更多信息,请参阅 。在使用 JDBC 驱动程序连接到 Athena 时,如何使用我的 IAM 角色证书或切换到另一个 IAM 角色?中的Amazon知识中心。

查询语法问题

函数未注册

当您尝试使用 Athena 不支持的函数时,会发生此错误。有关 Athena 支持的函数列表,请参阅Amazon Athena 中的 Presto 函数或运行SHOW FUNCTIONS语句。您还可以编写自己的用户定义的函数 (UDF)。有关更多信息,请参阅 。如何解决 Athena 中的 “函数未注册” 语法错误?中的Amazon知识中心。

匹配组的数量与列数不匹配

此错误在您使用Regex SerDe,并且正则表达式匹配组的数量与您为表指定的列数不匹配。有关更多信息,请参阅 。如何解决亚马逊 Athena 中的 RegexSerDe 错误 “匹配组的数量与列数不匹配”?中的Amazon知识中心。

queryString 无法满足约束条件:成员的长度必须小于或等于 262144

以 Athena 为单位的最大查询字符串长度(262,144 字节)不是可调配额。Amazon Web Services Support无法为您增加配额,但您可以通过将长查询拆分为较小的查询来解决此问题。有关更多信息,请参阅 。如何增加 Athena 中的最大查询字符串长度?中的Amazon知识中心。

语法错误: 无法解析列

如果您查询由Amazon Glue爬虫程序,具有字节顺序标记 (BOM) 的 UTF-8 编码 CSV 文件。Amazon Glue不会识别 BOM 并将其更改为问号,Amazon Athena 无法识别这些问号。解决方案是删除 Athena 或Amazon Glue。

限制问题

如果您的查询超出了依赖服务(如 Amazon S3)的限制,Amazon KMS、Amazon Glue,或者Amazon Lambda,则可能会出现以下消息。若要解决这些问题,请减少来自同一帐户的并发调用的数量。

服务 错误消息
Amazon Glue AWSG 异常:费率已超。
Amazon KMS 您已超过了您可以调用 KMS 的速率。请降低您的呼叫频率。
Amazon Lambda

数量超出限制

TooManyRequestsException

Amazon S3 卓越亚马逊 3 例外情况:请降低您的请求速率。

Views

在 Apache Hive shell 中创建的视图在 Athena 中不起作用

由于它们根本不同的实现,在 Apache Hive shell 中创建的视图与 Athena 不兼容。要解决该问题,请在 Athena 中重新创建视图。

视图已过时;必须重新创建

如果视图下方的表已更改或删除,则可能会收到此错误。解决方法是重新创建视图。有关更多信息,请参阅 。我怎样才能解决 Athena 中的 “视图过时; 它必须重新创建” 错误?中的Amazon知识中心。

Workgroups

有关排查工作组问题的信息,请参阅工作组故障排除

其他资源

以下页面提供了有关对 Amazon Athena 问题进行故障排除的其他信息。

以下Amazon资源也可以有所帮助:

故障排除通常需要由专家或帮助者社区进行迭代查询和发现。如果您在尝试此页面上的建议后仍然遇到问题,请联系Amazon Web Services Support(在Amazon Web Services Management Console中,单击支持支持中心)或访问Amazon Athena 开发论坛