大数据计算MaxCompute 【打平时间 -- 笛卡尔积】 相关的性能问题:
我有一张源头表,记录了【从去年开始、每个客户、某事物、在某时刻、的值】的 history_change 变化。我现在需要把这张表打平到 天 + 小时 + 客户 + 某事物 + 值。我的做法是,构建出时间序列time_series as (select explode(sequence(unix_timestamp(开始时间,unix_timestamp(NOW())),3600)) AS hour_timestamp) ,就是一个小时一条记录,3600秒一个步伐。
然后我去填充, FROM time_series t JOIN history_change n ON FROM_UNIXTIME(t.hour_timestamp,'yyyy-MM-dd HH:00:00') >= n.change_time_hour
然后再去根据 该事物+小时 做分组,按照时间倒序去排序,得到某时刻最新的一个数据。
OK,大体思路是这样,下面是问题:
JOIN ON a>=b ,会出现笛卡尔乘积,当数据量比较小,不会有问题。但是数据量稍微大一点,比如a是小时表,有8700条, b 是事物历史变更表,有158万。这个时候笛卡尔积就会有137亿产生,就会跑不动了。
我现在碰到的情况就是这样,请问有什么好的解法吗?
觉得作业慢的话可以看下:https://help.aliyun.com/zh/maxcompute/user-guide/job-run-faq?spm=a2c4g.11186623.0.i83#9eb746e030qza
另外看你log view里每个阶段只起了一个instance,建议调多一些,再跑下看看:https://help.aliyun.com/zh/maxcompute/user-guide/flag-parameters?spm=a2c4g.11186623.0.0.37e71bd4tSNjYr#concept-2278178
此回答整理自钉群“MaxCompute开发者社区1群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。