创建 Iceberg 表 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建 Iceberg 表

要创建在 Athena 中使用的 Iceberg 表,您可以使用CREATE TABLE本页中记录的语句,也可以使用爬虫。 Amazon Glue

使用 CREATE TABLE 语句

Athena 创建 Iceberg v2 表。有关 v1 和 v2 表之间的区别,请参阅 Apache Iceberg 文档中的格式版本更改

Athena CREATE TABLE 创建没有数据的 Iceberg 表。若表使用 Iceberg 开源 Glue目录,则您可以直接从外部系统(例如 Apache Spark)查询表。您无需创建外部表。

警告

运行 CREATE EXTERNAL TABLE 会导致出现错误消息 ICEBERG 表类型不支持外部关键字

要从 Athena 创建 Iceberg 表,请将 'table_type' 子句中的 'ICEBERG' 表属性设置为 TBLPROPERTIES,如下语法摘要所示。

CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ( 'table_type' ='ICEBERG' [, property_name=property_value] )

有关可以在 Iceberg 表中查询的数据类型的信息,请参阅 Athena 中支持的 Iceberg 表数据类型。

分区

要创建带有分区的 Iceberg 表,请使用 PARTITIONED BY 语法。必须首先在列声明中指定用于分区的列。PARTITIONED BY 子句中不得包括列类型。还可以在 CREATE TABLE 语法中定义分区转换。要指定多个列进行分区,请使用逗号 (,) 字符分隔列,如以下示例所示。

CREATE TABLE iceberg_table (id bigint, data string, category string) PARTITIONED BY (category, bucket(16, id)) LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ( 'table_type' = 'ICEBERG' )

下表列出了可用的分区转换函数。

函数 描述 支持的 类型
year(ts) 按年分区 date, timestamp
month(ts) 按月分区 date, timestamp
day(ts) 按天分区 date, timestamp
hour(ts) 按小时分区 timestamp
bucket(N, col) 按哈希值 mod N 存储桶分区。这与 Hive 表的哈希分桶概念相同。 int, long, decimal, date, timestamp, string, binary
truncate(L, col) 按值截断为 L 分区 int, long, decimal, string

Athena 支持 Iceberg 的隐藏分区。有关更多信息,请参阅 Apache Iceberg 文档中的 Iceberg 的隐藏分区

表属性

本部分介绍可以在 CREATE TABLE 语句的 TBLPROPERTIES 子句中指定为键值对的表属性。Athena 仅允许表属性中预定义的键值对列表用于创建或更改 Iceberg 表。下表列出了可以指定的表属性。有关压缩选项的更多信息,请参阅本文档中的 优化 Iceberg 表。如果您希望 Athena 支持特定的开源表配置属性,请将反馈发送至 athena-feedback@amazon.com

format

描述 文件数据格式
允许的属性值 支持的文件格式和压缩组合因 Athena 引擎版本而异。有关更多信息,请参阅不同文件格式支持的 Iceberg 表压缩
默认值 parquet

write_compression

描述 文件压缩编码器
允许的属性值 支持的文件格式和压缩组合因 Athena 引擎版本而异。有关更多信息,请参阅不同文件格式支持的 Iceberg 表压缩
默认值

默认写入压缩因 Athena 引擎版本而异。有关更多信息,请参阅不同文件格式支持的 Iceberg 表压缩

optimize_rewrite_data_file_threshold

描述 数据优化的特定配置。若需要优化的数据文件少于给定阈值,则不会重写这些文件。这将允许积累更多的数据文件以生成更接近目标大小的文件,并跳过不必要的计算以节省成本。
允许的属性值 正数。必须小于 50。
默认值 5

optimize_rewrite_delete_file_threshold

描述 数据优化的特定配置。如果与数据文件关联的删除文件少于阈值,则不会重写该数据文件。这将允许为每个数据文件累积更多的删除文件,以节省成本。
允许的属性值 正数。必须小于 50。
默认值 2

vacuum_min_snapshots_to_keep

描述

在表的主分支上保留的最小快照数。

此值优先于 vacuum_max_snapshot_age_seconds 属性。如果剩余的最小快照比 vacuum_max_snapshot_age_seconds 指定的时间长,则会保留这些快照,并忽略 vacuum_max_snapshot_age_seconds 的值。

允许的属性值 正数。
默认值 1

vacuum_max_snapshot_age_seconds

描述 要在主分支上保留的最大快照期限。如果 vacuum_min_snapshots_to_keep 指定的剩余最小快照比指定的时间长,则忽略此值。
允许的属性值 正数。
默认值 432000 秒(5 天)

vacuum_max_metadata_files_to_keep

描述 要在表的主分支上保留的先前元数据文件的最大数量。
允许的属性值 正数。
默认值 100

CREATE TABLE 语句示例

以下示例将创建一个包含三列的 Iceberg 表。

CREATE TABLE iceberg_table ( id int, data string, category string) PARTITIONED BY (category, bucket(16,id)) LOCATION 's3://DOC-EXAMPLE-BUCKET/iceberg-folder' TBLPROPERTIES ( 'table_type'='ICEBERG', 'format'='parquet', 'write_compression'='snappy', 'optimize_rewrite_delete_file_threshold'='10' )

CREATE TABLE AS SELECT (CTAS)

有关使用 CREATE TABLE AS 语句创建 Iceberg 表的信息,请参阅 CREATE TABLE AS,尤其是 CTAS 表属性 部分。

使用 Amazon Glue 爬网程序

您可以使用 Amazon Glue 爬虫将您的 Iceberg 表自动注册到。 Amazon Glue Data Catalog如果您想从其他 Iceberg 目录迁移,可以创建和安排 Amazon Glue 爬网程序,并提供 Iceberg 表所在的 Amazon S3 路径。您可以指定 Amazon Glue 爬网程序可以遍历的 Amazon S3 路径的最大深度。安排 Amazon Glue 爬网程序后,Crawler 会提取架构信息,并在每次运行时 Amazon Glue Data Catalog 使用架构更改进行更新。 Amazon Glue Crawler 支持跨快照合并架构,并更新中最新的元数据文件位置。 Amazon Glue Data Catalog有关更多信息,请参阅中的 Amazon Glue数据目录和爬虫