提高hive性能的一些hiveql的建议

1,/*+ streamtable() */ 标识哪张是大表,有利于查询优化器 和/*+ mapjoin( )*/类似的优化

2, hive建立索引减少mapreduce输入的数据量

3,explain可以解释hiveql的语句

3,  半连接Semi Join

        在map端过滤掉不会参加join操作的数据,就可以大大节省网络I/O

        选取一个小文件,假设是File1,将Join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。

在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,

剩下的Reduce阶段的工作也Reduce端Join相同

        用在替换in/exists 

4, from 表明

    insert into A

    insert into b

 这样可以避免俩次的表扫描  

 如果有多个场景要插入到同一个表中去或者目录,可以建立一个虚拟分区,这样就可以插入到相同目录了

但是第一个用overwrite,后面都不能用否则会覆盖前面的数据。

5,见谅减少俩表关联时候的数据量,(如果俩个都是大表时候)

select * from a inner join b on a.a1=b.a1

下面多个job数量,却减少每次job网络传输和I/O,执行效率会远高于上面

select * from 

(select * from a group by a1) a inner join (

select * from b group by b1) on a.a1=b.a1


你可能感兴趣的:(提高hive性能的一些hiveql的建议)