创建 Iceberg 表
Athena 创建 Iceberg v2 表。有关 v1 和 v2 表之间的区别,请参阅 Apache Iceberg 文档中的格式版本更改
Athena CREATE TABLE 创建没有数据的 Iceberg 表。若表使用 Iceberg 开源 Glue目录
运行 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( |
按哈希值 mod N 存储桶分区。这与 Hive 表的哈希分桶概念相同。 |
int, long, decimal,
date, timestamp, string,
binary
|
truncate( |
按值截断为 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' )