DuckDB调用read_parquet读取MinIO中Parquet文件URL格式错误求助
问题排查与解决
核心原因
你的错误是因为DuckDB的S3参数配置错误,导致Bucket名与MinIO端点的拼接逻辑异常,同时端点格式带了多余的HTTP前缀,最终生成了错误的请求URL。
具体排查步骤
1. 修正S3端点格式
配置s3_endpoint时不要带http://或https://前缀,只保留IP和端口:
SET s3_endpoint='172.20.20.101:9000';
如果你的MinIO没配置SSL,还要关闭SSL验证:
SET s3_use_ssl=false;
2. 强制使用路径模式访问Bucket
MinIO默认使用路径模式(Bucket名放在URL路径中),但DuckDB默认用虚拟主机模式(Bucket名作为域名前缀),这是导致bucketname.http://xxx错误拼接的关键。必须添加以下配置:
SET s3_style='path';
3. 完整的正确配置示例
把所有必要的S3参数配置齐全后再读取文件:
-- 配置MinIO连接参数 SET s3_endpoint='172.20.20.101:9000'; SET s3_use_ssl=false; SET s3_access_key_id='你的MinIO访问密钥'; SET s3_secret_access_key='你的MinIO秘密密钥'; SET s3_region='us-east-1'; -- MinIO默认区域,可根据实际修改 SET s3_style='path'; -- 读取Parquet文件 SELECT * FROM read_parquet('s3://bucketname/sData/MarketDetails/Year=2024/1.parquet');
4. 额外验证项
- 确认MinIO的
bucketname存在,且文件路径sData/MarketDetails/Year=2024/1.parquet正确 - 检查Jupyter所在机器能访问MinIO的9000端口,没有防火墙或网络策略拦截
- 确认使用的MinIO密钥拥有该Bucket的读权限
内容的提问来源于stack exchange,提问作者Saumik
相关产品推荐
相关产品推荐

