卓尔高考网

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

篇首语:本文由小编为大家整理,主要介绍了大数据之Hive:hive中的if函数相关的知识,希望对你有一定的参考价值。

目录

  • 1.语法
  • 2.基本实例
    • 在mysql中
    • 在hive中
  • 3.实战
    • 3.1:数据准备
    • 3.2:需求一:得到临时拉链表 dwd_dim-user_info_his_tmp, 2019-01-02
    • 3.2:需求二:得到临时拉链表 dwd_dim-user_info_his_tmp, 2019-01-02

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;

以上是关于大数据之Hive:hive中的if函数的主要内容,如果未能解决你的问题,请参考以下文章

您可能还会对下面的文章感兴趣: