2012-09-29 83 views
0

我對bq是全新的,我有一個關於MATH函數的問題。假設我有一張名爲tab1的表,其中有A,B,C三列。我想寫一個查詢,其中C的值由SUM(A + B)或A * B或逐行替換。這意味着如果第一行A = 2,B = 3,則C的值爲5,如果A = 4,B = 3,則C = 7,第二行等等。 我只是想知道如果這是可能的通過編寫一個單一的查詢,而不是逐一訪問每一行,並手動更新C的值?使用數學函數作爲Google BigQuery的表格基礎

旨在像

UPDATE tab1 SET C = A+B 

OR 

UPDATE tab1 SET C = SUM(A,B) 

難道我就在思考過程,這可能嗎?

回答

1

BigQuery表是附加的,所以你不能運行UPDATE查詢。

但是,你可以運行這樣的查詢:

SELECT 
    mother_age, father_age, mother_age + father_age 
AS age_sum 
FROM 
    [publicdata:samples.natality] 
WHERE 
    mother_age > 25 AND father_age > 25 
LIMIT 50; 

結果:

+------------+------------+---------+ 
| mother_age | father_age | age_sum | 
+------------+------------+---------+ 
|   28 |   35 |  63 | 
|   27 |   42 |  69 | 
|   37 |   51 |  88 | 
|   38 |   37 |  75 | 
etc... 

,然後將該結果保存到一個新表,或將其導出爲CSV文件導入到谷歌雲存儲。

閱讀關於appending data to BigQuery tablessaving a query result to a persistent table

1

bigquery的一個優點是你通常不需要存儲這些類型的計算 - 你可以每次計算它們。 BigQuery並行處理您的查詢,因此即使在查詢時添加一個複雜的計算也可以非常高效。像解析日期,正則表達式,三角函數等等,並不會減慢查詢的速度。

您甚至可以嵌套查詢以使計算更清晰。例如

SELECT c, d FROM (
    SELECT (a + b) as c, (a * b) as d FROM dataaset.table 
) WHERE c > 0 AND d % 10 == 3 

顯然有可能情況下,你真的想用來存儲計算的數據,並在這些情況下,邁克爾的解決方案是要走的路。