2015-09-02 47 views
0

我一直在试图自动化Hive中的报告,这需要在过去30天内获取数据。Hive相当于从当前分区日期获取数据

等效于SQL:

select * from som_table where part >= Sysdate-30 and part < sysdate-1 

我使用下面的查询,但我不能得到MR工作开始。

select * 
from some_table 
where part >= date_add(date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1),1 - day(date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1))) 
and part < date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),-1) 

我搜索了但它说我必须通过脚本找到解决方案,但我需要在另一项工作中运行此查询。

+0

“我搜索过但它说我必须通过脚本找到解决方案,但我需要在其他工作中运行此查询。”请解释这是什么意思?你看到的具体错误是什么? – gobrewers14

+0

我简直不明白为什么你把“SysDate -30”翻译成一个非常复杂的公式,最终产生“SysDate -day(SysDate)”。无论如何,“SysDate -30”是Oracle方言,而不是标准的SQL。 –

回答

0

我认为你在Hive版本中的公式更复杂,他们需要。请尝试以下操作:

Select 
Date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP()), 30) as thirty_days_ago, 
Date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP()), 1) as one_day_ago 
+0

Sub(-1)= Add(+1)即“明天”,而不是“昨天”;-) –

+0

谢谢!相应编辑。 – mattinbits