别再把 OLAP 和 SQL-on-Hadoop 搞混了!都是查数据,它们根本不是一回事
大家有没有遇到过这样一种情况?
老板上午开会突然问:
「今年华东地区销量为什么下降?」
「哪个产品线利润最高?」
「给我按客户、区域、月份、渠道切一下。」
结果你写了半天 SQL,Hive 跑了十几分钟,老板咖啡都喝完两杯了,结果还没出来。
于是有人开始说:
「是不是 Hadoop 太慢?」
「是不是 Hive 不行?」
其实,大多数时候,不是 Hive 慢,而是你用错了武器。
很多刚接触大数据的同学,总喜欢把 OLAP(多维分析) 和 SQL-on-Hadoop 当成同一种东西。
因为它们都会写 SQL。
因为它们都会查数据。
因为最后都能生成报表。
但实际上,它们解决的是两类完全不同的问题。
今天这篇文章,我们就聊聊:
OLAP 到底是什么?SQL-on-Hadoop 又是什么?为什么越来越多的大厂都是二者结合,而不是二选一?
一、先说结论
一句话总结:
OLAP 是一种分析思想。SQL-on-Hadoop 是一种计算方式。
很多人把它们放在一起比较,其实有点像:
汽车 VS 发动机
或者:
Excel 数据透视表 VS MySQL
压根不是一个维度。
举个例子。
假设公司一天产生:
1000 万订单
5000 万点击
2 亿行为日志
这些数据先进哪里?
一般都会先进:
Kafka
↓
HDFS
↓
Hive
到了 Hive 后,数据已经存好了。
接下来有两种玩法。
第一种:
Hive SQL
SELECT ...
GROUP BY ...
ORDER BY ...
这就是 SQL-on-Hadoop。
第二种:
把结果提前加工成 Cube。
然后:
地区
↓
城市
↓
门店
时间
↓
季度
↓
月份
商品
↓
品牌
↓
SKU
鼠标一点:
钻取(Drill Down)
上卷(Roll Up)
切片(Slice)
切块(Dice)
秒出结果。
这就是 OLAP。
所以:
SQL-on-Hadoop 更像加工厂。
OLAP 更像展示大厅。
二、SQL-on-Hadoop 到底干什么?
SQL-on-Hadoop,本质就是:
让不会 MapReduce 的人,也能操作 Hadoop。
早期 Hadoop 写程序:
Mapper
Reducer
Combiner
Partitioner
写一个统计 UV:
几百行代码。
后来 Hive 出来了。
直接:
SELECT
province,
COUNT(DISTINCT user_id)
FROM user_log
GROUP BY province;
是不是舒服多了?
后来又出现:
- Presto
- Trino
- Spark SQL
- Impala
- Drill
大家都有一个共同目标:
用 SQL 操作海量数据。
例如:
统计最近七天订单。
SELECT
order_date,
COUNT(*) AS total
FROM ods_order
WHERE order_date >= DATE_SUB(CURRENT_DATE,7)
GROUP BY order_date;
统计用户留存。
SELECT
register_day,
COUNT(user_id)
FROM dws_user_retention
GROUP BY register_day;
统计销售额。
SELECT
province,
SUM(amount)
FROM dws_sales
GROUP BY province;
全部都是 SQL。
但是注意。
这些 SQL:
都是现算。
数据越多:
CPU 越忙。
磁盘扫描越多。
网络 Shuffle 越多。
因此:
几十秒。
几分钟。
甚至几十分钟。
都很正常。
三、OLAP 为什么这么快?
很多人第一次接触 OLAP。
都会惊讶:
为什么点一下鼠标:
结果就出来了?
秘诀只有四个字:
提前计算。
举个例子。
假设老板天天问:
销售额
按:
年份
季度
月份
地区
城市
门店
商品
品牌
如果每次:
扫描100TB数据
肯定慢。
于是:
OLAP 会提前把所有聚合算好。
例如:
北京
2026
第一季度
手机
销售额
已经存在 Cube 里面。
查询时:
直接读取。
不用重新计算。
所以:
几十毫秒。
几百毫秒。
就出来了。
这也是为什么:
Power BI
FineBI
Tableau
Superset
很多 BI 系统:
背后都会配 OLAP 引擎。
四、举个最容易理解的例子
假设有订单表:
订单号 地区 商品 金额
001 华东 手机 5000
002 华南 电脑 8000
003 华东 耳机 500
如果使用 Hive。
每次:
SELECT
area,
SUM(amount)
FROM order_info
GROUP BY area;
都会重新跑。
而 OLAP。
可能已经存好了:
华东
销售额:
5500
所以:
查询:
0.1 秒
而 Hive:
可能:
30 秒
不是 Hive 差。
而是:
Hive 在算。
OLAP 在拿。
一个是在做饭。
一个是在端菜。
当然速度不同。
五、二者最大的区别到底在哪里?
下面这张表,基本可以帮助大家建立正确认知。
| 对比维度 | OLAP | SQL-on-Hadoop |
|---|---|---|
| 核心目标 | 快速多维分析 | 海量数据计算 |
| 数据处理方式 | 预聚合、Cube、列存 | 实时执行 SQL |
| 查询速度 | 毫秒级~秒级 | 秒级~分钟级 |
| 数据规模 | 百 GB ~ 数十 TB(依赖引擎) | TB ~ PB 级 |
| 是否适合交互分析 | 非常适合 | 一般 |
| 是否适合复杂 ETL | 不适合 | 非常适合 |
| 是否支持海量明细计算 | 一般 | 很强 |
| 使用场景 | BI、报表、驾驶舱 | 数仓、离线分析、数据处理 |
一句话总结:
SQL-on-Hadoop 擅长“算”,OLAP 擅长“查”。
六、真实企业一般都是怎么搭配的?
很多新人总喜欢问:
我到底学 Hive 还是学 OLAP?
实际上,大厂几乎不会只选一个。
典型的数据链路通常是这样:
业务系统
│
▼
Kafka / Flume
│
▼
ODS 原始层
│
▼
Hive / Iceberg / Hudi
│
▼
Spark SQL / Hive SQL
│
▼
DWD 明细层
│
▼
DWS 汇总层
│
▼
OLAP 引擎(ClickHouse、Doris、StarRocks)
│
▼
BI 看板 / 数据驾驶舱
这条链路其实体现了两类技术的分工:
- SQL-on-Hadoop 负责数据采集、清洗、宽表构建、指标计算,把海量原始数据变成可分析的数据资产。
- OLAP 引擎 负责高并发、低延迟查询,为管理层、自助分析平台和 BI 系统提供秒级响应。
如果把整个数据平台比作一家餐厅:
- SQL-on-Hadoop 是后厨,负责洗菜、切菜、烹饪,每一步都需要处理大量原材料。
- OLAP 是传菜窗口,菜已经准备好了,服务员只需要快速端到顾客面前。
很多企业把两者混为一谈,最后不是后厨被要求秒出菜,就是传菜窗口被迫现场炒菜,效率自然高不到哪里去。
七、什么时候该选 SQL-on-Hadoop?什么时候该选 OLAP?
我的经验是,可以记住下面这几个判断标准。
优先选择 SQL-on-Hadoop:
- 数据量达到 TB、PB 级,需要批量计算。
- 每天离线 ETL、数仓分层、指标加工。
- 需要复杂 Join、窗口函数、数据清洗。
- 对查询延迟要求不高,几分钟内返回可以接受。
例如:
SELECT
customer_id,
SUM(amount) AS total_amount,
RANK() OVER (
PARTITION BY province
ORDER BY SUM(amount) DESC
) AS sales_rank
FROM dwd_order_detail
GROUP BY customer_id, province;
这种涉及复杂聚合、窗口分析的任务,非常适合放在 SQL-on-Hadoop 引擎中离线执行。
优先选择 OLAP:
- 管理驾驶舱。
- BI 自助分析。
- 秒级甚至毫秒级响应。
- 多人同时在线查询。
- 多维钻取、切片、联动分析。
例如,用户点击页面上的「华东 → 浙江 → 绍兴 → 新昌 → 电子产品」,图表立即刷新,这就是 OLAP 的典型优势。
八、最后聊聊我的一点看法
这些年,大数据技术发展得越来越快,湖仓一体、实时数仓、向量数据库、新一代 OLAP 引擎层出不穷,但有一个现象始终没有改变:
优秀的数据平台,从来不是靠一种技术打天下,而是靠合理的架构分工。
很多团队花了很大力气优化 Hive SQL,却忽略了真正需要的是一个面向分析的 OLAP 层;也有团队一股脑把所有数据都塞进 OLAP,希望它既做 ETL 又做实时分析,最后反而把系统拖垮。
技术没有绝对的优劣,只有是否适合当前场景。
SQL-on-Hadoop 的价值,在于把海量数据加工成有价值的信息;OLAP 的价值,在于让这些信息能够被快速消费、快速决策。
当两者协同工作时,一个负责「生产」,一个负责「服务」,数据平台才能真正做到既能处理海量数据,又能支撑业务快速决策。
所以,下次再有人问你:“OLAP 和 SQL-on-Hadoop 到底谁更厉害?”
你可以告诉他:
它们不是竞争关系,而是搭档关系。一个负责算,一个负责查;一个解决效率问题,一个解决体验问题。真正成熟的数据平台,往往两者缺一不可。