数据仓库与 OLAPHive 查询语言
HiveQL 是什么?
长得像 SQL,但语法和执行模型更接近批处理
类比:方言,和普通话(标准 SQL)八九不离十,但有些词用法不一样
和标准 SQL 的差别
HiveQL 支持大部分 SELECT 语法,也有 join、group by、窗口函数,但底层是批处理:没有行级更新、没有事务(ACID 表有限支持)、没有索引(只有分区和分桶裁剪)。
所以“一条 SQL 秒出结果”在 Hive 里基本不成立,它天生是分钟级的。
容易踩的坑
写法上的一点差别,可能就是全表扫和分区裁剪的距离。
- 分区字段不要用函数包住:`where dt = '2026-10-31'` 能裁剪,`where date_format(dt,...)` 不能
- join 时小表放右边(老版本),新版本有 CBO 会自动优化
- count(distinct) 在超大表上很慢,可以用近似去重或先聚合
- 避免 select *,列存格式下只读需要的列能快几倍
和 Spark SQL 的关系
Spark SQL 兼容大部分 HiveQL 语法,可以直接读 Hive 表。现在很多团队的写法是:用 Spark SQL 跑,用 Hive Metastore 管元数据,HiveQL 只作为“通用方言”存在。