以下查询需要大量时间才能执行。它与tez执行引擎一起运行。

SELECT STG.EMP_TYPE, DEPT, A.TOTAL_COUNT, COUNT(DISTINCT EMP_ID) AS COUNT_DEPT
FROM
STAGE_SOURCE STG
LEFT OUTER JOIN
( SELECT EMP_TYPE, COUNT(DISTINCT EMP_ID) AS TOTAL_COUNT
  FROM STAGE_SOURCE
  GROUP BY EMP_TYPE
) A
ON STG.EMP_TYPE = A.EMP_TYPE
GROUP BY STG.EMP_TYPE, DEPT, A.TOTAL_COUNT;

是否有任何可以提高查询性能的重写选项或优化策略?

最佳答案

通过理解您的查询,我能够理解您需要计数2个值。
首先,每个EMP_TYPE下的EMP_ID计数,
其次。 DEPT和EMP_TYPE下的EMP_ID计数

SELECT

STG.EMP_TYPE,
DEPT,
TOTAL_COUNT,
COUNT(EMP_ID) AS COUNT_DEPT

FROM
STAGE_SOURCE STG
JOIN
( SELECT EMP_TYPE, COUNT(EMP_ID) AS TOTAL_COUNT
  FROM STAGE_SOURCE
  GROUP BY EMP_TYPE
) A
ON STG.EMP_TYPE = A.EMP_TYPE
GROUP BY STG.EMP_TYPE, DEPT,TOTAL_COUNT;

尽可能使用GROUP BY代替DISTINCT可以减少运行时间。
如上面“考虑我”所述,GROUP BY利用了索引的优势。

关于sql - 优化长时间运行的Hive SQL查询-具有与同一表的联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34256123/

10-10 11:53