【问题标题】:How to aggregate on the basis of key subset in Pig/Hive?如何根据 Pig/Hive 中的 key 子集进行聚合?
【发布时间】:2018-09-12 13:27:44
【问题描述】:

我有以下数据集,其中 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 中计算此聚合?

【问题讨论】:

  • 已经尝试过“CUBE And ROLLUP For Multi-Level Aggregations”
  • 修复您的餐桌设计。 emp_id 怎么可能对于看起来像员工表的东西是空白的?理想情况下,您应该有一个唯一的密钥

标签: hadoop hive hdfs bigdata apache-pig


【解决方案1】:
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 查询可以帮助您。

【讨论】:

  • 密钥重复时工作但会产生问题
  • @Bector 我已经更新了查询,如果发现任何问题,请尝试告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2023-03-08
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
相关资源
最近更新 更多