开发者社区> 问答> 正文

UDT的实现原理是什么

UDT的实现原理是什么

展开
收起
Puppet 2020-03-19 22:49:56 3029 0
1 条回答
写回答
取消 提交回答
  • 通过以下示例为您介绍UDT的执行过程。 --示例数据。

    
    @table1 := select * from values ('100000000000000000000') as t(x);
    @table2 := select * from values (100L) as t(y);
    --代码逻辑。
    --new创建对象。
    @a := select new java.math.BigInteger(x) x from @table1; 
    --静态方法调用。         
    @b := select java.math.BigInteger.valueOf(y) y from @table2;  
    --实例方法调用。    
    select /*+mapjoin(b)*/ x.add(y).toString() from @a a join @b b;  
    
    --输出结果如下所示。
    100000000000000000100
    

    image.png 该UDT共有三个Stage:M1、R2和J3。如果您熟悉MapReduce原理即可知道,由于Join的存在需要做数据Reshuffle,所以会出现多个Stage。通常,不同的Stage是在不同的进程、不同的物理机器上运行的。

    M1只执行new java.math.BigInteger(x)操作。

    J3在不同阶段执行了java.math.BigInteger.valueOf(y)和x.add(y).toString()操作。这几个操作不仅分阶段执行,而且在不同的进程、不同的物理机器上执行。UDT把这个过程封装起来,将这个过程变得看起来和在同一个JVM中执行的效果几乎一样。

    从上述示例中,您可以看到子查询的结果允许UDT类型的列。例如上面变量a的x列是java.math.BigInteger类型,而不是内置类型。UDT类型的数据可以被带到下一个Operator中,再调用其它方法,甚至可以参与数据Shuffle。

    2020-03-19 22:50:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载