在Hive中按周计算日期

tf7tbtn2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(425)

我试着每周从Hive里的一张table上提取一组完全刷新的数字。现在我用这个方法:

SELECT
COUNT(DISTINCT case when timestamp between TO_DATE("2016-01-28") and TO_DATE("2016-01-30") then userid end) as week_1,
COUNT(DISTINCT case when timestamp between TO_DATE("2016-01-28") and TO_DATE("2016-02-06") then userid end) as week_2
FROM Data;

我想从以下几个方面得到更多:
按月、周从数据组中选择月(timestamp)、周(timestamp)、计数(distinct userid)
但我的一周是从周日到周六。有没有一种更聪明的方法可以在Hive里工作?
找到的解决方案:
您可以简单地创建自己的公式,而不必使用“一年中的一周”的预定义函数优势:您可以在一周内使用任何一组7天。
在你的情况下,既然你希望一周从星期天开始,我们只需要一年中星期天的第一个日期
例如,2016年的第一个星期天是2016年1月3日,即2016年1月16日的第3个星期天——假设时间戳列的格式为“yyyy-mm-dd”

SELECT
count(distinct UserId), lower(datediff(timestamp,'2016-01-03') / 7) + 1 as week_of_the_year 
FROM table.data 
where timestamp>='2016-01-03'
group by lower(datediff(timestamp,'2016-01-03') / 7) + 1;
ru9i0ody

ru9i0ody1#

我知道你需要把数据按周分组。你可以这样做:

SELECT weekofyear(to_date(timestamp)), COUNT (DISTINCT userid) FROM Data Group By weekofyear(to_date(timestamp))

相关问题