由于交易表中的数据量很大,我们每天在下面的查询中运行此查询,此查询运行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上运行。
答案 0 :(得分:0)
重新设计表格并使用索引。
例如,我将使用数字“状态”列或枚举,以及数字或枚举“事件”列。这可以帮助创建有效的索引,而不是varchar或文本类型。
如果查询正在使用索引,索引将大大提高查询速度。
无论如何都不知道表的结构和所涉及的记录数,我只是在猜测...
答案 1 :(得分:0)
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'