Spark SQL ROLLUP和CUBE使用的注意事项
问题
假设有表src(d1, d2, m),其数据如下:
1 a 1 1 b 1 2 b 2
对于语句select d1, sum(d1) from src group by d1, d2 with rollup其结果如下:
NULL 0 1 2 2 2 1 1 1 1 2 2
对于以上结果的第一条为什么是(NULL,0)而不是(NULL,4)。
回答
在进行rollup和cube操作时,用户通常是基于维度进行分析,需要的是度量的结果,因此不会对维度进行聚合操作。
例如当前有表src(d1, d2, m),那么语句1“select d1, sum(m) from src group by d1, d2 with rollup”就是对维度d1和d2进行上卷操作计算度量m的结果,因此有实际业务意义,而其结果也跟预期是一致的。但语句2“select d1, sum(d1) from src group by d1, d2 with rollup”则从业务上无法解释。当前对于语句2所有聚合(sum/avg/max/min)结果均为0。
只有在rollup和cube操作中对出现在group by中的字段进行聚合结果才是0,非rollup和cube操作其结果跟预期一致。