大数据之Hive:hive中的if函数
Posted 浊酒南街
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之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-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函数的主要内容,如果未能解决你的问题,请参考以下文章