hadoop—减少配置单元查询执行时间的方法

nwlls2ji  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(353)

由于事务表中的数据量太大,我们每天都会运行下面的查询,而且这个查询会运行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

我试着减少减速机的数量来帮助加速,也试着启用矢量化但在这里运气不太好。我们在找泰兹。

ljo96ir5

ljo96ir51#

重新设计表并使用索引。
例如,我会使用一个数字“state”列或枚举列,也会使用一个数字或枚举“event”列。这有助于生成有效的索引,而不是varchar或文本类型。
如果查询正在使用索引,索引可以显著提高查询速度。
不管怎样,我不知道表的结构和涉及的记录的数量,我只是猜测。。。

tquggr8v

tquggr8v2#

不需要两次应用distinct
if表格 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'

相关问题