Google BigQuery 是 Google Cloud 提供的一种无服务器(Serverless)、高性能、可扩展的企业级数据仓库。它能帮助你快速查询和分析海量数据,无需自己管理服务器或数据库基础设施,非常适合数据分析、商业智能和大数据处理。
1. BigQuery 基础概念
- 无服务器架构:你不需要购买、管理服务器,Google 自动帮你分配计算资源,按查询数据量计费。
- 支持标准 SQL:使用熟悉的 SQL 语言进行数据查询和分析。
- 高性能:可在几秒钟内查询 TB 级数据,支持 PB 级数据分析。
- 多语言支持:除了 SQL,还可以用 Python、Java、Go、Node.js 等语言调用 BigQuery API。
- 丰富的数据源:支持导入 CSV、JSON 等格式数据,也能直接查询 Google 提供的公共数据集。
2. 快速开始:准备工作
- 注册并登录 Google Cloud 账号。
- 创建一个 Google Cloud 项目。
- 在 Google Cloud 控制台启用 BigQuery API。
- (推荐)创建服务账户,下载 JSON 格式密钥,方便程序访问 BigQuery。
3. BigQuery 控制台界面介绍
- 导航菜单:管理项目、数据集、表。
- 资源浏览器:查看项目下的数据集和表。
- 详情面板:查看表结构、数据预览及查询结果。
4. 创建数据集和表
- 点击项目名称旁“创建数据集”,填写名称和数据存储区域(Region)。
- 创建数据表,可以导入 CSV、JSON 文件,也可以用 SQL 定义表结构。
- 也可以直接使用 Google 提供的公共数据集,快速体验查询功能。
5. 运行你的第一个 SQL 查询
在 BigQuery 控制台的查询编辑器中输入以下示例 SQL:
sql
SELECT name, post_abbr
FROM `bigquery-public-data.usa_names.usa_1910_2013`
LIMIT 10;
点击“运行”后,几秒钟内即可看到结果。
6. Python 调用 BigQuery 示例
安装客户端库
pip install --upgrade google-cloud-bigquery
Python 代码示例
from google.cloud import bigquery
# 初始化客户端(确保已设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向 JSON 密钥文件)
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words DESC
LIMIT 10
"""
results = client.query(query)
for row in results:
print(f"{row['title']}: {row['unique_words']}")
运行该脚本,你会看到莎士比亚作品中不同剧本的独特单词数量排行。
7. 更多实用技巧
- BigQuery 支持复杂 SQL 语法,如 JOIN、窗口函数、地理空间分析等。
- 查询结果会自动缓存,重复查询相同数据时更快且更省钱。
- 可以设置查询排程,定时自动执行查询任务。
- 与 Looker Studio(Google 数据可视化工具)结合,实现数据图表和报表展示。
- 支持通过 API 或多种编程语言进行数据操作,方便集成到你的应用中。
8. 典型场景示例
例1:统计某州最常见的名字(SQL)
SELECT name, SUM(number) AS total_count
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state = 'TX'
GROUP BY name
ORDER BY total_count DESC
LIMIT 5;
结果示例:
| name | total_count |
|---|---|
| James | 500,000 |
| Mary | 480,000 |
| John | 460,000 |
| Robert | 450,000 |
| Patricia | 430,000 |
例2:用 Python 加载 JSON 数据到 BigQuery
from google.cloud import bigquery
client = bigquery.Client()
dataset_id = 'your_project.your_dataset'
table_id = f'{dataset_id}.us_states_table'
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("name", "STRING"),
bigquery.SchemaField("post_abbr", "STRING"),
],
source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,
)
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"
load_job = client.load_table_from_uri(
uri,
table_id,
job_config=job_config,
)
load_job.result() # 等待加载完成
print(f"已加载数据到表 {table_id}")
9. 费用与性能指标
- BigQuery 按查询扫描的数据量收费,约为每 TB 5 美元(具体价格请参考官方)。
- 查询速度快,通常秒级响应 TB 级数据。
- 支持弹性扩展,无需预置资源,自动分配计算能力。
- 支持设置配额和预算,避免意外高额费用。
总结
Google BigQuery 是一个强大且易用的云端数据分析工具,适合处理大规模数据。通过简单的 SQL 查询或 Python 等语言调用,你可以快速完成数据分析任务,无需担心基础设施管理。配合丰富的公共数据集和可视化工具,BigQuery 是数据科学家和分析师的得力助手。
欢迎尝试以上示例,动手操作是最快的学习方式!