Hive 十分钟内排名前十-配置单元查询

Hive 十分钟内排名前十-配置单元查询,hive,hql,Hive,Hql,从00:00开始,每5分钟我必须计算10个访问量最多的站点 以下是我的数据: time site 00:00:00 google.com 00:01:06 yahoo.com 00:03:06 youtube.com 00:05:09 google.com 00:11:07 amazon.com 00:14:05 yahoo.com 00:21:00 google.com 00:30:56 amazon.com 我对将多个查询作为单个

从00:00开始,每5分钟我必须计算10个访问量最多的站点 以下是我的数据:

  time     site
00:00:00    google.com
00:01:06    yahoo.com
00:03:06    youtube.com
00:05:09    google.com
00:11:07    amazon.com
00:14:05    yahoo.com
00:21:00    google.com
00:30:56    amazon.com
我对将多个查询作为单个配置单元查询的一部分感到困惑


请帮助。

查询:

select interv, col2, count(col2)
from (
  select floor((unix_timestamp(col1)-unix_timestamp(to_date(col1),'yyyy-MM-dd'))/600)*600 as interv, col1, col2  
  from default.test_time_group) t
group by interv,col2;
{time TIMESTAMP, site STRING}
interval  col2         count

0         google.com   2
0         yahoo.com    1
0         youtube.com  1
600       amazon.com   1
600       yahoo.com    1
1200      google.com   1
1800      amazon.com   1
示例模式

select interv, col2, count(col2)
from (
  select floor((unix_timestamp(col1)-unix_timestamp(to_date(col1),'yyyy-MM-dd'))/600)*600 as interv, col1, col2  
  from default.test_time_group) t
group by interv,col2;
{time TIMESTAMP, site STRING}
interval  col2         count

0         google.com   2
0         yahoo.com    1
0         youtube.com  1
600       amazon.com   1
600       yahoo.com    1
1200      google.com   1
1800      amazon.com   1
示例:

2015-10-07 00:00:00    google.com
2015-10-07 00:01:06    yahoo.com
结果

select interv, col2, count(col2)
from (
  select floor((unix_timestamp(col1)-unix_timestamp(to_date(col1),'yyyy-MM-dd'))/600)*600 as interv, col1, col2  
  from default.test_time_group) t
group by interv,col2;
{time TIMESTAMP, site STRING}
interval  col2         count

0         google.com   2
0         yahoo.com    1
0         youtube.com  1
600       amazon.com   1
600       yahoo.com    1
1200      google.com   1
1800      amazon.com   1
解释:我从日期的unix时间戳(无时间戳)中减去列日期的unix时间戳以检查间隔。为了在相同的时间间隔内获得所有10分钟的事务,我将其除以600,取
floor()
,然后乘以600。然后我按区间和col2分组以得到结果

注意:您可以根据需要设置排序