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

创建 Iceberg 表

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

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

警告

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

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

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 表,请使用 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

格式

描述 文件数据格式
允许的属性值 parquet
默认值 parquet

write_compression

描述 文件压缩编码器
允许的属性值 gzip、snappy、zstd
默认值 gzip

write_target_data_file_size_bytes

描述 指定 Athena 生成的文件的目标大小(以字节为单位)。
允许的属性值 正数
默认值 536870912 (512MB)

optimize_rewrite_min_data_file_size_bytes

描述 数据优化的特定配置。包含小于指定值的文件以进行优化。
允许的属性值 非负数。必须小于 10GB 且小于 write_target_data_file_size_bytes 的值。
默认值 0.75 乘以 write_target_data_file_size_bytes 的值。

optimize_rewrite_max_data_file_size_bytes

描述 数据优化的特定配置。包含大于指定值的文件以进行优化。
允许的属性值 正数。必须小于 10GB 且大于 write_target_data_file_size_bytes 的值。
默认值 1.8 乘以 write_target_data_file_size_bytes 的值。

optimize_rewrite_data_file_threshold

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

optimize_rewrite_delete_file_threshold

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

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_target_data_file_size_bytes'='536870912', 'optimize_rewrite_delete_file_threshold'='10' )