如何在命令行执行自定义BigQuery SQL查询?含Python SDK实现方式
在命令行及Python SDK中执行BigQuery查询
一、命令行执行(使用bq工具)
前提是已安装并配置好Google Cloud SDK(完成gcloud init身份验证),有两种执行方式:
1. 直接在命令行运行
将SQL语句用双引号包裹,执行以下命令:
bq query --use_legacy_sql=false "WITH SNP_info AS ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier FROM `386212.dataset_1.SNPs`) SELECT * FROM SNP_info JOIN ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier, * FROM `bigquery-public-data.open_targets_genetics.variants`) variants ON SNP_info.identifier = variants.identifier"
注意:--use_legacy_sql=false必须添加,因为你的SQL使用的是标准SQL语法。
2. 通过SQL文件执行
把你的SQL语句保存为query.sql文件,然后执行:
bq query --use_legacy_sql=false < query.sql
二、Python SDK执行(使用google-cloud-bigquery库)
1. 准备工作
- 安装依赖库:
pip install google-cloud-bigquery
- 完成身份验证:可以通过设置环境变量
GOOGLE_APPLICATION_CREDENTIALS指向服务账号密钥文件,或者运行gcloud auth application-default login完成本地身份验证。
2. 示例代码
from google.cloud import bigquery # 初始化BigQuery客户端 client = bigquery.Client() # 定义查询语句 query = """ WITH SNP_info AS ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier FROM `386212.dataset_1.SNPs`) SELECT * FROM SNP_info JOIN ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier, * FROM `bigquery-public-data.open_targets_genetics.variants`) variants ON SNP_info.identifier = variants.identifier """ # 提交查询任务 query_job = client.query(query) # 获取并处理结果(示例:遍历输出) for row in query_job.result(): print(f"identifier: {row.identifier}, 其他字段: {row}")
三、其他执行方式
- BigQuery Web UI:直接在Google Cloud控制台的BigQuery界面中粘贴SQL语句,点击运行即可;
- Cloud Functions/Cloud Run:将查询逻辑封装成云函数或服务,实现定时/触发式执行;
- Terraform:通过基础设施即代码工具定义并执行BigQuery查询。
内容的提问来源于stack exchange,提问作者user3683485
相关产品推荐
相关产品推荐

