[英]Hadoop Hive Group by with category
民間,
我們對Hadoop Hive有一個要求。
基本上我們有以下格式的數據。
客戶名稱,產品名稱,價格
Test,prod1,10
Test,prod2,30
Test,prod3,20
Test1,prod1,20
Test1,prod2,30
Test1,prod2,30
Test2,prod1,50
Test2,prod2,40
Test2,prod2,10
我們需要從上面找到排名前2位的客戶[條件(他們產品總和的價格落在排名前2位]
例如,在上面的示例中,我們需要記錄Test1 sum(price)= 20 + 30 + 30 = 80 Test2 sum(price)= 50 + 40 + 10 = 100
測試客戶不符合條件,因為總價為60。
基本上是前2位客戶的客戶及其產品列表(如果總和(價格)更高,則表明他們符合條件)
預期的輸出。 (測試客戶的記錄不應出現)
Test1,prod1,20
Test1,prod2,30
Test1,prod2,30
Test2,prod1,50
Test2,prod2,40
Test2,prod2,10
如何為此編寫HIVE查詢。
我不確定您擁有的配置單元版本,但我將假定我們不能使用IN()
您將需要創建一個臨時表來容納匹配的客戶。
CREATE TABLE tempp
AS SELECT customer, sum(price) as v
FROM mytable group by customer ORDER BY v DESC LIMIT 2;
該臨時表將包含以下行:
Test2 100.0
Test1 80.0
然后做一個LEFT SEMI JOIN來獲得匹配的
SELECT a.* FROM mytable a LEFT SEMI JOIN tempp t ON (a.customer = t.customer)
根據表的輸出:
Test1 prod1 20
Test1 prod2 30
Test1 prod2 30
Test2 prod1 50
Test2 prod2 40
Test2 prod2 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.