我对bq完全不熟悉,我有一个关于MATH功能的问题。假设我有一个名为tab1的表,其中有A,B,C三个cols。我想编写一个查询,通过该查询将C的值替换为SUM(A + B)或A * B或逐行替换。这意味着如果第一行的A = 2,B = 3的值,那么C将是5,如果相同的是A = 4,则B = 3,然后第二行的C = 7,依此类推。 我只是想知道是否可以通过编写一个查询而不是逐个访问每一行并手动更新C的值?
瞄准
之类的东西UPDATE tab1 SET C = A+B
OR
UPDATE tab1 SET C = SUM(A,B)
我在思考过程中是否正确,是否可能?
答案 0 :(得分: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文件导出到Google云端存储中。
了解appending data to BigQuery tables或saving a query result to a persistent table。
答案 1 :(得分: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
显然,有些情况下您确实希望存储计算数据,在这种情况下,迈克尔的解决方案是可行的方法。