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

如何避免DuckDB中read_csv将空字符串转换为NULL?

DuckDB读取CSV时保留空字符串而非转为NULL的解决方法

问题场景

使用DuckDB读取包含空字符串字段的CSV文件时,默认配置会将空字符串(如"")转换为NULL,但需要保留原空字符串内容。

CSV样本数据

"path","comment"
"","[{""comment"":""grand total"",""updatedByUser"":"",""dateTime"":""2025-03-27 09:08:38"",""threadStatus"":null,""threadAssignee"":null}]"
"East","[{""comment"":""Sub total"",""updatedByUser"":"",""dateTime"":""2025-03-27 09:09:03"",""threadStatus"":null,""threadAssignee"":null}]"

原查询语句

SELECT * FROM read_csv('${path}', delim=',', header=True, columns={"path":"VARCHAR","comment":"VARCHAR"});

解决方法

DuckDB的read_csv函数默认将空字符串("")识别为NULL,通过指定nullstr参数为数据中不存在的特殊值,即可避免空字符串被转换为NULL,同时不影响真正的NULL值识别。

修改后的查询语句:

SELECT * FROM read_csv(
    '${path}', 
    delim=',', 
    header=True, 
    columns={"path":"VARCHAR","comment":"VARCHAR"},
    nullstr='__CUSTOM_NULL_MARKER__'
);

说明

  • nullstr参数用于定义被视为NULL的字符串,默认值为空字符串。将其设置为一个不会出现在CSV数据中的特殊字符串(如示例中的__CUSTOM_NULL_MARKER__),DuckDB就只会将匹配该标记的字段转为NULL,原空字符串会被保留为VARCHAR类型的空值。
  • 这种方法比读取后用COALESCE转换更准确,不会误将原本的NULL值转为空字符串,能精准区分空字符串和NULL。

内容的提问来源于stack exchange,提问作者Ms.anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:15:08