CSV导入BigQuery报错:双引号与重复分隔符问题怎么解决?
BigQuery加载非标准CSV报错解决方案
问题根因
Error: Data between close double quote (") and field separator.
该报错的触发原因是你的CSV文件存在两处不符合标准规范的格式问题:
- 双引号字段内部的嵌套双引号未完成标准化转义,部分字段如
"NO wonder it is good"B""中出现了裸双引号,解析器会误判此处为字段结束,后续的B字符被识别为引号外的非法内容 - 部分行存在多余的分隔符,字段数与表头不匹配
解决方案
方案1:调整加载配置兼容非标准格式(快速验证)
在原有的LoadJobConfig中补充2个核心参数即可适配大多数非标准CSV场景,修正后的配置如下:
job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, quote_character = '"', escape_character = "\\", # 识别反斜杠作为转义符,正确解析\"形式的嵌套引号 encoding='UTF-8', field_delimiter=';', write_disposition="WRITE_APPEND", skip_leading_rows=1, allow_jagged_rows=True, # 允许行字段数与表头不一致,缺失字段自动补NULL,多余字段自动忽略 allow_quoted_newlines=True # 可选配置,若引号字段内存在换行可添加该参数 )
方案2:预处理CSV文件(根治问题)
如果调整配置后仍有报错,建议先清洗源CSV文件:
- 统一转义规则:所有嵌套在双引号内部的双引号,统一替换为两个连续双引号(RFC 4180标准写法),比如将
"NO wonder it is good"B""修正为"NO wonder it is good""B""" - 校验每行字段数,移除多余的分隔符,保证每行的字段数与表头完全匹配
- 空值字段明确占位,避免出现连续无意义的分隔符
方案3:外部表中转加载(无需修改源文件)
如果无法修改源文件,可通过两步加载规避格式问题:
- 先将CSV创建为BigQuery外部表,配置时不指定
quote_character,所有字段全部设置为STRING类型,先把原始内容读入BigQuery - 用SQL字符串函数对数据做拆分、转义、清洗处理,处理完成后再写入正式业务表
内容的提问来源于stack exchange,提问作者exploding_data
相关产品推荐
相关产品推荐

