上个月加入Hive表

时间:2015-07-23 16:50:33

标签: hive hiveql

我正在尝试根据前一个月加入一张表,但经过多次尝试失败后,我不知道如何解决这个问题。

我有一个更大的查询,但加入部分非常简单,我的第一次尝试是做这样的事情:

LEFT OUTER JOIN
(SELECT user_id, coalesce(COUNT(*),0) as count_m,mth
 FROM table_name
 GROUP BY user_id,mth
) M
ON MONTH(main_table.local_date) -1 = M.mth
AND M.user_id = main_table.user_id

但是当然如果你在1月份有一个日期并减去1那么你会得到0而不是12。

接下来的尝试是使用Hive的datesub函数做一些事情:

LEFT OUTER JOIN
(SELECT user_id, coalesce(COUNT(*),0) as count_m,mth
 FROM table_name
 GROUP BY user_id,mth
) M
ON MONTH(date_sub(main_table.local_date,31)) = M.mth
AND M.user_id = main_table.user_id

但问题显然是显而易见的 - 并非每个月都有31天所以你在上个月没有正确匹配的某些日期会遇到问题(尽管至少这解决了上一次方法中的1月至12月问题。 / p>

我还尝试在ON命令中使用CASE方法来处理Jan-Dec问题,然后才意识到Hive只接受equi-joins。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

从日期中减去当月的天数并提取月份。请参阅以下代码:

ON MONTH(date_sub(main_table.local_date,day(main_table.local_date))) = M.mth