如何使用BigQuery SQL代码上传CSV文件至BigQuery
用BigQuery SQL加载本地CSV文件的操作步骤
注意:纯BigQuery SQL无法直接读取本地文件,必须先把本地CSV上传到Google Cloud Storage(GCS),再通过SQL语句将数据加载到BigQuery表中。以下是具体操作流程:
步骤1:将本地CSV上传至GCS
使用bq命令行工具或gsutil完成上传,示例命令:
# 用bq工具上传 bq load --source_format=CSV --skip_leading_rows=1 gs://你的存储桶名/目标路径/文件名.csv # 用gsutil工具更直接 gsutil cp /本地文件路径/你的文件.csv gs://你的存储桶名/目标路径/
- 替换
/本地文件路径/你的文件.csv为本地CSV的实际路径 - 替换
gs://你的存储桶名/目标路径/为你的GCS存储桶及文件存放路径 - 确保已安装并配置好
bq/gsutil工具(完成GCP账号认证)
步骤2:用BigQuery SQL加载GCS中的CSV到表
方式1:创建新表并加载数据
CREATE OR REPLACE TABLE `你的项目ID.你的数据集.目标表名` OPTIONS( description="从GCS CSV加载的表" ) AS SELECT * FROM EXTERNAL_QUERY( "projects/你的项目ID/locations/你的区域/connections/你的连接名", "SELECT * FROM EXTERNAL_STORAGE('gs://你的存储桶名/目标路径/文件名.csv') WITH (FORMAT = 'CSV', SKIP_ROWS = 1)" );
方式2:使用LOAD DATA语句(更常用)
LOAD DATA INTO `你的项目ID.你的数据集.目标表名` FROM FILES ( format = 'CSV', uris = ['gs://你的存储桶名/目标路径/文件名.csv'], skip_leading_rows = 1 );
- 替换
你的项目ID、你的数据集、目标表名为实际的项目、数据集和表名称 skip_leading_rows根据CSV是否有表头设置(有表头设为1,无则设为0)- 若需指定列类型,可在
LOAD DATA中添加Schema定义,示例:
LOAD DATA INTO `你的项目ID.你的数据集.目标表名` ( id INT64, username STRING, register_date DATE ) FROM FILES ( format = 'CSV', uris = ['gs://你的存储桶名/目标路径/文件名.csv'], skip_leading_rows = 1 );
关键注意事项
- 确保GCS存储桶权限正确:BigQuery服务账号需要拥有存储桶的
storage.objects.get权限 - 若CSV使用非默认分隔符(如竖线
|),需在FILES参数中添加field_delimiter = '|'配置 - 若CSV包含特殊格式或嵌套字段,需额外指定对应的解析参数
内容的提问来源于stack exchange,提问作者JG K
相关产品推荐
相关产品推荐

