我正在尝试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
的任何想法?
答案 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