cube
数据立方体(Data Cube),是多维模型的一个形象的说法.(关于多维模型这里不讲述,在数据仓库设计过程中还挺重要的,有兴趣自行查阅)
立方体其本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度
为什么叫数据立方体?
一方面是出于更方便地解释和描述,同时也是给思维成像和想象的空间;
另一方面是为了与传统关系型数据库的二维表区别开来
下图为数据立方体的形象图
其实并不用把cube理解得很高大上,只要理解为分别按照不同维度进行聚合.
hive中也有cube函数,可以实现多个任意维度的查询
cube(a,b,c)则首先会对(a,b,c)进行group by,
然后依次是(a,b),(a,c),(a),(b,c),(b),(c),最后在对全表进行group by,他会统计所选列中值的所有组合的聚合
用cube函数就可以完成所有维度的聚合工作.
语法
select col1,col2,col3,col4, --维度字段
count(user_id), --聚合字段
GROUPING__ID, --聚合选取的组号(二进制表示,但是这里打印出来的是十进制)
rpad(reverse(bin(cast(GROUPING__ID AS bigint))),4,'0') --对其二进制化就能明白了,注意中间是两个下划线,因为在反转的时候会把末尾的0去掉,需要用rpad补充至维度个数