【问题标题】:SQL: Average of countsSQL:计数的平均值
【发布时间】:2016-09-08 19:56:56
【问题描述】:

在我的 Hive 表中,我有以下列:

date, SessionID, url,              time_spent
20160901 119     www.hello.com/hehe  10
20160901 121     www.abc.com/xyz     5
20160901 119     www.google.com      12

我需要找到所有日期每个 sessionid 的 url 数量。 我尝试了一些

Select sessionid, count(url), sum(time_spent) from my_table where date between '20160901' and '20160905' group by sessionid

...确实可以在很短的时间内使用,但每天有数百万个 sessionid,我需要获取一年的数据,所以这种方法行不通。

我认为计数的平均表示会起作用,所以我尝试了这个:

select count(sessionid), average(count(url)), avg(sum(time_spent)) from my_table where date between '20160901' and '20160905' group by sessionid;

但这失败了

尚不支持 UDAF 'count' 的位置

有没有办法在这里获得计数的平均值?

【问题讨论】:

    标签: sql count hive average


    【解决方案1】:

    您的 sql 错误。你应该使用 sql:

    select sessionid, count(sessionid), average(count(url)), avg(sum(time_spent)) from my_table where date between '20160901' and '20160905' group by sessionid;
    

    【讨论】:

    • 对,但这会给我平均 URL 数和每个 sessionID 花费的时间。我一天有数百万个 sessionID,一年可能有数十亿个,所以我希望获得该日期 whole 表的 count(url) 和 sum(time(spent)) 的平均值范围。
    • @Craig,对于蜂巢,我认为每天增加百万记录并不是一个很大的数字。也许,您需要将新机器添加到您的 hadoop 集群。如果您想获取整个表格的 url 编号。你可以使用:select count(distinct url), sum(time_spent), avg(time_spent) from my_table
    • @aaronshon 我明白了。我做了一个行数,一年大约有 740 亿。我决定改为随机抽样
    猜你喜欢
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多