大数据之Hive:hive中的if函数

1.语法

语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull

2.基本实例

在mysql中,hive中基本一致

在mysql中

select source,if(source='猎聘',1,2) as flag from t_cal_dowell_resume

在hive中

select a,b,c,if(b='上帝',1,2) as bb from tmp.csv_t1 

3.实战

3.1:数据准备

表1:拉链表 dwd_dim_user_info_his ,2019-01-01

用户ID姓名开始时间结束时间
1张三2019-01-019999-99-99
2李四2019-01-019999-99-99
3王五2019-01-019999-99-99

表2:用户变化表 ods_user_info ,2019-01-02

用户ID姓名
1张三
2李小四
3王五
4赵六
5田七

3.2:需求一:得到临时拉链表 dwd_dim-user_info_his_tmp, 2019-01-02

如下图

用户ID姓名开始时间结束时间
1张三2019-01-019999-99-99
2李四2019-01-012019-01-01
2李小四2019-01-029999-99-99
3王五2019-01-019999-99-99

SQL如下:

 select 
        uh.id,
        uh.name,
        uh.start_date,
        if(ui.id is not null  and uh.end_date='9999-99-99', date_add(ui.dt,-1), uh.end_date) end_date
    from dwd_dim_user_info_his uh left join 
    (
        select
            *
        from ods_user_info
        where dt='2019-01-02'
    ) ui on uh.id=ui.id

3.2:需求二:得到临时拉链表 dwd_dim-user_info_his_tmp, 2019-01-02

如下图

用户ID姓名开始时间结束时间
1张三2019-01-019999-99-99
2李四2019-01-012019-01-01
2李小四2019-01-029999-99-99
3王五2019-01-019999-99-99
4赵六2019-01-029999-99-99
5田七2019-01-029999-99-99
select * from 
(
    select 
        id,
        name,
        '2021-03-21' start_date,
        '9999-99-99' end_date
    from ods_user_info where dt='2019-01-02') 
    union all 
    select 
        uh.id,
        uh.name,
        uh.start_date,
        if(ui.id is not null  and uh.end_date='9999-99-99', date_add(ui.dt,-1), uh.end_date) end_date
    from dwd_dim_user_info_his uh left join 
    (
        select
            *
        from ods_user_info
        where dt='2019-01-02'
    ) ui on uh.id=ui.id
)his 
order by his.id, start_date;

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值