hive剖析函数ITeye - AG环亚娱乐

hive剖析函数ITeye

2019-01-12 00:58:23 | 作者: 运珧 | 标签: 函数,参数,购买 | 浏览: 2550

查询客户每天的前史累积购买金额

hive 语法:

SELECT
 userid user_id,
 pay_datekey pay_datekey,
 pay_amount pay_amount,
 SUM(pay_amount) OVER (PARTITION BY userid ORDER BY pay_datekey ROWS BETWEENUNBOUNDED PRECEDING AND CURRENT ROW ) accumulate_pay_amount
FROM 
 order_table

 

窗口剖析函数

OVER(PARTITION BY COLUMN ROWS BETWEEN ..)

ROWS ((CURRENT ROW) | (UNBOUNDED | [num]) PRECEDING) AND (UNBOUNDED | [num]) FOLLOWING

PRECEDING:往前 FOLLOWING:往后 CURRENT ROW:当时行 UNBOUNDED:起点,UNBOUNDED PRECEDING 表明早年面的起点, UNBOUNDED

FOLLOWING:表明到后边的结尾

假如不指定ROWS BETWEEN,默以为从起点到当时值

SUM(pay_amount) OVER (PARTITION BY userid ORDER BY pay_datekey ROWS BETWEEN 2 PRECEDING AND 0 FOLLOWING)

除了能够核算到当时行的sum聚合函数之外,还支撑以下 规范聚合函数

COUNT

比方核算:截止某天前史均匀购买交易额、最小购买金额等。

为每一行加一个序号

row_number() rank() dense_rank() percent_rank() 分组内当时行的RANK值-1/分组内总行数-1 ntile(n) 将数据集分红 n片,回来分片号 cume_dist 小于等于当时值的行数和分组内总行数的比值

作用

序列函数

SELECT 
 user_id,
 pay_datekey,
 pay_amount,
 ROW_NUMBER() OVER (PARTITION BY userid ORDER BY pay_datekey ASC)
 row_number,
 RANK() OVER (PARTITION BY userid ORDER BY pay_datekey ASC) rank, DENSE_RANK() OVER (PARTITION BY userid ORDER BY pay_datekey ASC) dense_rank, PERCENT_RANK() OVER (PARTITION BY userid ORDER BY pay_datekey ASC)
 percent_rank,
 NTILE(2) OVER (PARTITION BY userid ORDER BY pay_datekey ASC) ntile
FROM 
 order_detail

 

 

LAG(col,n,DEFAULT) 用于计算窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默以为1),第三个参数为默认值
(当往上第n行为NULL时分,取默认值,如不指定,则为NULL)

与LAG相反,LEAD(col,n,DEFAULT) 用于计算窗口内往下第n行值. 第一个参数为列名,第二个参数为往下第n行(可选,默以为1),第三个参数为默认值
(当往下第n行为NULL时分,取默认值,如不指定,则为NULL

FIRST_VALUE

取分组内排序后,第一个值.使用场景,如求第一次购买日期。

LAST_VALUE

取分组内排序后,最终一个值.使用场景,如求第一次购买日期

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章