Date 在蜂巢中通过改变周数来欺骗一年中的一周
我研究这个问题已经有一段时间了。基本上,我有一组简单的数据,包括用户ID和时间戳。我想知道每周有多少不同的UserId出现,关键是我的一周是在星期日-星期六,而不是星期一-星期日,这是Weekofyear()使用的 现在我每周都在硬编码并运行查询:Date 在蜂巢中通过改变周数来欺骗一年中的一周,date,hive,counting,Date,Hive,Counting,我研究这个问题已经有一段时间了。基本上,我有一组简单的数据,包括用户ID和时间戳。我想知道每周有多少不同的UserId出现,关键是我的一周是在星期日-星期六,而不是星期一-星期日,这是Weekofyear()使用的 现在我每周都在硬编码并运行查询: SELECT count(distinct UserId) FROM data.table where from_unixtime((CAST(timestamp as BIGINT))) between TO_DATE("2016-
SELECT
count(distinct UserId)
FROM data.table
where from_unixtime((CAST(timestamp as BIGINT)))
between TO_DATE("2016-06-05") AND TO_DATE("2016-06-12")
我正试图找到一种方法,将时间戳向后移一天,以欺骗一年中的一周,使其认为我的星期日实际上是星期一,但没有成功。我最近的徒劳尝试看起来像:
SELECT
count(distinct UserId), weekofyear(date_sub(from_unixtime(CAST(timestamp as BIGINT)),1))
FROM table.data
where from_unixtime((CAST(timestamp as BIGINT)))
between TO_DATE("2016-06-01") AND TO_DATE("2016-06-30")
group by weekofyear(date_sub(from_unixtime(CAST(timestamp as BIGINT)),1))
这就产生了相同的数字,就像我没有减去一天一样。我不知道这为什么不起作用。我觉得应该有办法处理这件事。现在,如果我想按周提取所有数据,其中X为真,我必须每周手动提取,这是不可持续的。关于如何更聪明地工作有什么建议吗
多谢各位 简单解决方案
您只需创建自己的公式,而不必使用“一年中的一周”的预定义函数
优点:你可以在一周内接受任何一组7天的训练
在您的情况下,因为您希望本周从星期日开始,所以我们只需要一年中的第一个星期日
eg-2016年的第一个星期日是2016年1月3日的“2016-01-03”
--假设时间戳列的格式为“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;
我想你是想用lower()来取整?如果是这样的话,这在蜂巢中不起作用,但我将其转换为INT,这似乎完成了这个技巧!非常感谢。