在将以下查询从适用于Teradata的语法转换为HIVE时,我需要帮助。
我已经尝试了子查询的副本和过去,但是我无法使qualify子句起作用。
CREATE MULTISET VOLATILE TABLE Month_Shifts AS (
SELECT "Month"
, Emp_ID
, Emp_NM
, MAX(ending_team) OVER (PARTITION BY Emp_ID ORDER BY "Month" ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS Starting_team
, ending_team
FROM
(
SELECT "Month"
, Emp_id
, current_team AS Ending_team
, COUNT(DISTINCT call_key) AS CallVolume
FROM data
GROUP BY 1,2,3
QUALIFY ROW_NUMBER() OVER (PARTITION BY "month", Emp_ID, Emp_NM ORDER BY CallVolume DESC) = 1
) a
) WITH DATA NO PRIMARY INDEX ON COMMIT PRESERVE ROWS;
它应该能够正常运行。当前看到此错误消息: 失败:ParseException行1:260在'QUALIFY'附近'4'缺少EOF
答案 0 :(得分:1)
在Hive中,您只需将条件移动到外部查询即可:
SELECT "Month", Emp_ID, Emp_NM,
LAG(ending_team) OVER (PARTITION BY Emp_ID ORDER BY "Month") AS Starting_team,
ending_team
FROM (SELECT d."month", d.Emp_ID, d.Emp_NM,
current_team AS Ending_team,
COUNT(DISTINCT call_key) AS CallVolume,
ROW_NUMBER() OVER (PARTITION BY "month", Emp_ID, Emp_NM ORDER BY COUNT(DISTINCT call_key) DESC) as seqnum
FROM data d
GROUP d."month", d.Emp_ID, d.Emp_NM
) d
WHERE seqnum = 1;
注意:
QUALIFY
替换为WHERE
。SELECT *
与GROUP BY
一起使用。列出列。无论数据库如何。LAG()
,它更适合外部SELECT
。