HiveSQL核心技能之常用函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HiveSQL核心技能之常用函数相关的知识,希望对你有一定的参考价值。

参考技术A

目标:
1、掌握hive基础语法、常用函数及其组合使用
2、掌握一些基本业务指标的分析思路与实现技巧

1)某次经营活动中,商家发起了“异性拼团购”,试着针对某个地区的用户进行推广,找出匹配用户。

注意:如果该表是一个分区表,则where条件中必须对分区字段进行限制

2)选出在2018年12月31日,购买的商品品类是food的用户名、购买数量、支付金额

3)试着对本公司2019年第一季度商品的热度与价值度进行分析。
"2019年一月到三月,每个品类有多少人购买,累计金额是多少"

GROUP BY ... HAVING(分类汇总过滤)

4)找出在2019年4月支付金额超过5万元的用户,给这些VIP用户赠送优惠券

5)2019年4月,支付金额最多的TOP5用户

查看Hive中的函数:show functions;
查看具体函数的用法:1)desc function 函数名;2)desc function extended函数名;

6)

7)用户的首次激活时间,与2019年5月1日的日期间隔。

datediff(string enddate,string startdate):结束日期减去开始日期的天数

拓展:日期增加函数(增加天数)、减少函数(减少天数) —— date_add、date_sub(类型要是string类型的)
date_add(string startdate,int days)、date_sub(string startdate,int days)

case when 函数

8)统计以下四个年龄段20岁以下、20-30岁、30-40岁、40岁以上的用户数

case when 的时候不用加group by,只有在聚合函数的时候才需要group by

if 函数

9)统计每个性别的用户等级高低分布情况(假设level大于5为高级,注意列名不能使用中文的)

10)分析每个月都拉新情况

substring(stringA,INT start,int len),substr(stringA,INT start,int len),截取起始位置和截取长度

extra1需要解析json字段,然后用$.key取出想要获取的value;
extra2使用的是中括号加引号的方式进行字段提取和分组;
两种写法要看字段类型的不同采取不同的方式

11)求不同手机品牌的用户数

12)ELLA用户的2018年的平均每次支付金额,以及2018年最大的支付日期和最小的支付日期的间隔

13)2018年购买的商品品类在两个以上的用户数

步骤总结:
1、先求出每个人购买的商品品类书
2、筛选出购买商品品类书大于2的用户
3、统计符合条件的用户有多少个

14)用户激活时间在2018年,年龄段在20-30岁和30-40岁的婚姻情况分布

步骤总结:
1、先选出激活时间在2018年的用户,并把他们所在的年龄段计算好,并提取出婚姻状况;
如何select后面没有进行聚合,则可以不用使用group by,直接使用where进行过滤就可以;
2、取出年龄段在20-30岁和30-40岁的用户,把他们的婚姻状况转义成可理解的说明;
3、聚合计算,针对年龄段,婚姻状况的聚合

HiveSQL核心技能之窗口计算

参考技术A

目标:
1、掌握 sum()、avg()等用于累计计算的聚合函数,学会对行数的限制(移动计算);
2、掌握 row_number(),rank()、dense_rank()用于排序的函数;
3、掌握 ntile()用于分组查询的函数;
4、掌握 lag()、lead()偏移分析函数

窗口函数(window function):
与聚合函数类似,但是窗口函数是每一行数据都生成一个结果,聚合函数可以将多行数据按照规定聚合为一行,一般来说聚合后的行数要少于聚合前的行数,但是有时我们想要既显示聚合前的数据,又要显示聚合后的数据,这时便引入了窗口函数, 窗口函数是在 select 时执行的,位于 order by 之前

在日常工作中,经常遇到 计算截止某月或某天的累计数值 ,在Excel可以通过函数来实现,
在HiveSQL里,可以利用窗口函数实现。

1)2018年每月的支付总额和当年累计支付总额

2)对2017年和2018年公司的支付总额按月度累计进行分析,按年度进行汇总

说明:1、over中的 partition by 起到分组的作用;
2、order by 按照什么顺序进行累加,升序ASC、降序DESC,默认升序
3、正确的分组是非常重要的,partition by 后面的字段是需要累计计算的区域,需要仔细理解

(计算三日留存、七日留存、三十日留存等方式可以使用这个函数。)

3)对2018年每个月的近三个月进行移动的求平均支付金额

用法:这三个函数的作用都是返回相应规则的排序序号,由于排序函数不是二次聚合计算,因此不一定要使用子查询

4)2019年1月,用户购买商品品类数量的排名

5)选出2019年支付金额排名在第10、20、30名的用户

6)将2019年1月的支付用户,按照支付金额分成5组

7)选出2019年退款金额排名前10%的用户

说明:Lag和Lead分析函数可以在同一次查询中取出同一字段的 前N行数据(Lag)和后N行的数据(Lead) 作为独立的列。

在实际应用当中,若要用到取今天和昨天的某字段差值时,Lag和Lead函数的应用就显得尤为重要。
当然,这种操作可以用表的 自连接实现 ,但是Lag和Lead与 left join、 right join等自连接相比,效率更高,SQL语句更简洁。

8)支付时间间隔超过100天的用户数(这一次购买距离下一次购买的时间?,注意datediff函数是日期大的在前面)

9)每个城市,不同性别,2018年支付金额最高的TOP3用户

步骤总结:
1、首先筛选出每个用户和每个用户总的消费金额;
2、对两个表进行连接提取需要的字段;
3、对连接后的表进行二次聚合计算,计算出不同城市、性别的金额排名;
4、对二次聚合计算的表进行条件筛选提取

10)每个手机品牌退款金额前25%的用户

步骤总结:
1、首先筛选出每个用户和每个用户的总退款金额;
2、对两个表进行连接提取需要的字段;
3、对连接后的表进行按手机品牌内分组;
4、对分组后的表进行条件筛选提取

以上是关于HiveSQL核心技能之常用函数的主要内容,如果未能解决你的问题,请参考以下文章

HiveSQL核心技能之表连接

数据分析课程笔记 - 20 - HIVE 核心技能之窗口函数

云原生时代必须具备的核心技能之Docker高级篇(Harbor-镜像私服)

大厂面试之JAVA核心技能:Slipped Conditions

一篇文章了解架构师的核心技能

大厂面试之JAVA核心技能:Slipped Conditions