【问题标题】:Joining table on previous month with Hive使用 Hive 加入上个月的表
【发布时间】:2015-07-24 05:38:50
【问题描述】:

我正在尝试加入基于上个月的表,但在多次尝试失败后,我不确定如何解决此问题。

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

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 月问题。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    从日期中减去该月的天数并提取该月。见以下代码:

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

    【讨论】:

    • 一个不错的简单解决方案 - 我希望我能看到它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多