BigQuery 云数据仓库

BigQuery

把几百亿行数据丢进去,用一句查询语句几秒钟就能算出结果,不用管服务器。

存储与数据出现时间 · 2010按查询扫描的数据量计费(每 TB 数美元),存储单独计费,另有按月包量的套餐。数据仓库ServerlessSQL海量分析
看官方文档

01 它是干嘛的

BigQuery 是云端的数据仓库,专门回答「从海量数据里算出统计结论」这一类问题。它不需要你先买机器、建索引、做调优,只要把数据导入、写一句查询语句,它自己分配算力把活干完。它解决的痛点是:传统数据仓库又贵又慢,扩容要提前几周规划,分析师经常要排队等资源。

02 为什么会有它

2010 年之前:查一次全量数据,要排队等到第二天

过去企业分析数据,要专门采购一批昂贵的一体机,价格以百万计。这批机器的容量是固定的,数据涨了要提前几个月申请采购、等设备到货、做迁移;分析师写一条复杂查询,常常要跑几十分钟甚至几小时,跑之前还得先问 DBA 有没有空闲。

为了让查询快一点,得建索引、做分区、调优化参数,这些都是专门技能,只有少数人能掌握。业务部门想临时看一个数据,往往要提需求、排队、等排期,等报告出来,商机早就过去了。

谷歌内部早就有一套处理海量日志的架构,可以在几秒内扫过万亿级别的数据。他们把这套能力做成产品对外开放,就是 BigQuery。它的思路是把难的部分全部藏起来:机器不用你买,容量随数据自动伸缩,查询用大家都熟悉的 SQL 语言。分析师第一次能像用 Excel 一样,直接对几百亿行数据下命令,几秒钟拿到结果,这在以前是不可想象的。

03 它怎么工作

关键有三点:数据按列分开存放,查询时只读需要的列;计算和存储分离,算力随时加;一条查询被拆成许多小任务,分给成千上万台机器同时干,最后汇总。

数据仓库的分层:数据只往上流① 定时同步② 清洗③ 聚合④ 出表业务数据库订单 / 用户表日志与埋点用户行为流水第三方数据广告 / 渠道回传原始层 ODS原样搬进来,不改动明细层 DWD清洗、去重、统一口径汇总层 DWS按天/按用户聚合应用层 ADS直接给业务用看板报表给运营和老板看模型训练喂给算法为什么要分层?因为「原始数据不干净、口径不统一」。先如实存下来,再逐层加工成可信的指标。对外服务层加工环节
看左侧「按列存储」的分栏结构,以及中间把查询切成许多小块分发到多台机器、右侧再逐层汇总的那组箭头——这正是「大查询跑得快」的全部秘密。

几百亿行数据,为什么几秒就能查完:列式存储与分布式执行

  1. 1
    ① 数据按列组织存储

    同一列的值连续存在一起。查询只用到少数几列时,就只需要读这几列的数据,跳过大量无关内容,这是速度快的第一层原因。

  2. 2
    ② 计算与存储分离

    数据静静地存在存储层,算力在使用时临时拉起。不用为了跑一次大查询而长期养着几百台机器,用完即释放。

  3. 3
    ③ 查询被拆成大量小任务

    一条语句被拆解成许多可以并行执行的小块,同时分发到成千上万台机器上处理,各自算自己那一部分。

  4. 4
    ④ 各节点并行扫描

    每台机器只读取自己负责的那部分列数据并做初步聚合,机器数量多、列读得少,使得扫描时间被压到很短。

  5. 5
    ⑤ 汇总返回结果

    各节点的中间结果被逐层合并,最终算出完整答案返回给用户。整个过程对用户透明,看到的只是「几秒钟出了结果」。

04 谁在用它

业务运营分析

统计每天的订单、活跃用户、留存率,运营人员自己写语句查,不必等技术团队排期出报表。

日志与埋点分析

把应用产生的海量日志导入后集中分析,排查异常、定位问题、观察功能使用情况。

实时大屏与看板

业务数据持续导入,配合可视化工具做成实时看板,管理者随时查看关键指标。

机器学习特征准备

在数据仓库里直接完成数据清洗与特征计算,供模型训练使用,避免数据来回搬运。

跨部门数据共享

把数据集授权给不同团队或外部合作方,在统一口径下各自分析,减少数据口径打架。

05 怎么用

会写基本 SQL 就能上手;导入数据、控制成本是需要额外学习的两件事。

  1. 01在云控制台创建一个数据集,它是容纳表与查询结果的容器,需要指定数据存放的地区。
  2. 02把数据导入:可以从文件直接上传,也可以从其他数据库、日志服务持续流入。
  3. 03在网页查询框里写 SQL 语句直接查询,结果会显示在下方并可导出或另存为表。
  4. 04用分区与簇化按时间或常用字段组织大表,让查询只扫描相关数据,显著降低费用。
  5. 05为团队设置权限与预算上限,监控有哪些查询消耗最多,及时优化成本最大的语句。
一条典型的分析查询sql
-- 统计每个渠道在最近 7 天带来的订单数与金额
SELECT
  channel,
  COUNT(*)            AS order_count,
  SUM(amount)         AS total_amount
FROM
  `my_project.sales.orders`
WHERE
  order_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
GROUP BY
  channel
ORDER BY
  total_amount DESC;

避坑提示

  • !计费主要看「查询扫描了多少数据」,写语句时只选需要的列、加上时间范围过滤,能省下大量费用。
  • !大表务必按时间分区,否则每次查询都会扫描全部历史数据,又慢又贵。
  • !先用少量数据抽样验证语句逻辑,再对全量数据运行,避免一条错误语句烧掉大笔费用。

06 关键概念

数据仓库
专门为统计分析准备的数据库,适合一次性读取大量数据做汇总,而不是日常逐条增删改。
列式存储
按列而不是按行存放数据,查询只读需要的列,因此分析类查询特别快。
Serverless
你不需要预先购买和运维服务器,平台按需自动分配算力,用完即释放。
分区表
把一张大表按时间等维度切成许多小块,查询时只需扫描相关的块,又快又省。

07 容易混淆的对比

Snowflake同为云上 Serverless 数据仓库,跨云支持好,生态与合作伙伴丰富。
传统数据仓库(如 Teradata)性能强、稳定可控,但采购与扩容成本高、周期长,适合极大规模的自建场景。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态