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

Posted

技术标签:

【中文标题】减少 Hive 查询执行时间的方法【英文标题】:Approach to reduce the execution time of a Hive query 【发布时间】:2019-03-07 14:13:47 【问题描述】:

由于事务表中的数据量很大,我们每天都在下面运行这个查询,这个查询运行了 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 上运行。

【问题讨论】:

【参考方案1】:
    您不需要应用 DISTINCT 两次 如果表mstr_wrk.cust_transationload_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'

【讨论】:

【参考方案2】:

重新设计表格并使用索引。

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

如果查询正在使用索引,则可以显着提高查询速度。

反正不知道表结构和涉及的记录数,我只是猜测......

【讨论】:

以上是关于减少 Hive 查询执行时间的方法的主要内容,如果未能解决你的问题,请参考以下文章

使用java语句类的单个execute()方法执行多个hive查询

通过 Spark SQL 读取 Hive Table 的最佳方法是啥?

hive上执行查询语句时无结果反馈,是啥原因?

Hive 查询执行时间过长

在 hadoop 中如何执行 hive 查询

打包或自动执行 Hive 查询