2023年末,AWS 宣布了S3 Express One Zone,这是传统S3存储桶的高速变体。
DuckDB可以使用httpfs
扩展读取S3 Express One存储桶。
Credentials and Configuration
S3 Express One 存储桶的配置与常规 S3 存储桶类似,但有一个例外: 我们必须根据以下模式指定端点:
s3express-⟨availability zone⟩.⟨region⟩.amazonaws.com
其中⟨availability zone⟩
(例如,use-az5
)可以从S3 Express One存储桶的配置页面获取,而⟨region⟩
是AWS区域(例如,us-east-1
)。
例如,要允许DuckDB使用S3 Express One存储桶,请按如下方式配置Secrets管理器:
CREATE SECRET (
TYPE S3,
REGION 'us-east-1',
KEY_ID 'AKIAIOSFODNN7EXAMPLE',
SECRET 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
ENDPOINT 's3express-use1-az5.us-east-1.amazonaws.com'
);
实例位置
为了获得最佳性能,请确保EC2实例与您正在查询的S3 Express One存储桶位于同一可用区。要确定区域名称和区域ID之间的映射,请使用aws ec2 describe-availability-zones
命令。
-
区域名称到区域ID的映射:
aws ec2 describe-availability-zones --output json \ | jq -r '.AvailabilityZones[] | select(.ZoneName == "us-east-1f") | .ZoneId'
use1-az5
-
区域ID到区域名称的映射:
aws ec2 describe-availability-zones --output json \ | jq -r '.AvailabilityZones[] | select(.ZoneId == "use1-az5") | .ZoneName'
us-east-1f
Querying
您可以像查询任何其他S3存储桶一样查询S3 Express One存储桶:
SELECT *
FROM 's3://express-bucket-name--use1-az5--x-s3/my-file.parquet';
Performance
我们在一个c7gd.12xlarge
实例上运行了两个实验,使用了LDBC SF300 Comments creationDate
Parquet文件文件(也在性能指南的微基准测试中使用)。
实验 | 文件大小 | 运行时间 |
---|---|---|
仅从Parquet加载 | 4.1 GB | 3.5秒 |
从Parquet创建本地表 | 4.1 GB | 5.1秒 |
“仅加载”变体作为EXPLAIN ANALYZE
语句的一部分运行加载,以测量运行时间而不创建本地表,而“创建本地表”变体使用CREATE TABLE ... AS SELECT
在本地磁盘上创建一个持久表。