如何根据Pig / Hive中的关键子集进行聚合?

时间:2018-04-03 09:17:25

标签: hadoop hive hdfs bigdata apache-pig

我有一个以下数据集,其中emp_id,org_id和res_id是关键列

  

输入数据是 -

emp_id | org_id | res_id | emp_sal
123    | 345    | 678    | 10000
123    |        | 678    | 20000
123    | 345    |        | 30000
       | 345    | 678    | 10000
103    | 305    | 608    | 40000
103    |        |        | 50000

如果剩余记录是完整密钥的子集,我需要聚合emp_sal。例如,“123 | 345 | 678 |”在输入数据集中还有3个子集。

  

预期输出是 -

emp_id | org_id | res_id | emp_sal
123    | 345    | 678    | 70000
103    | 305    | 608    | 90000

如何在Pig中计算此聚合?

1 个答案:

答案 0 :(得分:2)

SELECT c.emp_id, 
       c.org_id, 
       c.res_id, 
       Sum(d.emp_sal) 
FROM   (SELECT DISTINCT emp_id, 
                        org_id, 
                        res_id 
        FROM   emptest 
        WHERE  emp_id IS NOT NULL 
               AND org_id IS NOT NULL 
               AND res_id IS NOT NULL) AS c, 
       emptest AS d 
WHERE  d.emp_id = c.emp_id 
        OR d.org_id = c.org_id 
        OR d.res_id = c.res_id 
GROUP  BY c.emp_id, 
          c.org_id, 
          c.res_id; 

以上Hive查询可以帮助您。