通过 Athena 注册 S3 表存储桶目录和查询表
Amazon S3 表存储桶是 Amazon S3 中的一种存储桶类型,专门用于存储 Apache Iceberg 表中的表格数据。表存储桶可自动执行压缩、快照管理和垃圾回收等表管理任务,从而持续优化查询性能并尽可能降低成本。无论您是刚开始使用,还是已经在 Iceberg 环境中拥有数千个表,表存储桶都能简化任意规模的数据湖。有关更多信息,请参阅 Table Buckets。
注意事项和限制
-
Iceberg 表支持的所有 DDL 操作都支持 S3 表,但以下情况除外:
-
不支持
ALTER TABLE RENAME
、CREATE VIEW
和ALTER DATABASE
。 -
OPTIMIZE
和VACUUM
– 您可以在 S3 中管理压缩和快照管理。有关更多信息,请参阅 S3 表维护文档。
-
-
不支持对注册为 Athena 数据来源的 S3 表进行 DDL 查询。
-
不支持重复使用查询结果。
-
在启用了 SSE-KMS、CSE-KMS 加密的工作组中,您无法在 S3 表上运行
INSERT
、UPDATE
、DELETE
或MERGE
之类的写入操作。 -
在启用了“S3 申请方付款”选项的工作组中,您无法在 S3 表上运行 DML 操作。
从 Athena 中查询 S3 表
在 Athena 中查询 S3 表之前,请完成以下前提步骤
创建一个 S3 表存储桶。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Creating a table bucket。
-
务必要按照《Amazon Simple Storage Service 用户指南》中 Prerequisites for integration 和 Integrating table buckets with AWS analytics services 部分的说明,将表存储桶与 AWS Glue Data Catalog 和 AWS Lake Formation 成功集成。
注意
如果您在步骤 1 中从 S3 控制台创建 S3 表存储桶时启用了集成,则可跳过此步骤。
对于您用于通过 Athena 运行查询的主体,请通过 Lake Formation 控制台或 AWS CLI 授予 Lake Formation 对 S3 表目录的权限。
提交对 S3 表的查询
使用上述获得授权的用户/角色从 Athena 提交
CREATE DATABASE
查询。在此示例中,s3tablescatalog
是通过集成创建的父级 Glue 数据目录,s3tablescatalog/
是为每个 S3 表存储桶创建的子 Glue 数据目录。查询的方法有两种。amzn-s3-demo-bucket
-
通过您在上一步中创建的数据库,使用
CREATE TABLE
创建表。以下示例将在您先前于s3tablescatalog/
Glue 目录中创建的amzn-s3-demo-bucket
数据库中创建一个表。test_namespace
-
将数据插入您在之前的步骤中创建的表。
-
向表中插入数据后,您可以对其进行查询。
在 Athena 中创建 S3 表
Athena 支持在现有的 S3 表命名空间或使用 CREATE DATABASE
语句在 Athena 中创建的命名空间中创建表。要从 Athena 创建 S3 表,语法要与创建常规 Iceberg 表时的语法相同,只是无需指定 LOCATION
,如以下示例所示。
CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] [TBLPROPERTIES ([, property_name=property_value] )]
您也可以使用 CREATE TABLE AS SELECT(CTAS)语句创建 S3 表。有关更多信息,请参阅 适用于 S3 表的 CTAS。
将 S3 表存储桶目录注册为 Athena 数据来源
要通过 Athena 控制台注册 S3 表存储桶目录,请执行以下步骤。
-
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 -
在导航窗格中,选择数据来源和目录。
-
在数据来源和目录页面上,选择创建数据来源。
-
在选择数据来源中,选择 Amazon S3 - AWS Glue Data Catalog。
-
在 AWS Glue Data Catalog 部分中,对于数据来源账户,选择此账户中的 AWS Glue Data Catalog。
-
对于创建表或注册目录,请选择注册新 AWS Glue 目录。
-
在数据来源详细信息部分中,对于数据来源名称,请输入用于在 SQL 查询中指定数据来源的名称,或者使用生成的默认名称。
-
对于目录,选择浏览来搜索同一账户中的 AWS Glue 目录列表。如果看不到任何现有目录,请通过 AWS Glue 控制台
创建一个。 -
在浏览 AWS Glue 目录对话框中,选择要使用的目录,然后选中选择。
-
(可选)对于标签,输入要与该数据来源关联的键值对。
-
选择下一步。
-
在检查并创建页面上,验证输入的信息是否正确,然后选择创建数据来源。
适用于 S3 表的 CTAS
Amazon Athena 现在支持对 S3 表执行 CREATE TABLE AS SELECT(CTAS)操作。此功能允许您根据 SELECT 查询的结果创建新的 S3 表。
在为 S3 表创建 CTAS 查询时,与标准 Athena 表相比,有一些重要的区别:
-
您必须省略位置属性,因为 S3 表会自动管理自己的存储位置。
-
table_type
属性的默认值为ICEBERG
,因此您无需在查询中显式指定该属性。 -
如果您不指定格式,系统将自动使用
PARQUET
作为数据的默认格式。 -
所有其他属性都遵循与常规 Iceberg 表相同的语法。
在使用 CTAS 创建 S3 表之前,请确保您已在 AWS Lake Formation 中配置必要的权限。具体而言,您需要在 S3 表目录中创建表的权限。如果没有这些权限,您的 CTAS 操作将失败。
注意
如果您的 CTAS 查询失败,您可能需要先使用 S3 表 API 删除表,然后再尝试重新运行查询。您无法使用 Athena DROP TABLE
语句删除由该查询部分创建的表。
示例
CREATE TABLE "s3tablescatalog/
amzn-s3-demo-bucket
"."namespace
"."s3-table-name
" WITH ( format = 'PARQUET' ) AS SELECT * FROMsource_table
;