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

如何使用Python从本地CSV文件直接加载数据到BigQuery表

问题根因

load_table_from_uri()方法仅支持加载可通过云内URI寻址的数据源(如Google Cloud Storage对象、BigQuery内置数据集路径),无法直接读取本地文件系统上的文件,你当前代码传入本地路径bigquery-demo/csv_data.csv会被判定为无效资源地址,导致加载作业失败。

本地CSV直传BigQuery实现

不需要经过云存储中转,直接使用BigQuery Python客户端的load_table_from_file()方法,传入打开的本地文件对象即可完成加载,完整可运行代码如下:

from google.cloud import bigquery
from google.cloud.exceptions import NotFound

# 提前配置好鉴权:设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向服务账号密钥文件
client = bigquery.Client()
# 替换为你的目标表ID,格式为「项目ID.数据集名称.表名称」
table_id = "your-project.your-dataset.your-table"
local_csv_file = "bigquery-demo/csv_data.csv"

# 检查目标表是否已存在
try:
    client.get_table(table_id)
    print("Table {} already exists.".format(table_id))
except NotFound:
    print("Table {} is not found.".format(table_id))

# 加载作业配置,和你原有配置保持一致
job_config = bigquery.LoadJobConfig(
    autodetect=True,
    skip_leading_rows=1,
    source_format=bigquery.SourceFormat.CSV,
)

# 核心修改:以二进制读模式打开本地CSV文件,调用文件上传接口
with open(local_csv_file, "rb") as f:
    load_job = client.load_table_from_file(
        f,
        table_id,
        job_config=job_config
    )
    # 阻塞等待作业执行完成
    load_job.result()

# 打印加载结果
destination_table = client.get_table(table_id)
print("Loaded {} rows.".format(destination_table.num_rows))
注意事项
  • 运行脚本前必须完成鉴权配置:将拥有目标BigQuery数据集写入权限的服务账号密钥下载到本地,设置环境变量GOOGLE_APPLICATION_CREDENTIALS为该密钥文件的本地绝对路径
  • 该直传方式支持的单文件大小上限为10MB,如果你的CSV文件超过该阈值,需要拆分文件分批上传,或走云存储中转流程
  • 配置autodetect=True时,如果目标表不存在,BigQuery会自动根据CSV内容推断字段类型完成建表,不需要提前手动创建表结构

运行报错截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:57:19