如何转换DAYOFWEEK和WEEKOFYEAR到Hive

时间:2016-12-20 22:06:21

标签: sql hive

我正在尝试GROUP BY计算Hive中数周的事件。我想要得出的是一年中每个星期六的日期(输出只需要返回我们有数据的周数)以及整个前一周发生的事件数(即{{ 1}}列应该是从星期日到星期六的事件总数)。

示例所需输出:

num_events

但我不知道如何转换+------------+------------+ | ymd_date | num_events | +------------+------------+ | 2016-01-09 | 42 | | 2016-01-16 | 500 | | 2016-01-23 | 1090 | | . | . | | . | . | | . | . | | 2016-12-31 | 23125 | +------------+------------+ 来获取每个星期六的日期。

我到目前为止:

WEEKOFYEAR

电流输出示例:

SELECT 
    concat_ws('-', cast(YEAR(FROM_UNIXTIME(time))as string),
        lpad(cast(MONTH(FROM_UNIXTIME(time))as string), 2, '0'), 
        cast(WEEKOFYEAR(FROM_UNIXTIME(time))as string)) as ymd_date,
    COUNT(*) as num_events
FROM 
    mytable
GROUP BY 
    concat_ws('-', cast(YEAR(FROM_UNIXTIME(time))as string),
    lpad(cast(MONTH(FROM_UNIXTIME(time))as string), 2, '0'),
    cast(WEEKOFYEAR(FROM_UNIXTIME(time))as string))
ORDER BY
    ymd_date

我认为到目前为止我所拥有的只是那里,但是日期(+------------+------------+ | ymd_date | num_events | +------------+------------+ | 2016-01-1 | 42 | | 2016-01-2 | 500 | | 2016-01-3 | 1090 | | . | . | | . | . | | . | . | | 2016-12-52 | 23125 | +------------+------------+ 列)显示的是年 - 月 - 周而不是年 - 月 - 日。

关于如何每周生成ymd_date的任何想法?

1 个答案:

答案 0 :(得分:1)

date_sub(next_day(from_unixtime (time),'SAT'),7)

Hive Operators and User-Defined Functions (UDFs)

select      date_sub(next_day(from_unixtime(time),'SAT'),7)     as ymd_date   
           ,count(*)                                            as num_events

from        mytable

group by    date_sub(next_day(from_unixtime(time),'SAT'),7)

order by    ymd_date
hive> select date_sub(next_day(from_unixtime(unix_timestamp()),'SAT'),7);
OK
2016-12-17