繁体   English   中英

减少Hive查询执行时间的方法

[英]Approach to reduce the execution time of a Hive query

由于交易表中的数据量很大,我们每天在下面的查询中运行此查询,此查询运行3个小时左右。 有什么方法可以调整此查询或减少执行时间?

   CREATE TEMPORARY TABLE t1 AS
    SELECT DISTINCT EVENT_DATE FROM (
      SELECT DISTINCT EVENT_DATE FROM mstr_wrk.cust_transation
      WHERE load_date BETWEEN CAST(CAST('2019-03-05 04:00:31.0' AS TIMESTAMP) AS DATE) AND CURRENT_DATE() AND  event_title = 'SETUP'
      AND state != 'INACTIVE' AND mode != 'DORMANT') T

我试图减少减速器的数量以帮助加快速度,并且还尝试实现矢量化,但是在这里运气并不好。 我们正在tez上运行。

重新设计表并使用INDEX。

例如,我将使用数字“状态”列或枚举,以及数字或枚举“事件”列。 这可以帮助创建有效的索引,而不是varchar或文本类型。

如果查询正在使用索引,索引将大大提高查询速度。

无论如何,不​​知道表的结构和所涉及的记录数,我只是在猜测...

  1. 您无需两次申请DISTINCT
  2. 如果表mstr_wrk.cust_transation被划分load_date ,因为你使用的功能分区修剪将无法正常工作。 这将导致表完全扫描。 在shell脚本中计算日期并作为参数传递

在参数化脚本之前检查此脚本性能

  CREATE TEMPORARY TABLE t1 AS
      SELECT DISTINCT EVENT_DATE FROM mstr_wrk.cust_transation
      WHERE load_date >= '2019-03-05' AND load_date <= '2019-03-07' 
            AND  event_title = 'SETUP'
            AND state != 'INACTIVE' AND mode != 'DORMANT'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM