栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据hive篇

大数据hive篇

1、业务背景

最近接到的一个比较刁的体系建设需求,需求背景简述:一个功能有新老两个版本,每个功能可以通过AB两个方式进到功能中使用,其中A方式又可以细分成A1、A2、A3三个口子。

拆分方式是按三层来拆,按第一层是新老的拆分的同时,也能按第一层是进入方式来拆 以拆分维度日活为例
具体的拆分方式可见下表:

2、解决方法介绍

目前的想到的可以用的解决方案是通过group setings中的with cube来获取
展开之前,笔者先介绍下grouping setings的使用笔记,不足之处,望多多指正。

  • 一句话概括:group seting的使用方式是多个group by进行union all操作的简单表达;
  • 常见的使用语法:
-- 使用方法1
group seting(a,b)、
-- 等价于 
group by a union all group by b

--WITH ROLLUP使用方法(类似取含a的所有排列组合)
select a, b, c from table group by a, b, c WITH ROLLUP;
-- 等价于
select a, b, c from table group by a, b, c
GROUPING SETS((a,b,c),(a,b),(a),());

-- with cube使用方法(类似取所有的排列组合);
select a, b, c from table group by a, b, c WITH cube;
-- 等价于
select a, b, c from table group by a, b, c
GROUPING SETS((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),());

-- having的使用方法
 select A
       ,max(b) b1 
  from t 
 group by A 
having b1  > 1000;

-- 等价于

select t.A
      ,t.b1
  from (
        select A
              ,max(b) b1 
          from t 
         group by A
       ) t
  where t.b1 > 1000;
3、解决方案

不妨假设每一层分别为l1 l2 l3 用户为user_id
写法为:

select l1
      ,l2
      ,l3  
      ,is_ths_user
      ,count(1) as user_cnt  
  from table
 group by l1
         ,l2
         ,l3
  with cube```

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号