最近优化一段sql,业务需求是按维度字段进行全排列汇总指标。粗略算了一下大约有十几种维度组合,如果按组合分类分别进行汇总,代码特别臃肿,现在使用Hive中的grouping sets对sql进行优化。
另外,因为应用组需要按组合维度进行筛选,需要添加一个字段指明维度字段。这里用到了grouping__id(注意这里是两个英文"_"组合到一起)。计算规则就是:
先列出维度字段,如果该字段参与维度计算,则默认0;如果不参与维度计算,则默认1。然后获得其组合起来的二进制数转换为对应的十进制,就是grouping__id的值,这样我们就可以根据grouping__id的值判断当前行属于哪个维度了。
具体可以参考以下示例理解: