如何在非本地文件系统创建/连接DuckDB数据库文件?
如何在非本地文件系统中创建/连接DuckDB文件
DuckDB目前原生不支持直接通过fsspec路径、filesystem参数或类文件对象来连接非本地文件系统的数据库文件,默认只能操作本地文件系统里的文件。如果要在HDFS、S3这类远程存储中使用DuckDB,可以试试以下几种替代方案:
挂载远程存储到本地目录
用工具把远程存储挂载成本地路径,比如用s3fs挂载S3桶、用HDFS的本地挂载工具映射远程目录,之后就能像操作本地文件一样,用duckdb.connect("/挂载目录/my.db")来创建或连接数据库。利用DuckDB扩展实现数据交互
部分云存储可以通过DuckDB的扩展间接支持,比如针对S3的httpfs扩展。虽然没法直接连接S3上的DuckDB文件,但可以实现数据的导入导出,或者在内存库中处理后持久化到远程存储。示例代码:INSTALL httpfs; LOAD httpfs; -- 将本地表数据导出到S3 COPY (SELECT * FROM my_table) TO 's3://my-bucket/data.parquet'; -- 从S3导入数据到本地DuckDB COPY my_table FROM 's3://my-bucket/data.parquet';手动同步文件
适合操作频率低的场景:先把远程的DuckDB文件下载到本地,完成操作后再上传回远程存储。比如用hdfs dfs -get下载HDFS上的文件,操作完用hdfs dfs -put上传回去。
需要注意的是,直接在远程存储上读写DuckDB文件的原生支持目前还在社区讨论阶段,尚未正式推出。
内容的提问来源于stack exchange,提问作者tomanizer
相关产品推荐
相关产品推荐

