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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:03:31