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

使用bq load导入JSON至BigQuery时多行记录加载失败求助

解决BigQuery加载含多行SQL的JSON记录失败问题

你遇到的问题本质是NEWLINE_DELIMITED_JSON格式要求每个完整JSON记录必须单独占一行,而sql_script字段里的换行符会把原本的单条JSON拆成多行,导致BigQuery无法识别完整的JSON结构。下面是几个实用的解决办法:

方法1:预处理JSON文件,转义换行符

用jq(专门处理JSON的命令行工具)批量把sql_script里的换行符转义成\n,确保整个JSON记录保持单行:

# 处理原文件并输出到新文件
jq '.sql_script = gsub("\n"; "\\n")' sample.json > processed_sample.json

然后用处理后的文件执行加载命令:

bq --project_id=ny_proj load --source_format=NEWLINE_DELIMITED_JSON my_data.table1 \
processed_sample.json schema.conf

这个方法最直接,不会破坏JSON的其他结构,适合大多数场景。

方法2:改用CSV格式加载

如果可以转换文件格式,把JSON转成CSV,将sql_script字段用双引号(或单引号)包裹,这样字段内的换行符不会被当作记录分隔符。加载时指定CSV格式:

bq --project_id=ny_proj load --source_format=CSV --quote='"' --field_delimiter=',' my_data.table1 \
sample.csv schema.conf

注意要确保CSV的字段分隔符和你的数据不冲突,同时schema.conf要和CSV的字段顺序对应。

方法3:直接用SQL解析原始文件(无需预处理)

如果不想修改原始JSON文件,先把文件上传到Google Cloud Storage(GCS),再用BigQuery的SQL直接读取解析:

CREATE TABLE my_data.table1 AS
SELECT
  -- 根据你的实际schema替换字段名和JSON路径
  JSON_EXTRACT_SCALAR(raw_json, '$.id') AS id,
  JSON_EXTRACT_SCALAR(raw_json, '$.sql_script') AS sql_script,
  JSON_EXTRACT_SCALAR(raw_json, '$.create_time') AS create_time
FROM
  `ny_proj.my_dataset.external_gcs_table` -- 指向GCS文件的外部表
-- 也可以直接用GCS路径:
-- FROM URI('gs://your-bucket/path/sample.json')

这种方法适合原始文件不能修改的场景,大文件时还能避免本地预处理的开销。

内容的提问来源于stack exchange,提问作者Saravana Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:27:37