Hive 计算配置单元中两行之间的薪资差异

Hive 计算配置单元中两行之间的薪资差异,hive,hiveql,Hive,Hiveql,我有一张有以下列的表格- last_name, first_name, department, salary 我想计算工资低于100英镑的员工名单 给同一部门工资较高的直接员工。我找到了下面的答案,并尝试了一下,但我认为我做错了什么,因为我是新来的蜂巢 以下是我正在运行的查询- select last_name,first_name, salary from emp where 100 = LEAD(salary,1) OVER(PARTITION BY depart

我有一张有以下列的表格-

last_name,    first_name,  department,     salary    
我想计算工资低于100英镑的员工名单 给同一部门工资较高的直接员工。我找到了下面的答案,并尝试了一下,但我认为我做错了什么,因为我是新来的蜂巢

以下是我正在运行的查询-

select last_name,first_name, salary from emp where 
100 = LEAD(salary,1) OVER(PARTITION BY department ORDER BY salary)-salary;

请帮我解决这个问题。

使用
case
表达式

 SELECT last_name,
       first_name,
       salary
FROM   (SELECT last_name,
               first_name,
               salary,
               CASE
                 WHEN 100 > LEAD(salary, 1)
                              OVER(
                                PARTITION BY department
                                ORDER BY salary) - salary THEN 1
                 ELSE 0
               END sal_flag
        FROM   emp)
WHERE  sal_flag = 1;  

配置单元强制每个子查询都有一个名称。我刚刚在Kaushik的查询中添加了这个名称。试试这个,它会有用的

SELECT last_name,
       first_name,
       salary
FROM   (SELECT last_name,
               first_name,
               salary,
               CASE
                 WHEN 100 > LEAD(salary, 1)
                              OVER(
                                PARTITION BY department
                                ORDER BY salary) - salary THEN 1
                 ELSE 0
               END sal_flag
        FROM   employee) v
WHERE  sal_flag = 1; 
我个人更喜欢使用WITH子句,而不是下面的子查询。With子句使查询更具可读性。此外,它们通常会产生更好的执行计划

WITH sal_view 
AS (SELECT last_name,
               first_name,
               salary,
               CASE
                 WHEN 100 > LEAD(salary, 1)
                              OVER(
                                PARTITION BY department
                                ORDER BY salary) - salary THEN 1
                 ELSE 0
               END sal_flag
        FROM   employee) 
SELECT last_name,
       first_name,
       salary
FROM  sal_view
WHERE  sal_flag = 1;  
试一试


我运行了此查询,它给出的错误为-FAILED:ParseException行15:0无法识别子查询中“WHERE”“sal_flag”“=”附近的输入source@R.Gold:很难模拟配置单元查询以找出问题所在。没有可用的在线蜂巢模拟器。查询在语法上是正确的,但无法理解hive的错误。因此,您需要进行反复试验和修改,以查看查询是否在您的环境中工作。
    with temp as(
select last_name,
   first_name,
   department,
   salary,
   LEAD(salary, 1)
          OVER(                             PARTITION BY department
                    ORDER BY salary) as diff

    FROM   emp
    )

    select ast_name,
   first_name,
   department,
   salary
   from temp
    where diff >100