前置條件:
安裝好hive
背景:
hive表中存有cookieid和time兩個字段
目標:
通過rank方法查出每個cookieid在哪一天的次數最多
具體步驟如下:
create
external
table tmp_dh_topn (
cookieid string,
vtime string --day
) row format delimited
fields terminated by
','stored as textfile location '/tmp/dh/tmp_dh_topn/';
資料檔案存放在/tmp目錄下,把資料匯入hive的tmp_dh_topn表中
load data local inpath '/tmp/tmp_topn.txt'
into
table tmp_dh_topn;
select cookieid, vtime, count(vtime) as pv
from tmp_dh_topn
group
by cookieid, vtime
order
by cookieid, vtime
得到結果如下:
cookie1 2015-04-10 3
cookie1 2015-04-11 3
cookie1 2015-04-12 3
cookie1 2015-04-13 2
cookie1 2015-04-14 2
cookie1 2015-04-15 1
cookie2 2015-04-10 3
cookie2 2015-04-11 3
cookie2 2015-04-12 3
cookie2 2015-04-13 2
cookie2 2015-04-14 2
cookie2 2015-04-15 1
select cookieid, vtime, pv, rank() over (partition by cookieid order
by pv desc, vtime desc) as pv_rank from (
select cookieid, vtime, count(vtime) as pv
from tmp_dh_topn
group
by cookieid, vtime
order
by cookieid, vtime
) tmp_dh_pv
使用rank方法能把結果進行排序,over中的partition是進行排序分割槽,order by是在內部排序時的條件。這裡的意思是在每個cookieid分組在按照pv、vtime來進行排序,最後得出結果。
得到結果如下:
cookie1 2015-04-12 3 1
cookie1 2015-04-11 3 2
cookie1 2015-04-10 3 3
cookie1 2015-04-14 2 4
cookie1 2015-04-13 2 5
cookie1 2015-04-15 1 6
cookie2 2015-04-12 3 1
cookie2 2015-04-11 3 2
cookie2 2015-04-10 3 3
cookie2 2015-04-14 2 4
cookie2 2015-04-13 2 5
cookie2 2015-04-15 1 6
select cookieid, vtime, pv from (
select cookieid, vtime, pv, rank() over (partition by cookieid order
by pv desc, vtime desc) as pv_rank from (
select cookieid, vtime, count(vtime) as pv
from tmp_dh_topn
group
by cookieid, vtime
order
by cookieid, vtime
) tmp_dh_pv
)where pv_rank = 1;
最後一步,去pv_rank為1就是得到次數最多的那個記錄。
得到的結果如下:
cookie1 2015-04-12 3
cookie2 2015-04-12 3
hive使用rank實現topN的查詢
前置條件 安裝好hive 背景 hive表中存有cookieid和time兩個字段 目標 通過rank方法查出每個cookieid在哪一天的次數最多 具體步驟如下 一 建立表 create external table tmp dh topn cookieid string,vtime string...
Hive開窗函式和Rank函式
over 跟在聚合函式後面,指定分析函式工作的資料視窗大小,決定了資料的聚合範圍,預設範圍是整個資料視窗,即所有行。可使用partition by將資料進行分組聚合 使用order by除了排序 預設asc公升序 還會改變聚合範圍 從開始行到當前行的聚合 使用distribute by sort b...
用mysql實現rank()排序
mysql中不存在類似於sql server或orcal中的rank 函式來得到排名。而在實際的工作中,常常需要將查詢後排序得到的排名給記錄下來。由於專案需要,不僅要對成績進行排名,而且需要相同成績的具有相同的排名。根據網上的提供的排名方法,進一步進行擴充,得到了下面的實現方式。表 score,有三...