上个月 table 加入 Hive
Joining table on previous month with Hive
我正在尝试加入基于上个月的 table,但在多次尝试失败后,我不确定如何解决这个问题。
我有一个更大的查询,但连接部分非常简单,我的第一次尝试是做这样的事情:
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,那么你会得到 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 月问题.
我还尝试在 ON 命令中使用 CASE 方法来处理 Jan-Dec 问题,然后才意识到 Hive 只接受等值连接。
如有任何帮助,我们将不胜感激。
从日期中减去该月的天数并提取月份。请参阅下面的代码:
ON MONTH(date_sub(main_table.local_date,day(main_table.local_date))) = M.mth
我正在尝试加入基于上个月的 table,但在多次尝试失败后,我不确定如何解决这个问题。
我有一个更大的查询,但连接部分非常简单,我的第一次尝试是做这样的事情:
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,那么你会得到 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 月问题.
我还尝试在 ON 命令中使用 CASE 方法来处理 Jan-Dec 问题,然后才意识到 Hive 只接受等值连接。
如有任何帮助,我们将不胜感激。
从日期中减去该月的天数并提取月份。请参阅下面的代码:
ON MONTH(date_sub(main_table.local_date,day(main_table.local_date))) = M.mth