深入MaxCompute -第十弹 -IF ELSE分支语句

这篇具有很好参考价值的文章主要介绍了深入MaxCompute -第十弹 -IF ELSE分支语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介: MaxCompute通过脚本模式支持IF ELSE分支语句,让程序根据条件自动选择执行逻辑,支持更好的处理因数据不同而需要采用不同策略的业务场景产生的复杂SQL,提高开发者编程的灵活性!

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个 BU 的核心业务。MaxCompute 除了持续优化性能外,也致力于提升 SQL 语言的用户体验和表达能力,提高广大 MaxCompute 开发者的生产力。

MaxCompute 基于 MaxCompute2.0 新一代的 SQL 引擎,显著提升了 SQL 语言编译过程的易用性与语言的表达能力。我们在此推出深入 MaxCompute 系列文章

第一弹 - 善用MaxCompute编译器的错误和警告
第二弹 - 新的基本数据类型与内建函数
第三弹 - 复杂类型
第四弹 - CTE,VALUES,SEMIJOIN
第五弹 - SELECT TRANSFORM
第六弹 - User Defined Type
第七弹 - Grouping Set, Cube and Rollup
第八弹 - 动态类型函数
第九弹 - 脚本模式与参数视图

上一篇介绍了脚本模式,可以了解到脚本模式执行时是作为一个整体进行编译、提交,生成一个执行计划实现一次排队一次执行可充分利用资源,这个过程可以看到完整的执行计划给开发者提供更多的优化机会, 且书写自然对习惯用普通编程语言方式书写的开发者更友好。

更重要的是脚本模式支持IF ELSE分支语句,可以让程序根据条件自动选择执行逻辑。如脚本需要能够按照日期单双号选择不同的逻辑;脚本能够根据一个TABLE的行数采取不同的策略等业务场景,这个特性就可以很好的处理这类业务场景产生的复杂SQL,给了SQL开发者更多的操作空间。

本文中有例子采用MaxCompute Studio作展示,安装MaxCompute Studio的可以参照安装MaxCompute Studio相关文档进行安装并使用。

IF ELSE分支语句

语法格式

Max Compute的IF语法有以下几种:
IF (condition) BEGIN
  statement 1
  statement 2
  ...
END


IF (condition) BEGIN
  statements
END ELSE IF (condition2) BEGIN
  statements
END ELSE BEGIN
  statements
END

