2016-02-11 43 views

回答

4

这样做:

SELECT word, nextword, nextword2, COUNT(*) c 
FROM (
SELECT pos, id, word, LEAD(word) OVER(PARTITION BY id ORDER BY pos) nextword, LEAD(word, 2) OVER(PARTITION BY id ORDER BY pos) nextword2 FROM (
SELECT id, word, pos FROM FLATTEN(
    (SELECT id, REGEXP_REPLACE(word, 'QUOTE', "'") word, POSITION(word) pos FROM 
    (SELECT id, SPLIT(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(LOWER(body), "'", 'QUOTE'), r'http.?://[^ ]*', r'URL'), r'\b', ' '), ' ') word 
    FROM [fh-bigquery:reddit_comments.2016_01] 
    WHERE score>200 
    HAVING REGEXP_MATCH(word, '[a-zA-Z0-9]') 
    ) 
), word) 
)) 
WHERE nextword IS NOT null 
GROUP EACH BY 1, 2, 3 
ORDER BY c DESC 
LIMIT 100 

(请注意,我过滤,用> 200的成绩更快的结果的意见 - 你可以做全月移动该过滤器)