java - 日期递增的 Hive UDF

标签 java hive hiveql user-defined-functions unix-timestamp

我正在尝试编写一个用户定义的函数,该函数将允许您输入日期(current_date)和范围,并且查询将返回以下日期以及已经过去的日期。例如,如果给定 current_date,查询将返回 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; 

返回:

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  

希望你明白了。

关于java - 日期递增的 Hive UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782074/

相关文章:

java - 我可以在 Hibernate table-per-hierarchy 继承策略中跨子类重用列吗?

java - 如何将链表 append 到链表的特定节点?

java - 我想设置 s3 对象特定保留

hadoop - 配置单元限制查询外部表时扫描通过的文件列表

hadoop - 配置单元数据加载问题

java - 使用BigInteger longValue()将15个字符长度的字符串转换为唯一的长数字

python - 通过 beeline 将 Hive 查询的输出结果存储在字符串中。也尝试使用 Popen 运行,但没有成功

hadoop - 尝试通过侧面 View 获取带有 hive 中数组中值的多行并爆炸

hadoop - Hive alter table change column name 将 'NULL' 赋予重命名的列

java - -XX :+UseGetTimeOfDay as a parameter do? 是什么意思