簡體   English   中英

Hadoop Hive按類別分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM