日期递增的 Hive UDF
Hive UDF with date incrementing
我正在尝试编写一个用户定义的函数,允许您输入一个日期 (current_date) 和一个范围,查询将 return 以下日期以及有多少日期通过。例如,如果给定 current_date,查询将 return current_date - 0 天,next_day - 1 天。
我一直在尝试不同的日期类型(unixtimestamp、date、jodatime、localdatetime)。我废弃了以前的代码,真的只是希望对问题有一些了解并减少代码。
您可以使用纯 Hive 查询来完成:
set hivevar:start_date=2019-01-02;
set hivevar:end_date=2019-01-31;
with date_range as
(--this query generates date range
select date_add ('${hivevar:start_date}',s.i) as dt, s.i days
from ( select posexplode(split(space(datediff('${hivevar:end_date}','${hivevar:start_date}')),' ')) as (i,x) ) s
)
select dt, days from date_range;
Returns:
dt days
2019-01-02 0
2019-01-03 1
2019-01-04 2
2019-01-05 3
2019-01-06 4
2019-01-07 5
2019-01-08 6
2019-01-09 7
2019-01-10 8
2019-01-11 9
2019-01-12 10
2019-01-13 11
2019-01-14 12
2019-01-15 13
2019-01-16 14
2019-01-17 15
2019-01-18 16
2019-01-19 17
2019-01-20 18
2019-01-21 19
2019-01-22 20
2019-01-23 21
2019-01-24 22
2019-01-25 23
2019-01-26 24
2019-01-27 25
2019-01-28 26
2019-01-29 27
2019-01-30 28
2019-01-31 29
希望你明白了。
我正在尝试编写一个用户定义的函数,允许您输入一个日期 (current_date) 和一个范围,查询将 return 以下日期以及有多少日期通过。例如,如果给定 current_date,查询将 return current_date - 0 天,next_day - 1 天。 我一直在尝试不同的日期类型(unixtimestamp、date、jodatime、localdatetime)。我废弃了以前的代码,真的只是希望对问题有一些了解并减少代码。
您可以使用纯 Hive 查询来完成:
set hivevar:start_date=2019-01-02;
set hivevar:end_date=2019-01-31;
with date_range as
(--this query generates date range
select date_add ('${hivevar:start_date}',s.i) as dt, s.i days
from ( select posexplode(split(space(datediff('${hivevar:end_date}','${hivevar:start_date}')),' ')) as (i,x) ) s
)
select dt, days from date_range;
Returns:
dt days
2019-01-02 0
2019-01-03 1
2019-01-04 2
2019-01-05 3
2019-01-06 4
2019-01-07 5
2019-01-08 6
2019-01-09 7
2019-01-10 8
2019-01-11 9
2019-01-12 10
2019-01-13 11
2019-01-14 12
2019-01-15 13
2019-01-16 14
2019-01-17 15
2019-01-18 16
2019-01-19 17
2019-01-20 18
2019-01-21 19
2019-01-22 20
2019-01-23 21
2019-01-24 22
2019-01-25 23
2019-01-26 24
2019-01-27 25
2019-01-28 26
2019-01-29 27
2019-01-30 28
2019-01-31 29
希望你明白了。