Hadoop Hive Group按类别划分

时间:2014-04-24 19:03:40

标签: hadoop hive

民间,

我们对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名客户[conditon(他们的产品价格总和在前2名)

例如在上面的示例中,我们需要Test1 sum(price)= 20 + 30 + 30 = 80的记录                                              Test2总和(价格)= 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查询。

1 个答案:

答案 0 :(得分:0)

我不确定您的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