Hive 2.3.9版本grouping__id计算逻辑变更疑问
Hive 2.3.9中grouping__id规则变更说明
是的,Hive确实对grouping__id的生成规则做了变更,从2.3.0版本开始,该逻辑就调整为与Spark、SQL标准对齐的实现。
新旧规则对比
针对你提到的GROUP BY a,b配合GROUPING SETS(a, b, (a,b))的场景:
- 旧版本规则:从低位到高位默认全0,维度出现在分组集中则设为1,最后转十进制:
- 按a分组:仅a出现 → 二进制
01→ 十进制1 - 按b分组:仅b出现 → 二进制
10→ 十进制2 - 按a,b分组:两者都出现 → 二进制
11→ 十进制3
- 按a分组:仅a出现 → 二进制
- 2.3.0+新版本规则:从低位到高位默认全0,维度**被聚合(即不在当前分组集中)**则设为1,最后转十进制:
- 按a分组:b被聚合 → 二进制
01→ 十进制1 - 按b分组:a被聚合 → 二进制
10→ 十进制2 - 按a,b分组:两者都未被聚合 → 二进制
00→ 十进制0
- 按a分组:b被聚合 → 二进制
变更原因
这次调整主要是为了兼容SQL:2003标准中关于GROUPING SETS的定义,同时对齐Spark等其他大数据计算引擎的行为,降低跨引擎迁移时的适配成本。
内容的提问来源于stack exchange,提问作者Tang Chen
相关产品推荐
相关产品推荐

