首页 > 其他分享 >Hive 窗口函数

Hive 窗口函数

时间:2022-11-08 09:44:05浏览次数:40  
标签:01 窗口 函数 business Hive cost orderdata 2017 name

窗口函数(开窗函数)

函数说明

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化

CURRENT ROW:当前行

n PRECEDING:往前 n 行数据

n FOLLOWING:往后 n 行数据

UNBOUNDED:起点,

UNBOUNDED PRECEDING 表示从前面的起点,

UNBOUNDED FOLLOWING 表示到后面的终点

LAG(col,n,default_val):往前第 n 行数据

LEAD(col,n, default_val):往后第 n 行数据

NTILE(n):把有序窗口的行分发到指定数据的组中,各个组有编号,编号从 1 开始,对
于每一行,NTILE 返回此行所属的组的编号。注意:n 必须为 int 类型。

数据准备 name,orderdate,cost
并创建本地business.txt数据

jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

需求:
(1)查询在 2017 年 4 月份购买过的顾客及总人数
(2)查询顾客的购买明细及月购买总额
(3)上述的场景, 将每个顾客的 cost 按照日期进行累加
(4)查询每个顾客上次的购买时间
(5)查询前 20%时间的订单信息

导入数据

create table business(
name int,
orderdata string,
cost int
)ROW FORMAT DELIMITED FIELDS TERMINATED ',';

load data local path "/opt/module/data/business.txt" into table 
business;

(1)查询在 2017 年 4 月份购买过的顾客及总人数

select
    name,
    count(*) over()
from business
where sbustrng(orderdata,1,7) = '2017-04'
group by name;

(2) 查询顾客的购买明细及月购买总额

select
   name,
   orderdate,
   cost,
   sum(cost) over(partition by month(orderdate))
from business;

(3)将每个顾客的 cost 按照日期进行累加

select
    name,
	orderdata,
	cost,
	sym(cost) over(partition by name order by orderdata row between UNBOUNDED PERCEDING and current row)

(4)查看顾客上次的购买时间

select 
   name,
   orderdata
   LAG(orderdata,1)over(PARTITION by name ORDER by orderdata)
from 
   business; 
-- LOG(列,往下多少行,默认值(没有,默认为null;当然默认值也可以给自己为:原写的列))   

select 
   name,
   orderdata
   LEAD(orderdata,1)over(PARTITION by name ORDER by orderdata)
from 
   business;
--LEAD(列,往上前多少行,默认值(没有,默认为null;当然默认值也可以给上一行:原写的列

(5)查询前 20%时间的订单信息

select
    naem,
    orderdata,
    cost
from(
SELECT
     name,
	 orderdata,
	 cost
	 NTILE(5) over(ORDER by orderdata) groupID
FROM
    business;t1
)where groupID = 1;

标签:01,窗口,函数,business,Hive,cost,orderdata,2017,name
From: https://www.cnblogs.com/catch-autumn/p/16868636.html

相关文章

  • SQL自定义函数
     存储函数和存储过程统称为存储例程(storeroutine),存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的......
  • wdf框架之WdfVersionBind函数分析(2)
    接​​前篇​​,这篇一起来看下WdfVersionBind函数的第4个参数:WdfDriverGlobals。经过前面一番波折,WdfVersionBind总算找到了Wdf01000.sys!_WDF_LIBRARY_INFO结构。接下去,它......
  • Wdf框架:FxDriverEntry----驱动程序的入口函数
      在前面的文章<Wdf框架中WdfDriverGlobals对象的创建>中简单的提到过WdfVersionBind函数的作用,但是没有来得及分析这个函数的调用处。今天得空,借这篇文章写下WdfVersio......
  • MATLAB:quiver()函数
    quiver()用来画矢量图,这里仅介绍常使用的quiver(x,y,u,v)语句x,y表示起始点;u,v表示向量的相关信息:向量的长度为sqrt(u^2+v^2);向量的夹角为arctan(v/u),注意是v/ux,y......
  • MySQL聚合函数
    AVG()                   平均值COUNT()            计数MAX()                  最大值MIN()          ......
  • MySQL信息函数
    CONNECTION_ID()              连接ID,返回ID号,也是线程的IDDATEBASE()                          当前数据库LAST_INSERT_ID()......
  • MySQL比较运算符和函数
    本文重点是三个比较运算符1,[NOT[BETWEEN...AND...2 , [NOT]IN()3 , IS[NOT]NULL例1:BETWEEN...AND..如果数字A在设定范围之内,返回TRUE,否则返回FAUSEmysql>SE......
  • MySQL数值运算符和函数
    数值运算符和函数CEIL()         进一取整DIV                 整数除法FLOOR()       舍一取整MOD              ......
  • MySQL自定义函数
    首先,做一个热身。引进一个系统函数LAST_INSERT_ID();这个函数的功能就是放回上一次插入的数据的id做个示范插入数据                       ......
  • MySQL日期时间函数
    日期时间函数NOW()                                           当前日期和时间CURDATE()                ......