使用 AWS 托管式表存储桶 - Amazon Simple Storage Service

使用 AWS 托管式表存储桶

AWS 托管式表存储桶是专用的 S3 表存储桶,旨在存储 AWS 托管式表,例如使用 S3 元数据加快数据发现速度日记表和实时清单表。与您直接创建和管理的客户管理的表存储桶不同,AWS 托管式表存储桶是在您配置需要 AWS 托管式表的功能时由 AWS 自动预置的。创建托管式表时,它们属于基于无法修改的源存储桶的预定义命名空间。每个 AWS 账户在每个区域都有一个 AWS 托管式表存储桶,并且遵循命名约定 aws-s3。该存储桶用作与该区域中账户的资源相关联的所有托管式表的集中位置。

下表将 AWS 托管式表存储桶与客户管理的表存储桶进行比较。

功能 AWS 托管式表存储桶 客户管理的表存储桶
创建 由 AWS 服务自动创建 可以手动创建这些存储桶
命名 使用标准命名约定(aws-s3) 您自行定义名称
表创建 只有 AWS 服务才能创建表 您可以创建表
命名空间控制 您无法创建或删除命名空间(所有表均属于固定的命名空间) 您可以创建和删除命名空间
访问 只读访问权限 完全访问
加密 仅当使用客户自主管理型 AWS KMS 密钥加密初始表时,才能更改默认加密(SSE-S3)设置。 可以设置存储桶级别的默认加密并随时进行修改
Maintenance 由 AWS 服务管理 可以在存储桶级别自定义自动维护

创建 AWS 托管式表存储桶的权限

要使用 AWS 托管式表存储桶,您需要具有创建 AWS 托管式表存储桶和表、为 AWS 托管式表指定加密设置的权限以及用于查询表的基本读取权限。

以下是支持您通过服务配置创建 AWS 托管式表存储桶的示例策略:

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PermissionsToWorkWithMetadataTables", "Effect":"Allow", "Action":[ "s3:CreateBucketMetadataTableConfiguration", "s3tables:CreateTableBucket", "s3tables:CreateNamespace", "s3tables:CreateTable", "s3tables:GetTable", "s3tables:PutTablePolicy" "s3tables:PutTableEncryption", "kms:DescribeKey" ], "Resource":[ "arn:aws:s3:::bucket/amzn-s3-demo-source-bucket", "arn:aws:s3tables:region:111122223333:bucket/aws-s3", "arn:aws:s3tables:region:111122223333:bucket/aws-s3/table/*" ] } ] }

以下是支持您查询 AWS 托管式表存储桶中的表的示例策略:

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PermissionsToWorkWithMetadataTables", "Effect":"Allow", "Action":[ "s3tables:GetTable", "s3tables:GetTableData", "s3tables:GetTableMetadataLocation", "kms:Decrypt" ], "Resource":[ "arn:aws:s3tables:region:111122223333:bucket/aws-s3", "arn:aws:s3tables:region:111122223333:bucket/aws-s3/table/*" ] } ] }

查询 AWS 托管式表存储桶中的表

可以使用 S3 表支持的访问方法和引擎来查询 AWS 托管式表存储桶中的 AWS 托管式表。下面是一些示例查询

Using standard SQL

以下示例说明如何使用标准 SQL 语法查询 AWS 托管式表。

SELECT * FROM "s3tablescatalog/aws-s3"."b_amzn-s3-demo-source-bucket"."inventory" LIMIT 10;

以下示例说明如何将 AWS 托管式表与您自己的表联接。

SELECT * FROM "s3tablescatalog/aws-s3"."b_amzn-s3-demo-source-bucket"."inventory" a JOIN "s3tablescatalog/amzn-s3-demo-table-bucket"."my_namespace"."my_table" b ON a.key = b.key LIMIT 10;
Using Spark

以下示例说明如何使用 Spark 查询表。

spark.sql(""" SELECT * FROM ice_catalog.inventory a JOIN ice_catalog.my_table b ON a.key = b.key """).show(10, true)

以下示例说明如何将 AWS 托管式表与另一个表联接。

SELECT * FROM inventory a JOIN my_table b ON a.key = b.key LIMIT 10;

AWS 托管式表存储桶的加密

默认情况下,AWS 托管式表存储桶通过使用 Amazon S3 托管式密钥的服务器端加密(SSE-S3)进行加密。在创建 AWS 托管式表存储桶后,可以使用 PutTableBucketEncryption 来将存储桶的默认加密设置设为使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)。

在创建 AWS 托管式表期间,可以选择使用 SSE-KMS 对其进行加密。如果选择使用 SSE-KMS,则必须提供与 AWS 托管式表存储桶位于同一区域的客户自主管理型 KMS 密钥。只能在创建 AWS 托管式表的过程中为表设置加密类型。创建 AWS 托管式表后,无法更改其加密设置。

如果您希望 AWS 托管式表存储桶和存储在其中的表使用相同的 KMS 密钥,请确保在创建表存储桶后,使用您用于加密表的 KMS 密钥对其进行加密。将表存储桶的默认加密设置更改为使用 SSE-KMS 后,这些加密设置将用于将来在存储桶中创建的任何表。