Hive 十分钟内排名前十-配置单元查询
从00:00开始,每5分钟我必须计算10个访问量最多的站点 以下是我的数据: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 我对将多个查询作为单个
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分组以得到结果
注意:您可以根据需要设置排序