如何在hivesql中为date列执行between操作符

odopli94  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(316)

我会尽量把我的问题解释清楚。我想按日期筛选一个表(仅选择日期包含在当前月份中的记录),在oracle sql中,我使用以下查询来实现此目标:

select * from table t1 
where t1.DATE_COLUMN between TRUNC(SYSDATE, 'mm') and SYSDATE

如何在配置单元sql中复制相同的筛选器?我应该用来应用过滤器的列是时间戳类型的列(例如2017-05-15 00:00:00)。
我用的是cdh 5.7.6-1。
有什么建议吗?

pgvzfuti

pgvzfuti1#

您可以格式化为字符串:

where date_format(t1.DATE_COLUMN, 'y-m') = date_format(current_timestamp, 'y-m')

我意识到我现在没有Hive。文件显示 'y-m' ,但java文档表明 'yyyy-mm' .

bbuxkriu

bbuxkriu2#

请注意 unix_timestamp 不是固定的,将在查询期间更改。
因此,它不能用于分区消除。
对于较新的配置单元版本,请使用 current_date / current_timestamp 相反。
https://cwiki.apache.org/confluence/display/hive/languagemanual+udf

select  * 
from    table t1 
where   t1.DATE_COLUMN  
          between  cast(from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp)
          and      cast(from_unixtime(unix_timestamp()) as timestamp)
;
select  cast (from_unixtime(unix_timestamp(),'yyyy-MM-01 00:00:00') as timestamp)
       ,cast (from_unixtime(unix_timestamp()) as timestamp)
;
+---------------------+---------------------+
|         _c0         |         _c1         |
+---------------------+---------------------+
| 2017-05-01 00:00:00 | 2017-05-16 01:04:55 |
+---------------------+---------------------+

相关问题