DuckDB查询含换行符CSV文件的问题求助
解决DuckDB读取含换行符CSV时的未终止引号报错及还原换行符问题
针对DuckDB读取含换行符的CSV文件时出现的“未终止双引号”报错,同时需要保留原换行符的需求,以下是两种可行方案:
方案1:使用read_csv手动指定解析参数
read_csv_auto的自动参数推断可能误将引号内的换行识别为行终止符,改用read_csv并明确设置CSV解析规则,能精准处理带换行的字段:
SELECT * FROM read_csv( '目标文件路径.csv', quote='"', -- 指定字段包裹符为双引号 escape='"', -- 遵循CSV标准:用双引号转义字段内的双引号 newline='auto', -- 自动识别文件中的换行符类型 header=true -- 若文件包含表头需开启此选项 );
此方法会将引号内的换行保留为字段内的原生内容,既不会触发报错,也无需手动进行转义/反转义操作。
方案2:给read_csv_auto补充关键参数
如果习惯使用read_csv_auto,只需补充指定quote和escape参数,即可修正自动推断的错误逻辑:
SELECT * FROM read_csv_auto( '目标文件路径.csv', quote='"', escape='"', newline='auto' );
read_csv_auto会基于指定的规则解析文件,正确识别引号包裹的含换行字段,同时完整保留原换行符。
关键原理说明
CSV规范中,双引号包裹的字段内允许包含换行符,解析时需通过quote参数识别字段边界,escape参数处理字段内的双引号转义。之前修改换行符选项无效,是因为该选项控制的是整个行的终止符,而非字段内的换行识别逻辑。
内容的提问来源于stack exchange,提问作者user3896248
相关产品推荐
相关产品推荐

