2014-11-22 50 views
2

我想要做的是從BigQuery上的可用/公共trigram數據中重新創建bigram數據。一路上,我想削減數據。這很難,因爲單個行中似乎有數據列表,例如,cell.value是包含所有年份的列名,並且它可以包含100個元素,並且所有這些元素都在一行中。在BigQuery中對公共trigram數據進行排序

我想的列是這樣的:

NGRAM,第一,第二,第三,cell.match_count *修改

在修改最後一列是所有比賽數的總和從2000年到2008年(忽略所有的舊數據)。我懷疑這會大大減少文件的大小(以及其他一些調整)。

我到目前爲止的代碼是(和我要運行該2次獨立的查詢)

SELECT ngram, cell.value, cell.match_count 
FROM [publicdata:samples.trigrams] 
WHERE ngram = "I said this" 
AND cell.value in ("2000","2001","2002","2003","2004","2005","2006","2007","2008") 

SELECT ngram, SUM(cell.match_count) as total 
FROM [one_syllable.test] 
GROUP BY ngram 

結果是2列與1列的數據:我說這一點,1181

但我想獲得這個爲每NGRAM我之前做一些更多的微調

我怎樣才能結合查詢,以便它一次完成,也返回列firstsecond,和third

謝謝!

PS我試過

SELECT ngram, cell.value, cell.match_count 
FROM [publicdata:samples.trigrams] 
WHERE cell.value in ("2000","2001","2002","2003","2004","2005","2006","2007","2008") 

但我得到一個錯誤「反應過大,返回」 ......

回答

3

錯誤「反應太大,回報」意味着你將不得不將結果寫入目標表格,選中「允許大型結果」。直接使用BigQuery won't return more than 128MB而不使用目的地表格。

您應該能夠使用某些聚合函數生成想要的表。嘗試「GROUP EACH BY ngram」並行聚合,並使用FIRST函數從第一列,第二列和第三列中選擇一個值。它看起來像這樣:

SELECT ngram, FIRST(first), FIRST(second), FIRST(third), SUM(cell.match_count) 
FROM [publicdata:samples.trigrams] 
WHERE cell.value in ("2000","2001","2002","2003","2004","2005","2006","2007","2008") 
GROUP EACH BY ngram; 
+0

謝謝!但現在我意識到trigrams缺少大量數據。例如,在google n-gram查看器中,您可以鍵入「保持綁定」或「點擊該車」並獲得結果,但搜索公共trigram數據不會返回任何結果。你知道這是爲什麼嗎?出於我的目的,我不想要最明顯的三字母/雙字母,但中頻字母,因爲它們包含更多的內在價值。 – thatandrey 2014-11-22 20:55:47