您可以将 Iceberg REST 客户端连接到 Amazon S3 表类数据存储服务 Iceberg REST 端点,然后进行 REST API 调用来创建、更新或查询 S3 表存储桶中的表。该端点实现了 Apache Iceberg REST Catalog Open API specification
注意
Amazon S3 表类数据存储服务 Iceberg REST 端点可用于访问 AWS Partner Network(APN)目录实现或自定义目录实现中的表。如果您只需要对单个表存储桶具有基本的读/写访问权限,也可以使用它。对于其它访问场景,我们建议使用 AWS Glue Iceberg REST 端点来连接表,这可以提供统一的表管理、集中化的治理和精细的访问控制。有关更多信息,请参阅 使用 AWS GlueIceberg REST 端点访问 Amazon S3 表
配置端点
您可以使用服务端点连接到 Amazon S3 表类数据存储服务 Iceberg REST 端点。S3 表类数据存储服务 Iceberg REST 端点具有以下格式:
https://s3tables.<REGION>.amazonaws.com/iceberg
有关区域特定的端点,请参阅 S3 表类数据存储服务 AWS 区域和端点。
目录配置属性
当使用 Iceberg 客户端将分析引擎连接到服务端点时,必须在初始化目录时指定以下配置属性。将占位符值
替换为您的区域和表存储桶的信息。
作为端点 URI 的区域特定的端点:
https://s3tables.<REGION>.amazonaws.com/iceberg
作为仓库位置的表存储桶 ARN:
arn:aws:s3tables:<region>:<accountID>:bucket/<bucketname>
用于身份验证的 Sigv4 属性。服务端点请求的 SigV4 签名名称为:
s3tables
以下示例演示如何配置不同的客户端以使用 Amazon S3 表类数据存储服务 Iceberg REST 端点。
要将 Amazon S3 表类数据存储服务 Iceberg REST 端点与 PyIceberg 结合使用,请指定以下应用程序配置属性:
rest_catalog = load_catalog( catalog_name, **{ "type": "rest", "warehouse":"arn:aws:s3tables:
<Region>:<accountID>
:bucket/<bucketname>
", "uri": "https://s3tables.<Region>
.amazonaws.com/iceberg", "rest.sigv4-enabled": "true", "rest.signing-name": "s3tables", "rest.signing-region": "<Region>
" } )
对访问端点进行身份验证和授权
对 S3 表类数据存储服务的服务端点的 API 请求使用 AWS 签名版本 4(SigV4)进行身份验证。请参阅适用于 API 请求的 AWS 签名版本 4,以了解有关 AWS SigV4 的更多信息。
Amazon S3 表类数据存储服务 Iceberg REST 端点请求的 SigV4 签名名称为:s3tables
对 Amazon S3 表类数据存储服务 Iceberg REST 端点的请求使用与 REST API 操作对应 s3tables
IAM 操作进行授权。这些权限可以在附加到表和表存储桶的基于 IAM 身份的策略或基于资源的策略中定义。有关更多信息,请参阅 S3 表类数据存储服务的访问管理。
您可以使用 AWS CloudTrail 跟踪通过 REST 端点向表发出的请求。请求将记录为其相应的 S3 IAM 操作。例如,LoadTable
API 将为 GetTableMetadataLocation
操作生成一个管理事件,并为 GetTableData
操作生成一个数据事件。有关更多信息,请参阅 使用 AWS CloudTrail 对 S3 表类数据存储服务进行日志记录。
前缀和路径参数
Iceberg REST 目录 API 在其请求 URL 中有一个自由格式前缀。例如,ListNamespaces
API 调用使用 GET/v1/{prefix}/namespaces
URL 格式。对于 S3 表类数据存储服务,REST 路径 {prefix}
始终是 url 编码的表存储桶 ARN。
例如,对于以下表存储桶 ARN:arn:aws:s3tables:
,前缀应为:us-east-1
:111122223333:bucket/bucketname
arn%3Aaws%3As3tables%3A
us-east-1
%3A111122223333
%3Abucket%2Fbucketname
命名空间路径参数
Iceberg REST 目录 API 路径中的命名空间可以有多级。但是,S3 表类数据存储服务仅支持单级命名空间。要访问多级目录层次结构中的命名空间,您可以在引用命名空间时连接到命名空间之上的多级目录。与使用多级命名空间相比,这可让任何支持 catalog.namespace.table
三部分表示法的查询引擎访问 S3 表类数据存储服务的目录层次结构中的对象,而不会出现兼容性问题。
支持的 Iceberg REST API 操作
下表包含支持的 Iceberg REST API 以及它们与 S3 表类数据存储服务操作的对应关系。
Iceberg REST 操作 | REST 路径 | S3 表类数据存储服务 IAM 操作 | CloudTrail EventName |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意事项和限制
以下是使用 Amazon S3 表类数据存储服务 Iceberg REST 端点时的注意事项和限制。
注意事项
CreateTable API 行为:此操作不支持
stage-create
选项,此选项会导致400 Bad Request
错误。这意味着无法使用CREATE TABLE AS SELECT
(CTAS)从查询结果创建表。DeleteTable API 行为:您只能删除启用了清除功能的表。不支持使用
purge=false
删除表,这会导致400 Bad Request
错误。某些版本的 Spark 即使在运行DROP TABLE PURGE
命令时也始终将此标志设置为 false。可以尝试使用DROP TABLE PURGE
或使用 S3 表类数据存储服务 DeleteTable 操作来删除表。-
该端点仅支持标准的表元数据操作。要进行表维护,例如快照管理和压缩,请使用 S3 表类数据存储服务维护 API 操作。有关更多信息,请参阅 S3 表类数据存储服务维护。
限制
不支持多级命名空间。
不支持基于 OAuth 的身份验证。
命名空间仅支持
owner
属性。不支持 Apache Iceberg REST Open API specification
中定义的与视图相关的 API。 不支持对
metadata.json
文件超过 5 MB 的表运行操作,否则将返回400 Bad Request
错误。要控制metadata.json
文件的大小,请使用表维护操作。有关更多信息,请参阅 S3 表类数据存储服务维护。