美文网首页
hive-交叉数据-grouping set()函数用法

hive-交叉数据-grouping set()函数用法

作者: 阿童89 | 来源:发表于2020-05-30 20:13 被阅读0次

做流量数据分析的小伙伴经常会遇到流量数据多维度汇总的问题,比如运营希望看到分城市,业务线,用户类型,频道,一级类目和二级类目等维度的交叉数据,因为整体UV并不等于各维度UV的加和,所有整体UV需要单独计算,最后将计算结果和分维度的计算结果union起来,这样代码会特别长,举一个简单例子:
用户日志表为analyst.user_lot,device_id为设备ID,pingdao为各频道名称,计算整体和各频道的PV和UV代码如下:

select 
       date as event_date
       ,'all' as  pingdao
       ,count(distinct device_id)  as uv
       ,count(device_id) as pv
from  analyst.user_log
where date='20200529'
group by date,'all'
union all 
select 
       date  as event_date
       ,pingao
       ,count(distinct device_id)  as uv
       ,count(device_id) as pv
from  analyst.user_log
where date='20200529'
group by date,pingao

运行结果:(这里为了简化,假设只有三个频道搜索,banner和商家推荐)

event_date pingao uv pv
20200529 all 500 6000
20200529 搜索 300 3000
20200529 banner 200 2000
20200529 商家推荐 100 1000

如果我们要维度特别多的话,我们的代码会特别长(例如有3个维度,每个维度又2个值,我们需要union all六段代码,才能看到所有维度的汇总和明细数据),hive提供了一个grouping_id set() 函数来解决以上问题,例如以上问题代码可以简化为:

select 
       date as event_date
       ,pingdao
       ,Grouping_ID as  group_id
       ,count(distinct device_id)  as uv
       ,count(device_id) as pv
from  analyst.user_log
where date='20200529'
group by date,pingdao
group by sets(date,(date,pingdao))

运行结果:(这里为了简化,假设只有三个频道:搜索,banner和商家推荐)

event_date pingao group_id uv pv
20200529 /N 1 500 6000
20200529 搜索 0 300 3000
20200529 banner 0 200 2000
20200529 商家推荐 0 100 1000

按照group by后面的变量排列顺序,grouping sets()的组合中出现的变量赋值0,未出现的变量赋值1,这样会生成一个二进制数字,最后将二进制数字转化成十进制后的数字赋值给group_id变量,例如上面代码运行逻辑:
(date,null)二进制数值:01 → 十进制数字为1
(date,pingdao) 二进制数值:00 →十进制数字为0

相关文章

  • hive-交叉数据-grouping set()函数用法

    做流量数据分析的小伙伴经常会遇到流量数据多维度汇总的问题,比如运营希望看到分城市,业务线,用户类型,频道,一级类目...

  • HQL聚集计算之进阶篇

    HQL聚集函数可以使用GROUPING SETS, CUBE, 和ROLLUP等关键词。 GROUPING SET...

  • golang 正则

    Repetitions: Grouping: Flag syntax is xyz (set) or -xyz (...

  • ES6 数据结构-Set

    一、基本用法与特性   Set本身是一个构造函数,可直接用来生成Set数据结构:   可传入数组or伪数组   ①...

  • Python函数(个人笔记)

    lambda用法 将函数转化为表达式 map用法 set()集合 set() 函数创建一个无序不重复元素集;可进行...

  • Hive Grouping Sets多维分析

    介绍 GROUPING SETS,GROUPING__ID,CUBE,ROLLUP:这几个函数通常用于OLAP中,...

  • Hive分析窗口函数(五)grouping sets,cube,

    GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不...

  • 新特性解读 | GROUPING() 函数用法解析

    作者:杨涛涛资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开...

  • ES-6--数据结构

    Set的用法,WeakSet的用法,Map的用法,WeakMap的用法 Set()基本用法 Set的add,del...

  • ES6-Set

    Set Set的基本用法 set 类似于数组,且成员值不重复都是唯一的,set本身是一个构造函数。 上面代码通过a...

网友评论

      本文标题:hive-交叉数据-grouping set()函数用法

      本文链接:https://www.haomeiwen.com/subject/techzhtx.html