Google BigQuery 简明入门:快速理解与实操案例

1,269 阅读4分钟

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;

结果示例:

nametotal_count
James500,000
Mary480,000
John460,000
Robert450,000
Patricia430,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 是数据科学家和分析师的得力助手。

欢迎尝试以上示例,动手操作是最快的学习方式!