我需要加入4个表,并且在每个连接条件中,连接列是不同的
数据大小
Table emp - 8T
Table stu - 10GB
Table college - 800 MB
Table address - 2 TB
查询 -
select a.*,b.*,c.*,d.* from emp a
Left outer join stu b(a.id=b.id)
left outer join college c(a.trans_id=c.trans_id and a.emp_id=c.emp_id)
left outer join address d(a.seq_no=d.seq_no and a.emp_id=d.emp_id )
上述查询的执行时间太长,因为使用大量数据集。
有没有办法提高性能
答案 0 :(得分:0)
使用Tez作为执行引擎可以提高Hive的性能。
根据您是否使用预安装Hive附带的平台,或者安装了vanilla,您可能已经或可能没有Tez。
如果没有,可在此处找到Tez安装说明:Install/Deploy Instructions for Tez
要使用Tez,您需要在查询前加上:
set hive.execution.engine=tez;
在我的测试(3节点集群)中,我的平均性能提升了25%。
答案 1 :(得分:0)
有多种方法可以调整您的查询:
select a.* from tabA a join tabB b on a.id=b.id
。这里TabB应该大于tabA。 您可以参考this文档了解有关优化的更多详情。
答案 2 :(得分:0)
set hive.execution.engine=tez;
hive.exec.reducers.bytes.per.reducer=67108864;
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
你的桌子很大。如果可能的话减少数据量。例如,仅加入新的/最近更新的记录。