Hive SQL 分析函式

2021-10-02 11:29:37 字數 3599 閱讀 9412

本文首發於:大資料每日嗶嗶-hive 分析函式

(1)用於分割槽排序

(2)top n

(3)層次查詢

分析函式描述

rank

返回資料項在分割槽中的排名。排名值序列可能會有間隔

dense_rank

返回資料項在分割槽中的排名。排名值序列是連續的,沒有間隔

percent_rank

計算當前行的百分比排名:(x - 1)/(視窗分割槽中的行數 - 1)

cume_dist

統計小於或等於當前值的行數佔總行數的比例:

x/分割槽行數

row_number

確認分割槽中當前行的序號

ntile

將每個分割槽的行盡可能均勻地劃分為指定數量的分組

語法:analytics_functions over() clause

準備了乙個表,用於測試:

create table test.gid_pv(

gid string comment '商品id'

,dt string comment '日期'

,pv string comment '訪問次數'

) comment '商品訪問次數'

row format delimited

fields terminated by ','

collection items terminated by '\n'

stored as textfile

;

資料如下:

0006d2bc-4df9-4c0b-83ad-0183789e78d4    2020-01-10  1

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-11 5

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-12 7

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-13 3

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-14 2

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-15 4

0006d2bc-4df9-4c0b-83ad-0183789e78d4 2020-01-16 4

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-10 2

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-11 9

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-12 3

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-13 1

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-14 1

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-15 8

993bd7ad-3b62-ba0c-15ae-a14b85921889 2020-01-16 2

rank函式會返回資料項在分割槽中的排名。over子句中的order by語句來確定根據哪個值進行排名。如果多行中的排序值相同,則會有相同的排名。如果有排名相同的情況下,則會在名次中留下空位。例如,如果兩行排名為3,則下乙個排名為5。dense_rank()不會出現這種情況,具體可以對比一下

上面的兩個是排序函式,如果只想給當前行編個號呢?

cume_dist函式計算分割槽中當前行的相對排名:(前面的行數)/(分割槽中的總行數)

如果有相等值的行(取決於over子句中的order by):(前面的行數+相等值行數)/(分割槽中的總行數)

一般預設公升序即可。

select 

gid,dt,pv

-- (前面的行數)/(分割槽中的總行數),如果有相等值的行:(前面的行數+相等值行數)/(分割槽中的總行數)

,cume_dist() over (partition by gid order by pv) as pre_total_pv_cume_dist

from test.gid_pv

order by

gid,dt;

結果資料:

如果想把某個分組內分成比較均勻的幾份,可以使用 ntile 函式:(比如想要統計消費金額前 50%的使用者的平均消費,可以按照消費金額排序,分成 2 份。)

select 

gid,dt,pv

,ntile(4) over (partition by gid order by pv) as pre_total_pv_ntile

from test.gid_pv

order by

gid,dt;

結果如下:

Hive SQL時間戳函式

一.unix timestamp函式 1.unix timestamp函式返回當前時間戳,current timestamp 也有同樣作用 hive select unix timestamp ok1574423914 time taken 0.435 seconds,fetched 1 row s...

hive sql之 視窗函式。

一 row number 函式 區別於其它排序函式,相當於多了乙個排序的列。資料準備 name money ming 12 yang 23 ming 35 ming 54 yang 43 1 按照其中money 進行排序並增加一行。select name,money,row number over ...

hiveSQL常用日期函式

注意 mm,dd,mo,tu 等要大寫 hive 可以在 where 條件中使用 case when 已知日期 要求日期 語句結果 本週任意一天 本周一select date sub next day 2016 11 29 mo 7 2016 11 28 本週任意一天 上週一select date ...