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

使用DuckDB导出Parquet时列名异常修改的问题咨询

DuckDB导出Parquet列名异常排查(Node.js环境)

现象回顾

在Ubuntu 23.04系统中,通过Node.js操作DuckDB内存实例,创建含_id、str、num列的表并插入数据后:

  • 导出为CSV文件时列名完全正常;
  • 导出为Parquet文件时,用parquet-tools查看发现:非下划线开头的列首字母被大写(如str→Str),下划线开头的列被添加PARGO_PREFIX_前缀(如_id→PARGO_PREFIX__id)。

排查方向及解决方法

  • 检查DuckDB Parquet导出默认配置
    DuckDB默认开启了两个Parquet导出参数:parquet_uppercase_names和parquet_prefix_underscore_names,这正是导致列名被篡改的原因——前者将列名首字母转为大写,后者给下划线开头的列添加指定前缀,而CSV导出不受这两个参数影响。
    解决方式:导出前显式关闭这两个配置,示例SQL:

    SET parquet_uppercase_names = false;
    SET parquet_prefix_underscore_names = false;
    COPY your_table_name TO 'output.parquet' (FORMAT PARQUET);
    
  • 确认Node.js端DuckDB版本兼容性
    部分旧版本的DuckDB Node.js绑定可能存在配置参数默认值异常或bug,建议将@duckdb/duckdb-node包更新到最新稳定版,再重新测试导出逻辑。

  • 显式指定导出参数
    避免依赖默认配置,在COPY语句中直接指定参数,确保列名保留原始格式:

    const db = new duckdb.Database(':memory:');
    // 创建表、插入数据逻辑...
    db.run(`COPY your_table TO 'output.parquet' (FORMAT PARQUET, parquet_uppercase_names false, parquet_prefix_underscore_names false);`);
    
  • 验证parquet-tools的准确性
    偶尔parquet-tools的解析展示可能存在偏差,可以用DuckDB直接读取导出的Parquet文件,执行SELECT * FROM 'output.parquet';查看列名是否正常,排除工具本身的显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:33:16