Windows环境下R中加载DuckDB的httpfs扩展失败求助
在Windows系统使用R 4.2.1和DuckDB 0.8.1-3时,尝试通过R代码从互联网读取JSON数据到DuckDB,执行代码时提示无法加载httpfs.duckdb_extension模块,尽管该文件已存在于对应目录中。
使用的代码
library(duckdb) library(DBI) con <- dbConnect(duckdb::duckdb(), ":memory:") stmt <- paste( "INSTALL httpfs; LOAD httpfs;", "INSTALL json;", "LOAD json;", "select * from read_json_auto('https://openalex.s3.amazonaws.com/data/authors/updated_date%3D2023-07-21/part_000.gz', format='newline_delimited', compression='gzip') limit 100;" ) x <- dbGetQuery(con, stmt)
错误信息
Error: IO Error: Extension "C:\Users\karsten.w\AppData\Roaming\R\data\R\duckdb.duckdb\extensions\v0.8.1\windows_amd64_rtools\httpfs.duckdb_extension" could not be loaded: Das angegebene Modul wurde nicht gefunden.
(翻译:指定的模块未找到)
解决方法
1. 安装Visual C++运行时库
DuckDB的Windows扩展依赖Visual C++ Redistributable,缺失会导致模块加载失败。安装对应x64版本的Visual C++ Redistributable for Visual Studio 2019/2022,重启R后重试。
2. 显式指定扩展加载路径
修改连接代码,手动设置扩展目录路径,跳过重复INSTALL步骤:
library(duckdb) library(DBI) # 替换为你的实际扩展目录路径 ext_dir <- "C:\\Users\\karsten.w\\AppData\\Roaming\\R\\data\\R\\duckdb\\.duckdb\\extensions\\v0.8.1\\windows_amd64_rtools" con <- dbConnect(duckdb::duckdb(), ":memory:", config = list("extension_directory" = ext_dir)) stmt <- paste( "LOAD httpfs;", "LOAD json;", "select * from read_json_auto('https://openalex.s3.amazonaws.com/data/authors/updated_date%3D2023-07-21/part_000.gz', format='newline_delimited', compression='gzip') limit 100;" ) x <- dbGetQuery(con, stmt)
3. 升级/降级DuckDB版本
0.8.1版本的DuckDB在Windows上存在扩展加载兼容性问题,尝试切换到稳定版本:
# 卸载当前版本 remove.packages("duckdb") # 安装0.7.1版本(已知兼容Windows) install.packages("duckdb", version = "0.7.1", repos = "https://cran.r-project.org")
4. 检查目录权限
右键以管理员身份启动R/RStudio,重新执行代码,确认是否因权限不足导致无法读取扩展文件。
5. 手动替换扩展文件
从DuckDB官方发布页面下载对应0.8.1版本的Windows x64版httpfs.duckdb_extension文件,替换本地目录中已有的文件后重试。
内容的提问来源于stack exchange,提问作者Karsten W.

