使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何解决 Athena 上的 Apache Iceberg 表错误?

2 分钟阅读
0

我在 Amazon Athena 上使用了 Apache Iceberg 表,并收到了错误消息。

解决方法

对于收到的错误消息,请按照以下故障排除步骤进行操作。

不支持的表属性键

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

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

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

当 Athena 无法重现表结构时,使用带有 Iceberg 表的 DDL 语句 SHOW CREATE TABLE 的查询会出现此错误。使用 DDL 语句 DESCRIBE FORMATTED 以显示表属性,而不是 SHOW CREATE TABLE

TABLE_REDIRECTION_ERROR

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

NOT_SUPPORTED: Iceberg 不支持的类型

在 Iceberg 表中使用不支持的数据类型时会出现此错误。例如,Iceberg 表不支持 Athena 数据类型 tinyint、smallintchar。确保您的 Athena 查询使用 Iceberg 表支持的数据类型

ICEBERG_COMMIT_ERROR

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

要避免此错误,请执行以下操作:

  • 确保查询更新按顺序运行,以避免并行数据处理。
  • 对 Iceberg 表进行分区,以便将并行更新应用于不同的分区,从而将文件分组到特定的分区。
  • 在更新 Iceberg 表时实施指数回退的重试机制。

**注意:**Athena 仅支持 AWS Glue 乐观锁。当您使用其他锁定方法修改 Iceberg 表时,可能会导致数据丢失并中断交易。

有关详细信息,请参阅 Apache Iceberg 网站上的乐观锁

GENERIC_INTERNAL_ERROR: 无法在 v1 表中写入删除文件

当您尝试对 Iceberg v1 表执行 DELETE(删除)操作时,会出现此错误。Athena 仅在 Iceberg v2 表上创建和操作。

确保您的 Iceberg 表使用的是 Athena 引擎版本 2。如果您使用除 Athena 之外的其他引擎,请确保将表属性“format-version”设置为“2”以允许行级别删除。例如,在编写 Iceberg 表并将其注册到 AWS Glue Data Catalog 时,请确保您的表使用版本 2。

有关详细信息,请参阅 Apache Iceberg 网站上的删除格式

GENERIC_INTERNAL_ERROR: com.facebook.presto.spi.PrestoException: 指定的密钥不存在

当删除诸如清单列表或 metadata.json 文件之类的元数据文件时,就会出现此错误,这会导致 Athena 查询失败。如果您无法成功恢复文件,请将表回滚到快照或时间戳。

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

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

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

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

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

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 官方
AWS 官方已更新 10 个月前