提示
Hive SQL 教程 欢迎使用。提供建议、纠错、催更等加作者微信: gairuo123(备注:sql )和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析中,多维数据分析是最为常见的数据分析模型之一,我们在编写 SQL 时,往往确定了最细粒度的维度组合,在不同层级的维度上进行分析也是我们需要的。Hive SQL 支持 CUBE 关键字形成多维分析数据。
假定我们在做数据分析时有两个维度 a 和 b(group by a, b),通过 SQL 执行得结果为限制 a b 条件下的最细指标值,但我们通常需要看 a 的、b 的、ab 的和全部的,就需要编写执行三次 SQL 才能得到结果。CUBE 可以让我们一次性执行,得到以上全部结果。
此操作相当于根据 group by 维度的所有组合(笛卡尔积)进行聚合。
举个实际的例子,互联网产品在计算 UV 时,按日为维度 UV 有 100 人,按周为维度时 UV 肯定小于等于 700。因此,更少的维度不是更多的维度指标简单相加或者直接计算而得到,应按实际情况重新计算得出。以下展示了一个复杂的、多维度的数据模型。
简单的用法示意如下:
select gender,
class,
age,
count(name) as cnt
from user_info
group by gender, class, age
with cube;
在分组过程中,对应分组位上无维度值的为 NULL。以上代码会出现以下的数据形式:
gender | class | age | cnt |
---|---|---|---|
男 | 1 | 10 | 99 |
女 | ... | ... | .. |
Null | 1 | Null | 15 |
.. | 1 | .. | 14 |
Null | Null | 18 | 54 |
... | ... | 17 | 66 |
Null | Null | Null | 1000 |
维度有:
注意,维度的字段没有先后,建议一般从总到分,从属关于从左到右。
WITH CUBE
也可以用 GROUPING SETS
进行编写。
GROUP BY a, b, c WITH CUBE
相当于:
... GROUP BY a, b, c
GROUPING SETS (
(a, b, c),
(a, b),
(b, c),
(a, c),
(a),
(b),
(c),
( )
)
以上便于理解,一般在实际的数据分析过程中不会频繁使用 WITH CUBE
,它会造成维度过多,数据庞大,漫无目的,对分析造成一定的影响,我们还是会根据需要来指定相应要分析的维度。
接下来,我们需要了解一下 GROUPING SETS
的用法。
更新时间:2022-03-09 13:39:11 标签:hive hql 多维数据 cube