hive row_number等窗口分析函数

一、排序&去重分析

row_number() over(partititon by col1 order by col2) as rn

结果:1,2,3,4

rank() over(partititon by col1 order by col2) as rk

结果:1,2,2,4,5

dense_rank() over(partititon by col1 order by col2) as ds_rk

结果:1,2,2,3,4

select
        order_id,
        departure_date,
        row_number() over(partition by order_id order by departure_date) as rn,  -- 直排
        rank() over(partition by order_id order by departure_date) as rk,        -- 并列的,下一个数字会跳过
        dense_rank() over(partition by order_id order by departure_date) as d_rk -- 并列的,下一个数据不会跳过
  from ord_test
 where order_id=410341346
;

运行结果:

二、跨行获取  

lag(col1,n,DEFAULT) over(partition by col1 order by col2) as up
用于统计窗口内往上第n行值,第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

lead(col1,n,DEFAULT) over(partition by col1 order by col2) as down
用于统计窗口内往下第n行值,第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

first_value() over(partition by col1 order by col2) as fv
取分组内排序后,截止到当前行,第一个值

last_value() over(partition by col1 order by col2) as lv
取分组内排序后,截止到当前行,第一个值

select
       order_id,
       departure_date,
       first_value(departure_date) over(partition by order_id order by add_time)as fv,  -- 取分组内第一条
       last_value(departure_date) over(partition by order_id order by add_time)as lv    -- 取分组内最后一条
  from ord_test
 where order_id=410341346
;

select
       order_id,
       departure_date,
       lead(departure_date,1) over(partition by order_id order by departure_date)as down_1, -- 向下取一级
       lag(departure_date,1) over(partition by order_id order by departure_date)as up_1     -- 向上取一级
  from ord_test
 where order_id=410341346
;

结果截图:

原文地址:https://www.cnblogs.com/kimbo/p/8445395.html

时间: 2024-11-09 04:47:36

hive row_number等窗口分析函数的相关文章

我为什么学习hive窗口分析函数

1. 窗口函数 LEAD(column_name, n, default_value),用于统计窗口内往下第n行的值, LAG(column_name, n, default_value),用于统计窗口内往上第n行的值. FIRST_VALUE(column_name),分组窗口排序后,截止到当前行的第一个值: LAST_VALUE(column_name),分组窗口排序后,截止当前航的最后一个值: 2. OVER语句 SUM/COUNT/MIN/MAX/AVG(column_name) OVE

Hive 窗口分析函数

1.窗口函数 1.LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL) 2.LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) 3.FIRST_VALUE(col,false) 用于统

Hive ROW_NUMBER,RANK(),DENSE_RANK()

准备数据 浙江,杭州,300 浙江,宁波,150 浙江,温州,200 浙江,嘉兴,100 江苏,南京,270 江苏,苏州,299 江苏,某市,200 江苏,某某市,100 ? 创建表 CREATE table pcp (province string,city string,people int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ? 导入数据 load data inpath '/tmp/1.tx

窗口/分析函数

业务场景: 某个上次购买距现在的时间?? 每次购买时间间隔? 周环比如何计算? 怎样得到各区域销售排名前N名商品列表? 怎样得到各商品销售占品类总销售百分比? 如何计算个商品累计销售占比? 如何把销售分成N等份 大于等于当前订单金额的订单比例有多少? 每个会员某段时间内最大,最小的订单金额? 原文地址:https://www.cnblogs.com/liuyuanq/p/11277941.html

使用hive查询把访问网络流量会话化

<Hive编程指南>最后一章的Outbrain案例中,有一个把访问网络流量会话化的简单实现,但按照它的查询出来的结果是错的,于是自己重写了一个. 一.问题提出(摘自书中原文) 为了分析网络流量,我们常常希望能够基于各种各样的标准来测量热度.一种方法就是将用户行为分解到会话中,一次会话代表单一的一次"使用"所包含的一系列操作.一个用户在一天内或者一个月中的某几天可以多次访问某个网站,但每一次访问肯定是不一样的. 那么,什么是一个会话呢?一种定义是指相隔不超过30分钟的一连串的

hive实现根据用户分组,按用户记录求上下两条记录的时间差

在mysql,数据如下:#查询某一用户该日抽奖时间 select draw_time from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+ | draw_time | +---------------------+ | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | | 2016-03-09 13:53:0

利用Hive实现求两条相邻数据时间差

1.Hive row_number() 函数的高级用法 row_num 按照某个字段分区显示第几条数据 select imei,ts,fuel_instant,gps_longitude,gps_latitude,row_number() over (PARTITION BY imei ORDER BY ts ASC) as row_num from sample_data_2 2.row_num 是相互连续的,join 自身,然后时间相减可求差create table obd_20140101

haproxy代理hive

global daemon nbproc 1 pidfile /var/run/haproxy.pid ulimit -n 65535 defaults mode tcp                        #mode { tcp|http|health },tcp 表示4层,http表示7层,health仅作为健康检查使用 retries 2                       #尝试2次失败则从集群摘除 option redispatch               #如果

hive常规配置及常用命令使用

hive 常用的几种shell交互方式 查看hive命令帮助:bin/hive -help [[email protected] hive]$ bin/hive -help usage: hive -d,--define <key=value> Variable subsitution to apply to hive commands. e.g. -d A=B or --define A=B --database <databasename> Specify the databa