中间件速查手册
数据仓库与 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 只作为“通用方言”存在。

它出现在这些中间件里

相关概念