alitrack

DuckDB 现在能直接查你的云盘了

如果你的公司数据散落在 SharePoint、OneDrive、Google Drive 上,以前想用 SQL 统一查询,得先写脚本把文件下载到本地,或者走一些七拐八绕的中间层。

cloudfs 这个新扩展把这步省了。

它往 DuckDB 里注册了 6 种云存储协议,让你直接用 SELECT * FROM 'odfs://Documents/report.parquet' 这种语法查云盘上的文件,跟查本地文件一样。

● ● ●

支持哪些存储

协议对应服务
`odfs://`OneDrive
`spfs://`SharePoint
`gdfs://`Google Drive
`dbxfs://`Dropbox
`sftp://`SFTP 服务器
`vfs://`自建 VPS(通过 cloudfs-agent)

不是什么阉割版只读——Parquet、CSV、JSON、Delta Lake、Iceberg 全支持。COPY TO 也能用,查完直接写回去。

认证走 OAuth2,密钥存在 DuckDB 的 Secret Manager 里,不会明文躺在 CLI history 里(但文档也提醒了别傻乎乎把 client secret 直接写进 SQL)。

-- 加载扩展
LOAD cloudfs;

-- 配置认证
CREATE SECRET onedrive_secret (
    TYPE onedrive,
    PROVIDER config,
    CLIENT_ID 'your-client-id',
    CLIENT_SECRET 'your-client-secret'
);

-- 像查本地文件一样查 OneDrive 上的 Parquet
SELECT count(*), avg(amount)
FROM read_parquet('odfs://Documents/sales/2026/q2.parquet');

-- 列出目录
SELECT * FROM ls('spfs://TeamSite/Shared Documents/');

内置了 ls()、stat()、du() 三个表函数,浏览文件系统不用切出 SQL 环境。

缓存部分是 3 层 LRU + TTL,重复查询不用每次重新拉文件。

● ● ●

怎么装

目前走社区扩展源。装好 DuckDB 后:

INSTALL cloudfs FROM community;
LOAD cloudfs;

扩展本身用 C++ 写,依赖 libssl、libcurl、libssh2。Linux 上装好这些就能跑。

作者 brunolnetto 7 月 6 日提的 PR,第二天就合并进社区扩展仓库了。GitHub 上目前 2 个 star——典型的刚冒出来的实用工具,还没被注意到。

● ● ●

同时合并的还有这些

这波社区扩展 PR 合并不止 cloudfs 一个。

DICOM 扩展升到 v0.5.0(作者 nmontesg)。医学影像领域用的 DICOM 格式,现在多了 retrieve_dicom() 函数,能从远程设备直接拉完整影像数据集。之前只能读本地 DICOM 文件,这次打通了网络检索。

AI 扩展升到 0.4.0(作者 leonardovida)。新增了 llama.cpp server provider——不用 OpenAI API 也能让 DuckDB 跑本地模型了。SQL 自修正(bind-verified SQL self-correction)也加上了,生成的 SQL 出语法错会自动修。

● ● ●

值得关注但别急着上生产

cloudfs 目前有几个现实情况:

第一,2 个 star 的项目,生产环境的坑肯定还没踩完。OAuth token 刷新、大文件流式读取、各平台 API 限流——这些边角 case 大概率还没被充分测试。

第二,走的是社区扩展通道,不是 DuckDB 核心仓库。稳定性取决于作者维护意愿。

第三,依赖链不短——libssl、libcurl、libssh2 三个外部库,版本兼容问题迟早会冒出来。

但方向是对的。企业数据不在 S3 上的情况太多了——SharePoint 是很多公司的默认文档存储,OneDrive 和 Google Drive 是团队协作标配。以前要在这些上面跑分析,要么搬数据,要么写 ETL。cloudfs 给了一个"原地查"的选项,即使现在还粗糙,这思路值得盯着。


扩展源: github.com/trouchet/cloudfs

DuckDB 社区扩展: github.com/duckdb/community-extensions