文章 查看内容

Spark逻辑函数使用案例

Spark逻辑函数使用案例

43 0 函数专题 2024-7-15 15:40 发布者: 观小凡

CASE WHEN/RLIKE/COALESCE等逻辑判断函数使用案例。

案例一:

场景:

底层数据库里原始表记录了用户开通的功能明细,关键字段有【购买功能】【开通状态】【过期时间】,但是【开通状态】是数字代码,不能直观分辨功能真实的开通状态。

需求:判断开通状态和过期状态并用文本展示。期望效果如下图。

解决方案:

新建计算字段,使用case when函数对开通状态和过期时间进行判断,参考写法如下:

写法1:多条件判断
case 
when [开通状态]=1 and [过期时间]>= current_date() then '开通'
when [开通状态]=1 and [过期时间]< current_date() then '到期'
when [开通状态]=0 and [过期时间]>= current_date() then '试用中'
when [开通状态]=0 and [过期时间]< current_date() then '试用结束'
else '未开通'
end

写法2:嵌套case when
case when [开通状态]=1 then
    case when [过期时间]>= current_date() then '开通' 
    when [过期时间]< current_date() then '到期' 
    end
when [开通状态]=0 then 
    case when [过期时间]>= current_date() then '试用中' 
    when [过期时间]< current_date() then '试用结束' 
    end 
else '未开通' 
end

案例二:

场景:

有一张Jira工单数据表,由于部分工单(一线排查工单)会关联由GALAXY/UN/AT开头的工单(后端研发工单),GALAXY/UN/AT开头的工单状态才能代表真实的工单状态,所以我们需要在ETL里对工单状态进行处理。

需求:优先使用关联的 GALAXY/UN/AT 开头的工单的状态。

实现步骤:

  1. 在ETL里先使用字段 LINKID 把jira工单数据表和自身关联起来,得到关联工单的相关数据;

  1. 添加计算列,利用逻辑函数实现优先使用 GALAXY/UN/AT 开头的工单的状态。
case when [工单号] rlike 'GALAXY|UN|AT' then [状态]
else COALESCE([关联工单状态],[状态])
end

说明:

这里使用了3个逻辑函数:

  1. case when : 把工单分为2类,每类按照不同逻辑处理数据;
  2. rlike : 判断字符串是否匹配正则表达式。[工单号] rlike 'GALAXY|UN|AT' 用来判断 [工单号]里是否包含GALAXY、UN、AT 三者中的任一种;也可以写作 [工单号] like 'GALAXY%' or [工单号] like 'UN%' or [工单号] like 'AT%' 。正则表达式相关的逻辑函数请参考 正则表达式
  3. coalesce:返回第一个非 null 值。对于不以 GALAXY/UN/AT 开头的工单,优先使用关联工单的状态,如果无关联工单,则返回工单本身的状态。



路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部