首页 > 其他分享 >Hive分析函数

Hive分析函数

时间:2024-05-13 23:22:32浏览次数:21  
标签:分析 __ school 函数 grade Hive nvl id grouping

● 测试表 test

1. grouping sets 

① 未使用

② 使用grouping sets (与上面等价)

【代码实例】

查看代码
 --todo 方式一
--所有学校的人数总和
select
        '全学校' as school,
        '全年级' as grade,
        count(name) as num,
        1 as grouping__id
from test
union all
--所有学校中各年级的人数   分组id=2
select
        '全学校' as school,
        grade,
        count(name) as num,
        2 as grouping__id
from test
group by grade
union all
-- 各学校中各年级的人数   分组id=3
select
       school,
       grade,
       count(name) as num,
       3 as grouping__id
from test
group by school,grade;

---------------------------------------------------------------

--todo 方式二
select
        nvl(school,'全学校') as school,
        nvl(grade,'全年级') as grade,
        count(name) as num,
        grouping__id
from test
group by school,grade
grouping sets( (school,grade) , grade , () );

 

2. Cube

① cube 在一个group by 的聚合查询中,根据所有维度组合进行聚合(即是把所有的维度组合都放入grouping sets中)

 

 【代码示例】

查看代码
 --todo 方式一
select
        nvl(school,'全学校') as school,
        nvl(grade,'全年级') as grade,
        count(name) as num,
        grouping__id
from test
group by school,grade
grouping sets((school,grade),school,grade,())
order by grouping__id;

--------------------------------------------------

--todo 方式二
select
        nvl(school,'全学校') as school,
        nvl(grade,'全年级') as grade,
        count(name) as num,
        grouping__id
from test
group by school,grade
with cube
order by grouping__id;

 

3. rollup

● rollup 是cube 的一个子集,以左边的维度为主,进行聚合

● 即是按照,汇总所有维度->汇总左侧school维度->汇总左右维度的顺序,来聚合,不会再从右到左聚合了

 

【代码示例】

查看代码
 --todo 方式一
select
        nvl(school,'全学校') as school,
        nvl(grade,'全年级') as grade,
        count(name) as num,
        grouping__id
from test
group by school,grade
grouping sets((),school,(school,grade))
order by grouping__id;

----------------------------------------------

--todo 方式二
select
        nvl(school,'全学校') as school,
        nvl(grade,'全年级') as grade,
        count(name) as num,
        grouping__id
from test
group by school,grade
with rollup
order by grouping__id;

 

总结:

① grouping set是一个更加灵活的做分组维度聚合的函数,可以适应更多的场景

② cube和rollup在完全适用于场景时,有着更简单的写法和效率

 

标签:分析,__,school,函数,grade,Hive,nvl,id,grouping
From: https://www.cnblogs.com/apple677/p/16615275.html

相关文章

  • hive on spark
    1Hive的执行引擎Hive:专业的数仓软件,可以高效的读写和管理数据集。  Hive的运行原理:  ①hive主要是写HQL的(类SQL,相似度90%,剩下的10%就是HQL里面一些独有的语法)  ②写的HQL会根据不同的计算引擎翻译成不同的代码 2数仓搭建技术选型SparkOnHive:基于Hive的Spar......
  • 揭秘姓名背后的奥秘:从五行分析到吉凶评分全攻略
    在古老的中国文化中,姓名不仅仅是一个简单的标签,它承载着深厚的文化内涵和人生寓意。从姓名学的角度来看,一个人的名字与其命运息息相关,通过分析姓名中的五行属性、吉凶评分等,我们可以对个人的性格、运势有一定的了解。一、姓名分析的重要性姓名分析,又称为姓名学,是一门古老而神秘......
  • 学习笔记:生成函数II(集合分拆、置换、整数分拆、它们的递推公式、生成函数 和快速计算)
    形式幂级数的更多运算形式幂级数与幂级数的比较形式幂级数本质是序列(\(x^i\)无意义),幂级数本质是极限。形式幂级数通过带入\(x\)还原成幂级数。假设系数在\(\mathbb{C}\)上,可以证明形式幂级数与具有正收敛半径的幂级数在'通常'的所有运算上服从同样规律(加减乘除求导积......
  • MySQL ROW_NUMBER 函数
    MySQLROW_NUMBER()语法MySQL ROW_NUMBER()从8.0版开始引入了功能。这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应用的每一行分配一个序号。请注意,如果你使用MySQL版本低于8.0,你可以效仿的一些功能ROW_NUMBER()函数使用各种技术。以下显示了ROW_NUMBER()函数的语法:......
  • Hive计算窗口内的累计值
    一个值得记下来的窗口累计计算办法,使用的情况是:计算某个窗口内的累计值1.ExamplePart1CREATETABLEtest_table(dailyDATE,person_numINT,app_regionSTRING)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'STOREDASTEXTFILE;--一张包含了daily日期、......
  • 【触想智能】无风扇工控一体机的优点与定制要求分析
    随着工业自动化的不断推进,工控一体机作为自动化生产的核心设备,在工业生产中发挥着越来越重要的作用。在工控一体机的设计中,散热是一个非常关键的问题,而无风扇工控一体机的出现为解决这个问题提供了新方法。无风扇工控一体机是在产品设计中不使用风扇进行散热的设备......
  • JAVA Comparator 自定义排序 源码分析
    对于一个数组来说如果我们想要从大到小排序一般会这么写Integer[]nums={1,2,3};Arrays.sort(nums,newComparator<Integer>(){@Overridepublicintcompare(Integera,Integerb){returnb-a;}});......
  • openGauss 分析查询效率异常降低的问题
    分析查询效率异常降低的问题问题现象通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。处理办法通过下列的操作步骤,分析查询效率异常降低的原因。使用analyze命令分析数据库。analyze命令更新所有表中数据大小以......
  • openGauss 分析查询语句运行状态
    分析查询语句运行状态问题现象系统中部分查询语句运行时间过长,需要分析查询语句的运行状态。处理办法以操作系统用户omm登录主机。使用如下命令连接数据库。gsql-dpostgres-p8000postgres为需要连接的数据库名称,8000为端口号。设置参数track_activities为on。......
  • openGauss 分析查询语句是否被阻塞
    分析查询语句是否被阻塞问题现象数据库系统运行时,在某些业务场景下,查询语句会被阻塞,导致语句运行时间过长。原因分析查询语句需要通过加锁来保护其要访问的数据对象。当要进行加锁时发现要访问的数据对象已经被其他会话加锁,则查询语句会被阻塞,等待其他会话完成操作并释放锁资......