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

BigQuery load_table_from_file无法加载90MB数据且无报错

问题排查与修复方案

一、代码中的致命问题

你的代码存在两处关键错误,直接导致异常被隐藏、加载逻辑失效:

  1. LoadJobConfig初始化语法错误:source_format和autodetect不应在初始化后赋值,且参数间缺少逗号分隔,这会导致配置完全未生效。
  2. 异常捕获逻辑缺失:仅捕获了load_table_from_file的异常且直接pass,完全忽略了job.result()阶段的加载错误;同时如果job创建失败,后续调用job.result()会引发未捕获的NameError。

二、修复后的代码

client = bigquery.Client('ncau-data-newsquery-sit')
dataset_id = 'test_dataset'
table_id = 'table'
dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)

# 修正JobConfig初始化方式
job_config = bigquery.LoadJobConfig(
    write_disposition=bigquery.WriteDisposition.WRITE_APPEND,
    source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,
    autodetect=True
)

with open(tempFile, "rb") as source_file:
    try:
        job = client.load_table_from_file(source_file, table_ref, job_config=job_config)
        # 将job.result()移入try块,捕获加载全流程异常
        job.result()
        print(f"Loaded {job.output_rows} rows into {dataset_id}:{table_id}.")
    except Exception as e:
        # 打印具体异常信息,不再静默忽略
        print(f"加载失败: {str(e)}")
        # 打印Job ID,方便去BigQuery控制台查详细日志
        if 'job' in locals():
            print(f"Job ID: {job.job_id}")

三、针对异常文件的排查步骤

  1. 验证NDJSON格式合法性:
    • 使用jq命令批量检查每行JSON:jq '.' your_file.jsonl,报错的行即为格式问题所在。
    • 确认所有行都是独立的JSON对象,无跨行结构、多余逗号或括号。
  2. 排查字段类型冲突:
    • 由于开启autodetect=True,若该月份数据中某字段类型与目标表已存在的字段类型不一致(比如之前是字符串,当前是数字),会触发加载失败。
    • 可临时创建测试表单独加载该文件,对比自动生成的Schema与目标表Schema的差异。
  3. 查看BigQuery Job日志:
    • 登录BigQuery控制台进入「作业历史」,找到对应加载Job,查看详细错误信息(比如某行JSON解析失败、字段长度超限等)。
  4. 拆分文件定位问题:
    • 将90MB的文件拆分为多个10MB左右的小文件分别加载,确认是整体文件问题还是特定行数据的问题。

内容的提问来源于stack exchange,提问作者Amarjeet Kushwaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:17