用于查找每个部门的工资的最大值、最小值、平均值、总和的 Pig 脚本

Posted

技术标签:

【中文标题】用于查找每个部门的工资的最大值、最小值、平均值、总和的 Pig 脚本【英文标题】:Pig script to find the max, min,avg,sum of Salary in each department 【发布时间】:2017-06-14 01:32:56 【问题描述】:

按部门编号对数据进行分组后卡住了。我遵循的步骤

grunt> A = load '/home/cloudera/naveen1/hive_data/emp_data.txt' using PigStorage(',') as (eno:int,ename:chararray,job:chararray,sal:float,comm:float,dno:int); 
grunt> B = group A by don;
grunt> describe B;
B: group: int,A: (eno: int,ename: chararray,job: chararray,sal: float,comm: float,dno: int)

请让我知道这之后的步骤。我对嵌套 Foreach 语句的执行有点困惑。

数据包含 eno,ename,sal,job,commisson,deptno,我想提取每个部门的最大 sal 以及获得最高薪水的员工。

与 min sal 类似。

【问题讨论】:

【参考方案1】:

分组后使用聚合函数。

C = FOREACH B GENERATE group,MAX(A.sal),MIN(A.sal),AVG(A.sal),SUM(A.sal);
DUMP C;

要获取每个部门的姓名、eno和max sal,对记录进行排序并获取第一行

C = FOREACH B 
        max_sal = ORDER A BY sal DESC;
        max_limit = LIMIT max_sal 1;
        GENERATE FLATTEN(max_limit);

DUMP C;

【讨论】:

@inquistive_mind 实际上我正在寻找每个部门的名称、eno 和 max sal

以上是关于用于查找每个部门的工资的最大值、最小值、平均值、总和的 Pig 脚本的主要内容,如果未能解决你的问题,请参考以下文章

查询每个部门总工资,和每个部门的平均工资的sql语句?

第七章 高级查询

7.02 求某列中的最小最大值

PL/SQL 函数查看最高工资

Oracle 多表查询

Oracle中PL/SQL的例题:-- 输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)