减少 Hive 查询执行时间的方法
Approach to reduce the execution time of a Hive query
我们运行下面这个查询每天和这个查询运行s 3 小时左右,由于事务中的数据量table。有什么方法可以调整此查询或减少执行时间?
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
我尝试减少 reducer 的数量以帮助加速,还尝试启用矢量化,但运气不佳。我们正在 运行 关注 tez。
重新设计 table 并使用索引。
例如,我会使用数字 'state' 列或枚举以及数字或枚举 'event' 列。这有助于创建高效索引,而不是 varchar 或文本类型。
如果查询正在使用索引,索引会显着提高查询速度。
反正不知道table结构和涉及的记录数,我只是猜测...
- 您不需要申请两次 DISTINCT
- 如果 table
mstr_wrk.cust_transation
被 load_date
分区,分区修剪将不起作用,因为您正在使用函数。这将导致 table 全面扫描。在 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'
我们运行下面这个查询每天和这个查询运行s 3 小时左右,由于事务中的数据量table。有什么方法可以调整此查询或减少执行时间?
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
我尝试减少 reducer 的数量以帮助加速,还尝试启用矢量化,但运气不佳。我们正在 运行 关注 tez。
重新设计 table 并使用索引。
例如,我会使用数字 'state' 列或枚举以及数字或枚举 'event' 列。这有助于创建高效索引,而不是 varchar 或文本类型。
如果查询正在使用索引,索引会显着提高查询速度。
反正不知道table结构和涉及的记录数,我只是猜测...
- 您不需要申请两次 DISTINCT
- 如果 table
mstr_wrk.cust_transation
被load_date
分区,分区修剪将不起作用,因为您正在使用函数。这将导致 table 全面扫描。在 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'