You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DuckDB读取SMB存储的Delta表时触发DeltaKernel FFI错误

问题:DuckDB查询SMB驱动器上的Delta表触发FFI URL识别错误

在同一机器的同一Python内核中,用Polars将Delta表写入SMB网络驱动器后,使用DuckDB执行SQL查询时触发FFI错误,提示无法识别file://xxx.xxx.x.xxx/airflow/data/prices_delta/格式的URL。尝试过相对路径与绝对路径,相对路径可正常用于DuckDB扫描CSV/Parquet等操作,但查询Delta表时失效。

用户执行的代码如下:

delta_data_folder = '..\\..\\data\\prices_delta'
Query = f"""
    SELECT count(*)
    FROM delta_scan('{delta_data_folder}')
    WHERE 1=1
        AND year = 2024
        AND month = 8
        AND day = 29
"""
con = duckdb.connect(database = ":memory:")
con.execute(Query).df().head()

触发的错误信息:

IOException: IO错误:触发DeltaKernel FFI错误(来源:尝试读取Delta表时: '....\data\prices_delta/'):遇到错误:8(ObjectStoreError),消息为(与对象存储交互出错:通用URL错误:无法识别URL "file://xxx.xxx.x.xxx/airflow/data/prices_delta/")


解决方案

  • 直接使用SMB原生路径
    DuckDB的Delta插件处理SMB路径时,可能无法正确解析自动转换的file://格式,改用SMB原生路径(双反斜杠开头),同时用原始字符串避免转义问题:

    delta_data_folder = r'\\xxx.xxx.x.xxx\airflow\data\prices_delta'
    
  • 将SMB共享挂载为本地盘符
    把目标SMB共享目录挂载成本地盘符(比如Z:),之后用本地盘符路径访问,让DuckDB像处理本地文件一样读取Delta表:

    delta_data_folder = r'Z:\airflow\data\prices_delta'
    
  • 升级相关依赖版本
    旧版DuckDB或Delta插件对SMB路径支持可能存在缺陷,升级到最新版本:

    pip install --upgrade duckdb delta-kernel
    
  • 强制指定本地文件系统
    在delta_scan中通过file_system参数显式指定使用本地文件系统,避免插件将路径解析为远程URL:

    Query = f"""
        SELECT count(*)
        FROM delta_scan('{delta_data_folder}', file_system='local')
        WHERE 1=1
            AND year = 2024
            AND month = 8
            AND day = 29
    """
    

内容的提问来源于stack exchange,提问作者krewsayder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:45:07