创建 Iceberg 表
要创建在 Athena 中使用的 Iceberg 表,您可以使用本页中记录的 CREATE TABLE
语句,也可以使用 AWS Glue 爬网程序。
使用 CREATE TABLE 语句
Athena 创建 Iceberg v2 表。有关 v1 和 v2 表之间的区别,请参阅 Apache Iceberg 文档中的格式版本更改
Athena CREATE TABLE
创建没有数据的 Iceberg 表。若表使用 Iceberg 开源 Glue目录
警告
运行 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://amzn-s3-demo-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://amzn-s3-demo-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
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
描述 |
在表的主分支上保留的最小快照数。 此值优先于 |
允许的属性值 | 正数。 |
默认值 | 1 |
vacuum_max_snapshot_age_seconds
描述 | 要在主分支上保留的最大快照期限。如果 vacuum_min_snapshots_to_keep 指定的剩余最小快照比指定的时间长,则忽略此值。此表行为属性对应于 Apache Iceberg 配置中的 history.expire.max-snapshot-age-ms 属性。 |
允许的属性值 | 正数。 |
默认值 | 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://amzn-s3-demo-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 表属性 部分。
使用 AWS Glue 爬网程序
您可以使用 AWS Glue 爬网程序将您的 Iceberg 表自动注册到 AWS Glue Data Catalog。如果您想从其他 Iceberg 目录迁移,可以创建和安排 AWS Glue 爬网程序,并提供 Iceberg 表所在的 Amazon S3 路径。您可以指定 AWS Glue 爬网程序可以遍历的 Amazon S3 路径的最大深度。安排 AWS Glue 爬网程序后,爬网程序会提取架构信息,并在每次运行时使用架构更改更新 AWS Glue Data Catalog。AWS Glue 爬网程序支持跨快照合并架构,并更新 AWS Glue Data Catalog 中最新的元数据文件位置。有关更多信息,请参阅 AWS Glue 中的数据目录和爬网程序。