本文首發於:大資料每日嗶嗶-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 ...