广义上我们通常用UDF(User Defined Function)来描述用户代码框架。现有的UDF/UDTF/UDAF接口主要是针对在单个数据表上的操作而设计。但是一旦涉及多表的用户自定义操作,用户经常需要依赖于内置join + 各种UDF/UDTF, 并且配合比较复杂的SQL语句来完成。甚至在一些多表操作的场景上,用户不得不放弃SQL而转向传统的完全自定义MR,才能完成所需的计算。
这两种方式对于用户的门槛都比较高。而且对于计算平台而言,多个复杂的join和散布在SQL语言各处的用户代码揉合在一起,带来的是多处的“逻辑黑盒”,并不利于产生最优的执行计划。而使用MR,不仅更大程度上剥夺了系统进行执行优化的可能性,而且由于MR绝大部分代码由Java完成,在执行效率上会远低于MaxCompute基于LLVM 代码生成器产生的深度优化native运行时。
MaxCompute 2.0的全面上线,为计算平台框架的发展提供了更大的灵活度,在这个基础上,我们提出了建设NewSQL生态的目标。NewSQL通过一个扩展的SQL框架,让用户能使用描述性的语言表达其主体逻辑流程,而仅在与分布系统执行流程无关的地方,才引入用户代码。这样的设计,能让用户对计算逻辑从“HOW”(怎样具体完成一个分布式计算流程),转变成“WHAT”(用户从逻辑上描述其想完成的事情和数据操作)。这样的转变,能让用户把更多的精力集中在“WHAT”上面,优化自己的商业处理逻辑上,而把“HOW”交给计算平台,让计算平台进行复杂的系统优化,产生最优的执行计划来完成具体流程。
在这个大背景下,我们在UDF框架中引入了UDJ这种全新的,针对多表数据操作的扩展机制。希望借由这种新的机制,减少用户之前不得不通过MR等方式对分布式系统底层细节的操作,从而达到用户可用性以及系统优化的双赢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。