Hive分析函數row_number()

業務背景

最近有一個需求是給用戶瀏覽的商品進行評分, 而後將商品評分按降序排序, 最後取 Top 50 推薦給終端用戶。評分的計算公式爲: 該商品一個月內的購買次數 / 該商品兩個月內的瀏覽次數。在實現該需求的時候就用到了 Hive 中內置的分析函數 row_number()。函數

row_number()函數簡介

row_number() 函數的簡單用法以下:code

ROW_NUMBER() OVER (DISTRIBUTE BY COLUMN_A SORT BY COLUMN_B ASC/DESC)

說明: DISTRIBUTE BY COLUMN_A 的意思是按照 COLUMN_A 進行分組, SORT BY COLUMN_B 的意思是按照 COLUMN_B 進行排序, 後面跟着 ASC/DESC 指定是按照升序仍是降序排序。row_number() 按指定的列進行分組生成行序列, 從 1 開始, 若是兩行記錄的分組列相同, 則行序列+1。排序

需求實現

數據表 user_item_score 結構大體以下:it

| user_id | item_id | item_score | | ----- |:---- :| ---- :| | U_AAAA | I_AAA1 | 0.5 | | U_BBBB | I_BBB1 | 0.3 | | U_AAAA | I_AAA2 | 0.6 | | U_CCCC | I_CCCC | 0.7 | | U_AAAA | I_AAA3 | 0.55 | | U_BBBB | I_BBB2 | 0.4 |select

實現 SQL 以下:終端

select user_id, item_id, item_score from (
    select *, row_number() over ( distribute by user_id sort by item_score desc) rownum from user_item_score
) temp
where rownum <= 50;

最終結果以下:數據

| user_id | item_id | item_score | row_num | | ----- |:---- :| ---- :|---- :| | U_AAAA | I_AAA2 | 0.6 | 1 | | U_AAAA | I_AAA3 | 0.55 | 2 | | U_AAAA | I_AAA1 | 0.5 | 3 | | U_BBBB | I_BBB2 | 0.4 | 1 | | U_BBBB | I_BBB1 | 0.3 | 2 | | U_CCCC | I_CCCC | 0.7 | 1 |sort

相關文章
相關標籤/搜索