跳至内容

如何对 Athena 上的 Apache Iceberg 表错误进行故障排除?

2 分钟阅读
0

我在 Amazon Athena 上使用 Apache Iceberg 表时遇到错误。

解决方法

按照您遇到的错误的故障排除步骤进行操作。

不支持的表属性键

CREATE TABLEALTER TABLE 语句的 TBLPROPERTIES 子句不使用支持的表属性时,就会出现此错误。当您创建或修改 Iceberg 表时,Athena 只允许在表属性中包含预定义的键值对列表。

要解决此问题,请确保您的 Iceberg 表使用支持的表属性

Athena 无法生成 CREATE TABLE 语句,因为该表具有不支持的属性

如果由于您在查询中使用了 SHOW CREATE TABLE DDL 语句而导致 Athena 无法重现表结构,则会出现“UNSUPPORTED”错误。请使用 DESCRIBE FORMATTED DDL 语句显示表属性。

收到“TABLE_REDIRECTION_ERROR”错误

此错误发生在使用不受支持的 Iceberg 表元数据的 Athena SELECT 查询中。确保您的 Athena SELECT 查询包含支持的查询 Iceberg 表元数据

收到“Unsupported Hive type”错误

在 Iceberg 表中使用不支持的数据类型时会出现此错误。例如,您可能会收到“SHORT, use integer”错误,因为 Iceberg 表不支持 tinyintsmallint Athena 数据类型。或者,您可能会收到“CHAR, use string”错误,因为 Iceberg 表不支持 char Athena 数据类型。

要解决此问题,请确认您的 Athena 查询使用的是 Iceberg 表支持的数据类型

收到“ICEBERG_COMMIT_ERROR”错误

当多个语句尝试修改为 Iceberg 表更新而并行运行的同一组文件时,可能会出现此错误。例如,当多个 DELETE 语句并行尝试同时删除同一组记录时。

要避免此问题,请执行以下操作:

  • 确保查询更新按顺序运行,以避免并行数据处理。
  • 在更新 Iceberg 表时实施指数回退的重试机制。

**注意:**Athena 仅支持 AWS Glue 乐观锁。当您使用其他锁定方法修改 Iceberg 表时,可能会导致数据丢失并中断交易。有关详细信息,请参阅 Apache Iceberg 网站上的 Optimistic locking

收到“NOT_SUPPORTED: Iceberg table updates require at least format version 2”错误

当您尝试对版本 1 Iceberg 表执行 DELETE 操作时,将会出现此错误。Athena 仅创建并操作版本 2 Iceberg 表。确保您的 Iceberg 表使用的是 Athena 引擎版本 2。如果您使用其他类型的引擎,请确保将 format-version 表属性设置为 2 以允许行级别删除。例如,在编写 Iceberg 表并将其注册到 AWS Glue Data Catalog 时,使用版本 2。有关详细信息,请参阅 Apache Iceberg 网站上的 Delete formats

收到“GENERIC_INTERNAL_ERROR:”错误

您会收到以下错误消息:

“GENERIC_INTERNAL_ERROR: com.amazonaws.trino.exceptions.UnrecoverableS3OperationException: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist”

当您删除元数据文件(例如清单列表或 metadata.json)时,将会发生此错误。然后,Athena 查询失败。如果您无法成功恢复文件,请将表回滚到快照或时间戳。

**注意:**您必须在 Apache Spark 环境(如 AWS Glue 或 Amazon EMR)中回滚表,而不是 Athena 查询编辑器。

要将表回滚到特定的快照 ID,请运行 roll_to_snapshot Apache Iceberg 命令:

CALL catalog_name.system.rollback_to_snapshot('your-db.your-table', your-snapshot-id)

**注意:**将 your-dbyour-tableyour-snapshot-id 替换为您的值。

要将表回滚到特定的时间戳,请运行 rollback_to_timestamp Apache Iceberg 命令:

CALL catalog_name.system.rollback_to_timestamp('your-db.your-table', TIMESTAMP 'yyyy-mm-dd hh:mm:ss')

**注意:**将 your-dbyour-tableyyyy-mm-dd hh:mm:ss 替换为您的值。

有关详细信息,请参阅 Apace Iceberg 网站上的 rollback_to_snapshotrollback_to_timestamp

相关信息

对 Athena 中的问题进行故障排除

如何在 Spark 中将 Apache Iceberg 与跨账户 AWS Glue Data Catalog 配合使用?

查询 Apache Iceberg 表

AWS 官方已更新 6 个月前