SELECT key, value, GROUPING__ID, count(*)
FROM T1
GROUP BY key, value
GROUPING SETS ((), (key))
HAVING GROUPING__ID = 1
这个sql语句中Grouping__ID过滤不起作用,没有结果返回。下面是官方的解答:
问题描述:Filter on Grouping__ID does not work properly
类型: Bug
受影响的版本:1.3.0, 2.0.0
修复的版本:1.3.0, 2.0.0原因是SemanticAnalyzer(语义解析器)为GROUPING__ID列引入了“常量”占位符。 在执行时,此占位符将替换为GROUPING__ID的实际值。 由于该列是常量,因此Hive优化程序(PPD和常量折叠的组合)将静态评估条件是否满足,从而导致错误的结果。
我们应该能够识别占位符,并避免PPD将过滤谓词推给GroupBy运算符。
PS:我用的集群Hive版本是1.1.0的,按道理是不受影响的,但还是无法使用Grouping__ID过滤。后面把带有Grouping__ID的结果数据写到物理表中 或者 create temporary table,再从表中取数据对Grouping__ID过滤解决问题。