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

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

中的故障排除 Athena

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

SELECT 创建表 (CTAS)

并发 CTAS 语句出现重复数据

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

数据文件问题

Athena 无法读取隐藏文件

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

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

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

Athena 读取我从AWS Glue爬网程序中排除的文件

Athena 无法识别您指定的 爬网程序的排除模式AWS Glue。例如,如果您有一个包含 Amazon S3 和 .csv 文件的 .json 存储桶,并且您从爬网程序中排除.json文件,则 Athena 将查询这两个文件组。为避免这种情况,请将要排除的文件放在其他位置。

HIVE_BAD_DATA:解析字段值时出错

在以下情况下可能会发生此错误:

HIVE_CURSOR_ERROR:输入流的意外结束

此消息指示文件已损坏或为空。检查 文件的完整性并重新运行查询。

HIVE_CURSOR_ERROR:com.amazonaws.services.s3model.AmazonS3Exception:指定的键不存在

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

HIVE_CANNOT_OPEN_SPLIT:打开 Hive split s3 时出错bucket-name

当您查询包含大量对象的 Amazon S3 存储桶前缀时,可能会出现此错误。有关更多信息,请参阅 AWS 知识中心中的如何解决“HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3: Slow down”错误Athena?

HIVE_UNKNOWN_ERROR:无法创建输入格式

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

  • AWS Glue 爬网程序无法对数据格式进行分类

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

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

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

GroupColumnIO 不能强制转换为 PrimitiveColumnIO

此错误是由 parquet schema 不匹配造成的。在 array中,具有非基元类型(例如 string)的列已声明为基元类型(例如 AWS Glue)。要解决该问题,请检查 文件中的数据架构并将其与在 中声明的架构进行比较AWS Glue。

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

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

联合查询

有关联合查询故障排除的信息,请参阅 的 awslabs/aws-athena-query-federation 部分中的 https://github.com/awslabs/aws-athena-query-federation/wiki/Common_Problems GitHubCommon_Problems。

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

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

HIVE_BAD_DATA:字段 0:java.lang.String 的错误解析字段值无法强制转换为 JSONObject

在无法解析 OpenX JSON - SerDe 查询中的列时,会Athena引发此错误。如果您将列定义为 mapstruct,但底层数据实际上是 string、 或其他基元类型int,则会发生这种情况。

HIVE_CURSOR_ERROR:Row is not a valid JSON Object - JSONException: Duplicate key

当您使用 Athena 查询具有不同情况下多个同名标签的 AWS Config Config 资源时,会出现此错误。解决方案是使用 WITH SERDEPROPERTIES 'case.insensitive'='false' 运行 CREATE TABLE 并映射名称。有关 case.insensitive 和映射的信息,请参阅JSON SerDe 库。有关更多信息,请参阅 AWS 知识中心中的如何从 中的 AWS AWS Config 读取文件JSONException?Athena 时解决“HIVE_CURSOR_ERROR: Row is not a valid JSON Object - : Duplicate key”的问题。

多个 JSON 记录返回 1 的 SELECT COUNT

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

无法查询由使用自定义 JSON 分类器的AWS Glue爬网程序创建的表

Athena 引擎不支持自定义 JSON 分类器。要解决该问题,请创建一个没有自定义分类器的新表。要转换 JSON,您可以使用 CTAS 或创建视图。例如,如果您使用的是数组,则可以使用 UNNEST 选项来展平 JSON。另一个选项是使用支持自定义分类器的 AWS Glue ETL 作业,将数据转换为 中的 Amazon S3parquet,然后在 中查询它Athena。

MSCK REPAIR TABLE

有关 MSCK REPAIR TABLE 相关问题的信息,请参阅注意事项和限制页面的 TroubleshootingMSCK REPAIR TABLE 部分。

输出问题

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

如果指定的查询结果位置不存在或没有适当的权限,则会出现此错误。有关更多信息,请参阅 AWS 知识中心中的如何解决 Amazon Athena中的“Unable to verify/create output bucket (无法验证/创建输出存储桶)”错误?。

TIMESTAMP 结果为空

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

以非 CSV 格式存储Athena查询输出

目前, 仅Athena输出 CSV 格式的文件,但您可以使用 CTAS 查询并配置format表属性来解决此限制。有关更多信息,请参阅 AWS 知识中心中的如何以 CSV 以外的格式存储 Athena 查询输出,例如压缩格式?。

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

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

分区问题

MSCK REPAIR TABLE 不删除过时的分区

如果您在 中手动删除分区Amazon S3,然后运行 MSCK REPAIR TABLE,您可能会收到错误消息 Partitions missing from filesystem。 这是因为 MSCK REPAIR TABLE 不会从表元数据中删除过时的分区。使用 ALTER TABLE DROP PARTITION 手动删除过时的分区。有关更多信息,请参阅MSCK REPAIR TABLE主题的“问题排查”部分。

MSCK REPAIR TABLE 失败

