在0.10.0版本之前,DuckDB没有Secrets管理器。因此,S3端点的配置和认证是通过变量处理的。本文档记录了S3 API的旧版认证方案。
配置和认证S3端点的推荐方法是使用secrets。
旧版认证方案
为了能够从S3读取或写入,应设置正确的区域:
SET s3_region = 'us-east-1';
可选地,如果使用非AWS对象存储服务器,可以配置端点:
SET s3_endpoint = '⟨domain⟩.⟨tld⟩:⟨port⟩';
如果端点未启用SSL,则运行:
SET s3_use_ssl = false;
SET s3_url_style = 'path';
然而,请注意,这也可能需要更新端点。例如,对于AWS S3,需要将端点更改为s3.⟨region⟩.amazonaws.com
。
配置正确的端点和区域后,可以读取公共文件。要读取私有文件,可以添加认证凭据:
SET s3_access_key_id = '⟨AWS access key id⟩';
SET s3_secret_access_key = '⟨AWS secret access key⟩';
或者,也支持会话令牌,并且可以使用它来代替:
SET s3_session_token = '⟨AWS session token⟩';
aws
扩展 允许加载 AWS 凭证。
每个请求的配置
除了上述全局S3配置外,还可以在每个请求的基础上使用特定的配置值。这允许使用多组凭证、区域等。通过在S3 URI中包含它们作为查询参数来使用这些配置值。上面列出的所有单独配置值都可以设置为查询参数。例如:
SELECT *
FROM 's3://bucket/file.parquet?s3_access_key_id=accessKey&s3_secret_access_key=secretKey';
每个查询允许多种配置:
SELECT *
FROM 's3://bucket/file.parquet?s3_region=region&s3_session_token=session_token' t1
INNER JOIN 's3://bucket/file.csv?s3_access_key_id=accessKey&s3_secret_access_key=secretKey' t2;
Configuration
S3上传存在一些额外的配置选项,尽管默认值应该足以满足大多数用例。
此外,大多数配置选项可以通过环境变量设置:
DuckDB 设置 | 环境变量 | 备注 |
---|---|---|
s3_region |
AWS_REGION |
优先于 AWS_DEFAULT_REGION |
s3_region |
AWS_DEFAULT_REGION |
|
s3_access_key_id |
AWS_ACCESS_KEY_ID |
|
s3_secret_access_key |
AWS_SECRET_ACCESS_KEY |
|
s3_session_token |
AWS_SESSION_TOKEN |
|
s3_endpoint |
DUCKDB_S3_ENDPOINT |
|
s3_use_ssl |
DUCKDB_S3_USE_SSL |