Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在蜂巢中通过改变周数来欺骗一年中的一周_Date_Hive_Counting - Fatal编程技术网

Date 在蜂巢中通过改变周数来欺骗一年中的一周

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-

我研究这个问题已经有一段时间了。基本上,我有一组简单的数据,包括用户ID和时间戳。我想知道每周有多少不同的UserId出现,关键是我的一周是在星期日-星期六,而不是星期一-星期日,这是Weekofyear()使用的

现在我每周都在硬编码并运行查询:

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,这似乎完成了这个技巧!非常感谢。