使用DuckDB读取S3存储桶中GBIF数据时遭遇404错误的技术求助
DuckDB读取S3存储桶中GBIF数据时遭遇404错误的技术求助
看起来你在尝试用DuckDB读取GBIF托管在AWS S3上的公开物种分布数据时碰了壁,连续两次404错误确实闹心——毕竟官方说这个桶是公开可访问、不需要凭证的。我来帮你排查几个大概率的问题:
最容易忽略的拼写错误
你写的文件名是occurence.parquet,但正确拼写应该是occurrence.parquet(注意中间是两个r:occurrence),少一个r直接导致文件找不到,这是404错误的高频诱因。路径格式完全错了
你后来尝试的URL里加了index.html#,这完全是画蛇添足——S3存储桶的文件访问不需要通过网页索引,那种带#的是网页端的锚点,根本不是实际的文件路径。日期目录可能还不存在
你指定的日期是2025-06-01,这个日期说不定还没有对应的数据集(比如当前时间还没到,或者GBIF还没同步该日期的数据)。你可以先用DuckDB的ls命令确认路径下的实际内容:
INSTALL httpfs; LOAD httpfs; -- 先查看occurrence目录下的所有可用日期 SELECT * FROM ls('s3://gbif-open-data-us-east-1/occurrence/'); -- 再查看某个存在的日期下的文件 SELECT * FROM ls('s3://gbif-open-data-us-east-1/occurrence/[实际存在的日期]/');
给你一套调整后的正确操作流程:
- 先把文件名里的
occurence改成occurrence,修正拼写 - 用
ls命令确认你要访问的日期目录和文件确实存在 - 用标准S3路径格式执行查询,示例如下:
INSTALL httpfs; LOAD httpfs; -- 假设2024-12-01是已存在的日期目录 SELECT * FROM read_parquet('s3://gbif-open-data-us-east-1/occurrence/2024-12-01/occurrence.parquet') LIMIT 5;
另外补充个小提示:GBIF的这个S3桶确实是公开只读的,不需要配置任何AWS访问密钥,只要DuckDB的httpfs扩展正常加载就能访问,不用在凭证上浪费时间。如果还是有问题,可以检查下你的DuckDB版本是不是太老,旧版本可能对S3路径的解析有bug。
内容来源于stack exchange
相关产品推荐
相关产品推荐