当大量分区(例如,超过 100000)与特定表关联时, MSCK REPAIR TABLE 可能会由于内存限制而失败。要解决此限制,请ALTER TABLE ADD PARTITION改用 。

MSCK REPAIR TABLE 检测分区,但不将其添加到分区 AWS Glue

如果 Amazon S3 路径为驼峰式路径而不是小写路径,或者 IAM 策略不允许执行 glue:BatchCreatePartition 操作,则可能会出现此问题。有关更多信息,请参阅 MSCK REPAIR TABLE 在 中检测分区Athena,但不将其添加到 AWS 知识中心的 AWS Glue 数据目录

日期格式为 dd-MM-yyyy-HH-mm-ss 或 yyyy-MM-dd 的分区投影范围不起作用

要正常运行,日期格式必须设置为 yyyy-MM-dd HH:00:00。 有关更多信息,请参阅 Stack Overflow 后 Athena Partition Projection Not working As Expected。

PARTITION BY 不支持 BIGINT 类型

将 数据类型转换为 string 并重试。

没有可用的有意义的分区

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

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

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

HIVE_UNKNOWN_ERROR:无法创建输入格式

一个或多个粘合分区以不同格式声明,因为每个粘合分区单独具有自己的特定输入格式。请检查如何在 中定义分区AWS Glue。

HIVE_PARTITION_SCHEMA_MISMATCH

如果分区的架构与表的架构不同,则查询可能会失败,并显示错误消息 HIVE_PARTITION_SCHEMA_MISMATCH。 有关更多信息,请参阅同步分区架构以避免“HIVE_PARTITION_SCHEMA_MISMATCH”

SemanticException 表未分区,但分区规范存在

CREATE TABLE语句中未定义任何分区时,可能会发生此错误。有关更多信息,请参阅 AWS 知识中心 中的SemanticExceptionAthena如何排除“FAILED: 表未分区,但分区规范存在”错误。

分区数据返回的零记录

出现此问题的原因有多种。有关可能的原因和解决方法,请参阅我在 中创建了一个Amazon Athena具有定义分区的表,但在查询表时,将在 AWS 知识中心返回零条记录。

Permissions

查询时出现“访问被拒绝”错误 Amazon S3

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

Access Denied with Status Code: 403 when querying an Amazon S3 bucket in another account (使用状态代码拒绝访问:403)

当您尝试查询由其他 AWS 服务写入的日志并且第二个账户是存储桶拥有者但不拥有存储桶中的对象时,可能会发生此错误。有关更多信息,请参阅在 AWS 知识中心查询其他账户Amazon S3中的存储桶或观看知识中心Amazon Athena视频时,我在 中收到异常“访问被拒绝并返回状态代码:403”。

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

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

查询语法问题

函数未注册

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

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

当您正则表达式 SerDe在 CREATE TABLE 语句中使用 并且正则表达式匹配组的数量与您为表指定的列数不匹配时,将发生此错误。有关更多信息,请参阅 AWS 知识中心中的如何解决 Amazon 中的“匹配组数量与列数量不匹配RegexSerDe”错误Athena?

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

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

SYNTAX_ERROR:无法解析列

当您从具有字节顺序标记 (BOM) 的 UTF-8 编码 CSV 文件查询由 AWS AWS Glue 爬网程序创建的表时,可能会发生此错误。 AWS Glue 无法识别 BOMs ,并将其更改为 Amazon Athena 无法识别的问号。解决方案是删除 Athena 或 中的问号AWS Glue。有关更多信息,请参阅 AWS 知识中心中的如何在 Athena? 中解决语法错误“column cannot be resolved”。

限制问题

如果您的查询超出从属服务(如 Amazon S3、AWS KMS、 AWS Glue或 )的限制AWS Lambda,则预计会出现以下消息。要解决这些问题,请减少源自同一账户的并发调用数。

服务 错误消息
AWS Glue AWSGlueException: Rate exceeded.
AWS KMS You have exceeded the rate at which you may call KMS. Reduce the frequency of your calls.
AWS Lambda

Rate exceeded

TooManyRequestsException

Amazon S3 AmazonS3Exception: Please reduce your request rate.

Views

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

由于其实施基本不同,因此在 Apache Hive shell 中创建的视图与 不兼容Athena。要解决此问题,请在 中重新创建视图Athena。

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

如果作为视图基础的表已更改或已删除,则您可能会收到此错误。解决方法是重新创建视图。有关更多信息,请参阅 AWS 知识中心的 ?Athena 中的如何解决“查看过时;必须重新创建”错误。

Workgroups

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

其他资源

以下页面提供了用于排查 问题的附加信息Amazon Athena。

以下 AWS 资源也很有帮助:

故障排除通常需要专家或帮助程序社区的迭代查询和发现。如果您在尝试此页面上的建议后继续遇到问题,请联系 AWS Support(在 AWS 控制台中,单击 SupportSupport Center)或访问 Amazon Athena 论坛