2016-09-08 2 views
0

В моем улом столе, у меня есть следующие столбцы:SQL: Среднее подсчетов

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 

Мне нужно найти количество адресов на сеанс для всех дат. я пытался что-то на линии

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 'количество'

Есть ли способ получить среднее количество баллов здесь?

ответ

0

Ваша ошибка 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; 
+0

Правильно, но это даст мне среднее количество URL-адресов и время, затрачиваемое на каждый идентификатор сессии. У меня есть миллионы сессионных идентификаторов за день и потенциально миллиарды в год, поэтому я ищу, чтобы получить среднее значение count (url) и сумму (время (потраченное)) для таблицы _whole_ для этого диапазона дат. – Craig

+0

@Craig, Чтобы улей, увеличение количества записей на миллион с каждым днем ​​не так уж много, я думаю. возможно, вам нужно добавить новые машины в ваш кластер hadoop. Если вы хотите получить номер URL всей таблицы. вы можете использовать: 'select count (отдельный url), sum (time_spent), avg (time_spent) from my_table' – aaronshan

+0

@aaronshon Я понимаю. Я сделал подсчет строк, и это составляет около 74 миллиардов долларов за год. Я решил взять случайные образцы вместо – Craig

Смежные вопросы