篇首语:本文由小编为大家整理,主要介绍了大数据之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-01 | 9999-99-99 |
2 | 李四 | 2019-01-01 | 9999-99-99 |
3 | 王五 | 2019-01-01 | 9999-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-01 | 9999-99-99 |
2 | 李四 | 2019-01-01 | 2019-01-01 |
2 | 李小四 | 2019-01-02 | 9999-99-99 |
3 | 王五 | 2019-01-01 | 9999-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-01 | 9999-99-99 |
2 | 李四 | 2019-01-01 | 2019-01-01 |
2 | 李小四 | 2019-01-02 | 9999-99-99 |
3 | 王五 | 2019-01-01 | 9999-99-99 |
4 | 赵六 | 2019-01-02 | 9999-99-99 |
5 | 田七 | 2019-01-02 | 9999-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函数的主要内容,如果未能解决你的问题,请参考以下文章