如何修改Python脚本实现BigQuery结果打印与JSON导出
修改BigQuery Python脚本:打印部分结果并导出指定格式JSON
现有一段调用Google Cloud BigQuery的Python脚本,目前仅能打印identifier列,需要修改脚本实现两个功能:
- 查看/打印部分查询结果
- 将最终查询结果保存为指定格式的JSON文件
原脚本存在函数结构不完整、重复执行查询、变量引用错误等问题,以下是修正并实现需求后的完整代码:
from google.cloud import bigquery import json def query_stackoverflow(project_id="gwas-386212"): client = bigquery.Client(project=project_id) # 定义查询语句 query = """ WITH SNP_info AS ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier FROM `gwas-386212.gwas_dataset_1.SNPs_intergenic_vep_pha005199`) SELECT * FROM SNP_info JOIN ( SELECT CONCAT(CAST(rs_id AS string)) AS identifier, chr_id AS chr_id, position AS position, ref_allele AS ref, alt_allele AS alt, most_severe_consequence AS most_severe_consequence, gene_id_any_distance AS gene_id_any_distance, gene_id_any AS gene_id_any, gene_id_prot_coding_distance AS gene_id_prot_coding_distance, gene_id_prot_coding AS gene_id_prot_coding FROM `bigquery-public-data.open_targets_genetics.variants`) variants ON SNP_info.identifier = variants.identifier """ # 执行查询并获取结果 query_job = client.query(query) results = query_job.result() # 将查询结果转换为字典列表,适配目标JSON格式 result_list = [] for row in results: result_list.append(dict(row)) # 打印部分结果(示例为前5条,可自行调整数量) print("部分查询结果示例:") for item in result_list[:5]: print(item) # 保存结果为指定格式的JSON文件 output_file = "bigquery_results.json" with open(output_file, "w", encoding="utf-8") as f: json.dump(result_list, f, indent=2, ensure_ascii=False) print(f"查询结果已保存至 {output_file}") # 调用执行函数 if __name__ == "__main__": query_stackoverflow()
关键修改说明
- 补全函数结构,把所有逻辑封装到
query_stackoverflow函数内,避免变量作用域问题 - 修正查询执行逻辑:仅执行一次查询,通过
query_job.result()获取结果,避免重复发起请求 - 引入
json模块,将BigQuery行对象直接转为字典——由于JOIN后存在重复的identifier字段,BigQuery会自动将第二个重命名为identifier_1,正好匹配目标JSON格式 - 添加部分结果打印逻辑,可按需调整打印条数
- 实现JSON文件保存,通过
indent参数格式化输出,保证文件可读性
内容的提问来源于stack exchange,提问作者user3683485
相关产品推荐
相关产品推荐

