分析函式hive計算均值 Hive 分析函式

2021-10-13 13:29:50 字數 2748 閱讀 9201

應用場景

(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()不會出現這種情況,具體可以對比一下

select

gid,dt

,pv,rank() over (partition by gid order by pv desc) as pre_total_pv_rank

,dense_rank() over (partition by gid order by pv desc) as pre_total_pv_dense_rank

from test.gid_pv

order by

gid,dt

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

select

gid,dt

,pv,row_number() over (partition by gid order by pv) as pre_total_pv_row_number

from test.gid_pv

order by

gid,dt

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分析函式

遇到以下問題如何解決?查詢客戶各個日期的歷史累積購買金額 查詢每個客戶第一次 首購 或前n次購買記錄 查詢每個客戶最後一次購買記錄 某活動推廣後,每天的累積資料 查詢客戶每天的歷史累積購買金額 hive 語法 select userid user id,pay datekey pay datekey...

Hive的分析函式

記錄下hive的常用函式 hive的常用函式和平常我們使用的關係型資料庫基本都差不多,這裡只是記錄一下,方便後面回顧。準備測試資料.hadoop hadoop apache hive 0.13.1 bin cat emp.txt 7369 smith clerk 7902 1980 12 17 80...

hive的分析函式

1 rollup group by 的增強函式 實現根據部門號 工作職位求工資總和,根據部門求工資總和,查所有人的工資總和 通過group by 語句的增加來實現 select deptno,job,sum sal from emp group by rollup deptno,job 語法 gro...