from google.cloud import bigquery import pandas as pd # --- 配置你的查询 --- # 1. 你的 GCP 项目 ID。客户端库通常会自动检测,但显式指定更可靠。 # 你可以在 GCP 控制台的首页找到它。 project_id = "pingcap-testing-account" # 2. 你要执行的 SQL 查询语句。 # 使用三引号可以方便地编写多行 SQL。 # 这里以查询公开数据集为例,你可以换成你自己的表。 sql_query = """ SELECT DATE(line_item_usage_start_date) as usage_date, line_item_product_code as aws_service, ROUND(SUM(line_item_unblended_cost), 2) as daily_unblended_cost, COUNT(*) as line_items, -- 显示费用类型(正费用/负费用) CASE WHEN SUM(line_item_unblended_cost) > 0 THEN 'Charge' WHEN SUM(line_item_unblended_cost) < 0 THEN 'Credit/Refund' ELSE 'Zero' END as cost_type FROM `gcp-digital-bi.aws_nonprod_billing_native.385595570414_aws_billing_data` WHERE DATE(line_item_usage_start_date) >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) -- 重要:不过滤 line_item_unblended_cost,包含所有正负费用 GROUP BY usage_date, aws_service HAVING daily_unblended_cost <> 0 -- 只显示有费用的记录 ORDER BY usage_date DESC, daily_unblended_cost DESC """ # 3. 你想保存的 CSV 文件名。 output_csv_file = "query_result.csv" # --- 执行代码 --- def query_bigquery_and_save_as_csv(): """ 执行 BigQuery 查询并将结果保存为 CSV 文件。 """ try: # 1. 创建 BigQuery 客户端。 # 它会自动使用应用默认凭据 (ADC) 进行认证。 # 如果你设置了 project_id,它会使用该项目执行作业。 client = bigquery.Client(project=project_id) print("BigQuery 客户端创建成功。") # 2. 执行查询。 # to_dataframe() 方法会运行查询并将结果直接下载为一个 Pandas DataFrame。 # 这是最简单、最高效的方式。 print(f"正在执行查询...") df = client.query(sql_query).to_dataframe() print("查询完成,成功获取数据。") # 3. 将 DataFrame 保存为 CSV 文件。 # index=False 表示不将 DataFrame 的索引写入 CSV 文件。 df.to_csv(output_csv_file, index=False, encoding='utf-8-sig') print(f"结果已成功保存到文件: {output_csv_file}") except Exception as e: print(f"发生错误: {e}") if __name__ == "__main__": query_bigquery_and_save_as_csv()