开发者社区 > 大数据与机器学习 > 大数据计算 MaxCompute > 正文

一个简单的 join 的例子,目的是获取 60 岁以上用户花费大于 1000 的详细信息,由于年纪和

已解决

一个简单的 join 的例子,目的是获取 60 岁以上用户花费大于 1000 的详细信息,由于年纪和花费在两张表中,所以此时需要做一次 join。一般来说 join 有哪两种实现方式?

展开
收起
游客lmkkns5ck6auu 2022-08-10 10:46:43 356 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    一是 Sorted Merge Join:也就是对于 a 和 b 两个子句执行后的数据按照 join key (userid) 进行分区,然后在下游节点按照相同的 key 进行Merge Join 操作,实现 Merge Join 需要对两张表都要做 shuffle 操作——也就是进行一次数据交换,特别的如果有数据倾斜(例如某个 userid 对应的交易记录特别多),这时候 MergeJoin 过程就会出现长尾,影响执行效率;

    二是 Map join (Hash join) 的方式:上述 sql 中如果 60 岁以上的用户信息较少,数据可以放到一个计算节点的内存中,那对于这个超小表可以不做 shuffle,而是直接将其全量数据 broadcast 到每个处理大表的分布式计算节点上,大表不用进行 shuffle 操作,通过在内存中直接建立 hash 表,完成 join 操作,由此可见 map join 优化能大量减少 (大表) shuffle 同时避免数据倾斜,能提升作业性能。但是如果选择了 map join 的优化,执行过程中发现小表数据量超过了内存限制(大于 60 岁的用户很多),这个时候 query 执行就会由于 oom 而失败,只能重新执行。

    以上内容摘自《“伏羲”神算》电子书,点击https://developer.aliyun.com/topic/download?id=873

    2022-08-10 17:46:14
    赞同 展开评论 打赏

MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。

相关电子书

更多
4个迭代,从批量交...1573957773.pdf 立即下载
十分钟上线-使用函数计算构建支付宝小程序服务 立即下载
低代码开发师(初级)实战教程 立即下载