开发者社区 问答 正文

案例分析

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 565 分享
分享
版权
举报
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 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问