开发者社区> 问答> 正文

案例分析

select f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)

语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错,该如何解决这个问题?

展开
收起
游客ysk6odvtzspxs 2021-12-05 09:12:47 541 0
1 条回答
写回答
取消 提交回答
  • 可以考虑使用mapjoin,mapjoin的原理: MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多这样就不会由于数据倾斜导致某个reduce上落数据太多而失败。由此原来的sql也可以通过使用hint的方式指定join时使用mapjoin。

    select /+ mapjoin(A)/ f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802) 再运行后发现执行的效率比以前的写法高了好多

    2021-12-05 09:14:42
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
2021阿里云安全案例集 立即下载
实时数据分析演示 立即下载
《实时数据分析演示)》 立即下载