注意:

  • 当BEGIN和END内部只有1条语句,则可以省略。(类似于Java中的’{ }')。

  • 多个IF-ELSE可以相互嵌套使用。

  • Condition有2种,分别是Boolean表达式,和Boolean的Scalar subquery。

    • Boolean表达式的IF-ELSE可以在编译阶段决定执行哪个分支如
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

      从MaxCompute Studio的执行图可以看到,最终的作业只执行了src1的分支
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

    • Scalar Subquery,这种类型的IF ELSE在编译阶段无法决定执行哪个分支。如下内容编译器并不知道tb_1表中的数据,因此不能决定Condition是true还是false,而是在运行时才能决定。因此,需要提交多个作业。
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

      由下图MaxCompute Job执行图可以看到,这个任务一共提交了2个作业。
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

          其中,第一个计算  
      

      (SELECT count(*) FROM tb_1 ) > 1
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

      第二个计算剩余的部分。
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

      执行结果如下图:
      深入MaxCompute -第十弹 -IF ELSE分支语句,阿里云,大数据,云计算

示例

对于复杂的sql来说,常常有包含if else的逻辑,例如如下:

select  a.id 
,  greatest(b.c1, c.c1 ) as c1 
,  greatest(b.c2, c.c2 ) as c2
..
from (
select * from ta 
) a  
left outer  join (
select * from  (
     select  tx.id  , ty.c1 ,ty.c2
      (
     select *
     from foo ) tx
     join 
     (
     select *
     from  bar 
     ) ty  on tx.id2=ty.id2
) b  on a.id= b.id 
left  outer  join (
select * from tc
)c  on a.id=c.id ;

由于业务发生变化, 数据能与b表关联上的比较少,很多时候b表是空 ,但是偶尔有一定的流量。 表bar 数据量比较大,意味着foo join bar 代价较高。 所以希望脚本能实现这样的逻辑:当b表的流量为0的时候,改变sql执行逻辑只与tc关联。可以用if else分支语句如下:

@a := select * from ta;
@b :=SELECT  tx.id
        ,ty.c1
        ,ty.c2 ( SELECT * FROM foo ) tx
JOIN    (
            SELECT  *
            FROM    bar
        ) ty
ON      tx.id2 = ty.id2;
@c := select * from tc;

@select_expr table (id bigint ,c1 string,c2 string ...);

IF ( cast( (select count(*) as cnt  from @b ) as int)  == 0 ) BEGIN
@select_expr := select  a.id
,  c. c1
,  c.c2
...
from @a 
left outer  join
@c  on a.id=c.id;
END ELSE BEGIN
@select_expr := select  a.id
,  greatest(b.c1, c.c1 ) as c1
,  greatest(b.c2, c.c2 ) as c2
..
from @a a left outer  join @b  on a.id= b.id
left  outer  join @c  on a.id=c.id;

小节

MaxCompute基于ODPS 2.0的SQL引擎,提供了IF-ELSE分支语句,可以提高开发者编程的灵活性!
MaxCompute平台致力于持续提升SQL语言的表达能力,让我们期待下一弹内容。文章来源地址https://www.toymoban.com/news/detail-685710.html

到了这里,关于深入MaxCompute -第十弹 -IF ELSE分支语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python条件判断语句(if else)

            python中判断语句的基本结构由if和else组成,当if后面的条件为真时,执行if下面的语句;当if后面的条件为假时,执行else下面的语句。这里条件的真假都是用bool值来作为依据的,我们知道比较运算、成员运算、身份运算返回的结果都是bool值。所以比较运算、成员运算

    2024年02月09日
    浏览(60)
  • 【Python入门】Python的判断语句(if elif else语句)

    前言 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函数、函数进阶、数据容器、文件操作、异常模块与包、数据可视化等,

    2024年02月04日
    浏览(53)
  • C 语言教程:条件和 if...else 语句

    您已经学习过 C 语言支持数学中的常见逻辑条件: 小于: a b 小于或等于: a = b 大于: a b 大于或等于: a = b 等于: a == b 不等于: a != b 您可以使用这些条件来根据不同的决策执行不同的操作。 C 语言具有以下条件语句: 使用 if 来指定要执行的代码块,如果指定的条件为真

    2024年02月04日
    浏览(58)
  • Python- 条件语句if-elif-else

    目录 一、一个简单示例 二、条件测试 1. 检查是否相等 2. 检查是否相等时忽略大小写 3. 检查是否不相等 4. 数值比较 5. 检查多个条件 6. 检查特定值是否包含在列表中 7. 检查特定值是否不包含在列表中 8. 布尔表达式 三、if语句 1. 简单的if语句 2. if-else语句 3. if-elif-else结构 4

    2024年02月06日
    浏览(53)
  • 无涯教程-Perl - if...elsif...else语句函数

    if 语句后可以跟可选的 elsif ... else 语句,这对于使用单个 if ... elsif 语句测试各种条件非常有用。 Perl编程语言中的 if ... elsif...else 语句的语法是- 在这里,我们使用等于运算符==,用于检查两个操作数是否相等。如果两个操作数相同,则返回true,否则返回false。 Perl 中的 if

    2024年02月13日
    浏览(65)
  • Java(三)逻辑控制(if....else,循环语句)与方法

    1.1表达格式(三种) 小括号里面进行判断条件是否符合,正确执行语句 在小括号里面进行条件判断,正确执行语句1,错误执行语句2 表达式1正确,执行语句1,诺表达式1不正确, 则去判断表达式2是否正确,正确则执行语句2, 表达式2不正确,则去语句3。 外入: 为了能将值

    2024年02月09日
    浏览(47)
  • C++中使用 if…else 有条件地执行多条语句

    如果要在满足(或不满足)条件时执行多条语句,需要将它们组合成一个语句块。包含在大括号({})内的多条语句被视为语句块,例如: 这样的语句块也被称为复合语句。 写在花括号{}中的内容组成的语句,就是复合语句。特别的,如果你只写了一个花括号,里面什么内容

    2024年02月10日
    浏览(40)
  • 如何优雅的在SpringBoot中编写选择分支,而不是大量if else?

    部门通常指的是在一个组织或企业中组成的若干人员,他们共同从事某一特定工作,完成共同的任务和目标。在组织或企业中,部门通常是按照职能、工作性质或业务范畴等因素进行划分的,如财务部门、人力资源部门、市场部门等。 部门编号是公司或组织内部对不同职能部

    2024年02月08日
    浏览(45)
  • ASIC-WORLD Verilog(8)if-else语句和case语句

            在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:Verilog Tutorial         这是系列导航:

    2024年02月01日
    浏览(51)
  • 【Python入门篇】——Python中判断语句(if elif else语句,判断语句的嵌套与实战案例)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 某些场景下,判断

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包