insert overwrite table crosstest
select /*+MAPJOIN(a)*/ a.ra,a.dec,b.ra,b.dec
from rosat2rc a join tycho2rc b
on (a.dec>83 and a.dec<93 and b.dec>83 and b.dec<93)
where 3.5*3.5/1200/1200>((a.ra-b.ra)*cos((a.dec+b.dec)*3.14/180/2))*((a.ra-b.ra)*cos((a.dec+b.dec)*3.14/180/2))+(a.dec-b.dec)*(a.dec-b.dec)
当要连接的两个表其中一个表非常小的时候,可以考虑使用mapjoin。mapjoin会将小表拷贝到每个运行map的节点上,并将其cache到内存 中,然后在map阶段连接大表。由于省去了reduce过程,效率会提高不少。使用mapjoin之后,join会执行两个map-reduce Job,不用mapjoin则只有一个。问了下少杰,原来hive.merge.mapfiles这个参数设置为true了。因为只有map而没有 reduce,map的数量又不好控制,可能导致大量的map任务,这样会生成许多文件。hive.merge.mapfiles为true时,会启动另 外一个map-reduce Job来合并小文件。
common join 则只有一个mapreduce任务,map扫描排序表数据,reduce进行join操作。
本文探讨了在特定场景下使用MapJoin提升查询效率的方法。通过将小表缓存至内存并在map阶段完成连接,避免了reduce过程,从而显著提高了处理速度。此外,还对比了MapJoin与CommonJoin的不同之处。
2900

被折叠的 条评论
为什么被折叠?



