2016-02-24 37 views
0

給出的例子數據集我想通過排序:谷歌BigQuery的分組方式包含關鍵字

email,domain_name 
[email protected],superlorem.com 
[email protected],superdolor.com 
[email protected],superamet.com 
[email protected],badlorem.com 
[email protected],baddolor.com 
[email protected],badamet.com 

而且我開始了與查詢,如... 選擇電子郵件 FROM表 WHERE (域名包含「悲」)或 (域名包含「坐」)或 (域名包含「阿梅德」) GROUP BY電子郵件

由「載」字,這樣是否有可能組結果s'dolor','坐'和'amet'?這些詞本身並不存在於一列中(例如,作爲域名的一部分,例如superlipsum.com)。我的最終目標是擁有一個CSV類似於這樣的:在它

Dolor,column1 
Dolor,column2 
Dolor,column3 
Sit,column4 
Sit,column5 
Sit,column6 
Sit,column7  
Amet,column8 
+0

你能否提供表格數據的例子,最終會出現你的預期結果 –

+0

糟糕,無法格式化評論,所以我將編輯帖子 –

+0

是你的問題中的email和domain_name這兩個(a和b)列嗎?在這種情況下什麼是「專欄」? –

回答

0

你需要單獨的表中的所有單詞(悲,坐,阿梅特等)
那麼,下面應該工作

SELECT 
    word, 
    email 
FROM yourTable AS t1 
CROSS JOIN wordsTable AS t2 
WHERE domain_name CONTAINS word 
ORDER BY word, email 

如果有限的單詞列表 - 你可以在下面(上飛)版本使用

SELECT 
    word, 
    email 
FROM yourTable AS t1 
CROSS JOIN (
    SELECT f0_ AS word FROM 
    (SELECT 'dolor'), 
    (SELECT 'sit'), 
    (SELECT 'amet') 
) AS t2 
WHERE domain_name CONTAINS word 
ORDER BY word, email 

兩者都會產生類似下面

word email  
amet [email protected] 
amet [email protected] 
dolor [email protected] 
dolor [email protected] 
0

另一種方法是使用正則表達式,即

SELECT 
regexp_extract(domain_name, r'(dolor|sit|amet)' word, 
email, 
FROM table 

大量查詢將編譯爲正則表達式自動機一次,並且將有效地把它應用到所有行。我期望這比JOIN提供更好的性能。

+0

只是要注意:regexp_extract使用的限制是你只能硬編碼值,所以更多的通用的情況下,相當多的單詞將無法正常工作或完全不工作 –