使用 Apache Iceberg 表 - Amazon Athena

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

使用 Apache Iceberg 表

Athena 支持对数据使用 Apache Parquet 格式的 Apache Iceberg 表进行读取、时空旅行、写入和 DDL 查询,这些表对元数据使用 Apache Parquet 格式,为元数据存储使用目录。 AWS Glue

Apache Iceberg 是适用于超大型分析数据集的开放表格式。Iceberg 以表的形式管理大量文件,并支持现代分析数据湖操作,例如记录级插入、更新、删除和时间旅行查询。Iceberg 规范支持表无缝发展,例如架构和分区发展,且其设计针对在 Amazon S3 上的使用进行了优化。Iceberg 还有助于在并发写入场景下保证数据的正确性。

有关 Apache Iceberg 的更多信息,请参阅 https://iceberg.apache.org/

注意事项和限制

Athena 对 Iceberg 表的支持具有以下限制:

  • 仅包含 AWS Glue 目录的表 — Athena 仅支持根据开源胶水 AWS Glue 目录实现所定义的规范根据目录创建的 Iceberg 表。

  • AWS Glue 仅支持表格锁定 — 与支持插件自定义锁定的开源 Glue 目录实现不同,Athena 仅 AWS Glue 支持乐观锁定。使用 Athena 修改具有任何其他锁实施的 Iceberg 表将丢失潜在数据并中断事务。

  • 支持的文件格式 – Athena 中的 Iceberg 文件格式支持取决于 Athena 引擎版本,如下表所示。

    Athena 引擎版本 Parquet ORC Avro
    2
    3 支持
  • Iceberg v2 表 – Athena 仅在 Iceberg v2 表上进行创建和操作。有关 v1 和 v2 表之间的区别,请参阅 Apache Iceberg 文档中的格式版本更改

  • 显示没有时区的时间类型 – 没有时区类型的时间和时间戳以 UTC 格式显示。如果在时间列的筛选条件表达式中未指定时区,则使用 UTC。

  • 时间戳相关的数据精度 – 虽然 Iceberg 对时间戳数据类型支持微秒精度,但 Athena 仅对读写操作中的时间戳支持毫秒精度。在与时间相关的列中,Athena 只对在手动压缩操作过程中重写的数据保留毫秒精度。

  • 不支持的操作 – Iceberg 表格不支持以下 Athena 操作。

  • 视图 – 使用 CREATE VIEW 创建 Athena 视图,如 使用视图 中所述。如果您想使用 Iceberg 视图规范创建视图,请联系 athena-feedback@amazon.com

  • 中不支持 TTF 管理命令 AWS Lake Formation — 尽管你可以使用 Lake Formation 来管理 Apache Iceberg、Apache Hudi 和 Linux Foundation Delta Lake 等 TransactionTable 格式 (TTF) 的读取访问权限,但你不能使用 Lake Formation 来管理诸如VACUUMMERGEUPDATE或使用这些表格格式之类的操作的权限。OPTIMIZE有关 Lake Formation 与 Athena 集成的更多信息,请参阅《开发者指南》中的与 AWS Lake Formation 亚马逊 Athena 一起使用。AWS Lake Formation

  • 按嵌套字段分区 — 不支持按嵌套字段进行分区。尝试这样做会生成消息 NOT_SUPPORTED:不支持按嵌套字段进行分区: column_name.nested_field_name

  • 不支持跳过 S3 Glacier 对象 – 如果 Apache Iceberg 表中的对象属于 Amazon S3 Glacier 存储类,将 read_restored_glacier_objects 表属性设置为 false 则无效。

    例如,假设发出以下命令:

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    对于 Iceberg 和 Delta Lake 表,该命令会生成错误 Unsupported table property key: read_restored_glacier_objects。对于 Hudi 表,ALTER TABLE 命令不会产生错误,但是 Amazon S3 Glacier 对象仍无法跳过。在 ALTER TABLE 命令之后运行 SELECT 查询会继续返回所有对象。

若您希望 Athena 支持特定功能,请将反馈发送至 athena-feedback@amazon.com