0
我有一個表有三列。 'user_id','日期','數字'。下面是一個示例表:HIVE SQL:平均爲每個user_id的最後三個日期
user_id date number
a 2000-01-01 100
a 2003-03-08 50
a 2004-04-21 10
a 2004-12-11 10
a 2010-03-03 10
b 2000-06-29 1
b 2002-05-22 2
b 2002-07-06 3
b 2008-10-20 4
我想回的是一個獨特的名單「USER_ID的和平均的‘爲每個用戶僅最近三個日期數字’。
所以我想看看user_id:a,avg:AVG(10,10,10)= 10和user_id:b,avg:AVG(2,3,4)= 3。表格形式:
user_id avg_3
a 10
b 3
我對如何在HIVE SQL中做到這一點不知所措。到目前爲止,我已經是一個總的平均HIVE查詢:
SELECT user_id, AVG(number) FROM table_name
GROUP BY user_id
---- ----編輯
看着這個鏈接後:extract top n records in each group.。我提出了以下可能性,但Hive不喜歡它(錯誤:無效的函數'等級')。
SELECT b.user_id, avg(b.number)
FROM
(
SELECT a.user_id, a.number, a.date, rank(a.user_id) as r
FROM (
SELECT user_id, date, number
FROM table_name
DISTRIBUTE BY user_id
SORT BY user_id, number desc
) a
) b
WHERE a.r < 5
GROUP BY b.user_id
----- EDIT#2 -----
我只實現了 '秩' 功能是在蜂房一個用戶定義的函數。因此,Hive不承認它。有沒有人知道沒有UDF的方法呢?
謝謝,我知道這個工程。雖然我們的IT部門沒有這個版本的Hive。我目前正試圖讓PIG來做這件事。 作爲一個Hive SQL方面的說明,另一個更長和更復雜的方法是使用左內部連接並選擇最大日期,以使先前的最大日期列爲NULL。 – nfmcclure