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

基于dbt-duckdb读取Parquet文件报错求助(本地/S3场景)

解决dbt-duckdb连接Parquet文件时的IO Error问题

问题描述

尝试用dbt-duckdb构建以Parquet为数据源的dbt pipeline,目标读取S3桶中的文件,测试本地运行时执行dbt debug报错:

IO Error: The file ".../sources/energy.parquet" exists, but it is not a valid DuckDB database file!

错误原因

profiles.yml中的path参数是用来指定DuckDB数据库文件的路径(可本地文件或内存数据库),而非Parquet文件路径。你把Parquet文件路径填在这里,导致dbt误将其当作DuckDB数据库文件尝试打开,触发错误。

解决方案

1. 修正profiles.yml配置

将path改为DuckDB数据库文件路径(比如本地文件./duckdb.db,或内存数据库:memory:),保留扩展和S3配置:

transform_dbt:
  outputs:
    dev:
      type: duckdb
      path: ./duckdb.db  # 替换为DuckDB数据库路径,用:memory:则为内存模式
      extensions:
        - httpfs
        - parquet
      settings:
        s3_region: my-aws-region
        s3_access_key_id: "{{ env_var('S3_ACCESS_KEY_ID') }}"
        s3_secret_access_key: "{{ env_var('S3_SECRET_ACCESS_KEY') }}"
  target: dev

2. 修正sources.yml配置

DuckDB读取Parquet无需指定Parquet的"schema",直接在identifier中填写Parquet文件路径即可:

本地Parquet文件示例

version: 2

sources:
  - name: local_sources
    tables:
      - name: energy
        identifier: './sources/energy.parquet'

S3上的Parquet文件示例

version: 2

sources:
  - name: s3_sources
    tables:
      - name: energy
        identifier: 's3://bucket/energy.parquet'

补充说明

  • 使用:memory:作为path时,每次运行dbt都会重新加载Parquet数据,适合快速测试;使用本地db文件会缓存数据,后续运行速度更快。
  • dbt-duckdb会自动加载httpfs和parquet扩展,确保这两个扩展已正确安装(通常dbt-duckdb会自带)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:34