2015-11-20 14 views
1

我正在嘗試在我的twitter數據中找到前10位提及(@xxxxx)。我創建了初始表twitter.full_text_ts並將其加載到我的數據中。查找數據中出現的前10位

create table twitter.full_text_ts as 
select id, cast(concat(substr(ts,1,10), ' ', substr(ts,12,8)) as timestamp) as ts, lat, lon, tweet 
from full_text; 

香港專業教育學院已經能夠使用該查詢(模式)

select id, ts, regexp_extract(lower(tweet), '(.*)@user_(\\S{8})([:| ])(.*)',2) as patterns 
from twitter.full_text_ts 
order by patterns desc 
limit 50; 

執行該提取提到在微博給了我

USER_a3ed4b5a 2010-03-07 03:46:23 fffed220 
USER_dc8cfa6f 2010-03-05 18:28:39 fffdabf9 
USER_dc8cfa6f 2010-03-05 18:32:55 fffdabf9 
USER_915e3f8c 2010-03-07 03:39:09 fffdabf9 
and so on... 

你可以看到fffed220等是提取模式。

現在我想要做的是計數每個這些提及(模式)發生的次數並輸出前10位。例如,fffdabf9發生20次,fffxxxx發生17次等等。

+0

蜂房不會讓我用用計regex_extract()模式? – Cale

回答

0

最可讀的方式做,這將是你的第一個查詢保存到一個臨時表,然後做臨時表GROUPBY:

create table tmp as 
--your query 

select patterns, count(*) n_mentions 
from tmp 
group by patterns 
order by count(*) desc 
limit 10; 
+0

它不會讓我按模式分組造成它不是一列 – Cale

+0

它通過查詢具有選定模式的臨時表來工作,從(tt)tnt1 >限制10; – Cale

0
with mentions as 
(select id, ts, 
regexp_extract(lower(tweet), '(.*)@user_(\\S{8})([:| ])(.*)',2) as patterns 
from twitter.full_text_ts 
order by patterns desc 
limit 50) 
select patterns, count(*) 
from mentions 
group by patterns 
order by count(*) desc 
limit 10;