0

我对 bq 完全陌生,我有一个关于 MATH 函数的问题。假设我有一个名为 tab1 的表,其中包含 A、B、C 三个列。我想编写一个查询,用 SUM(A+B) 或 A*B 或逐行替换 C 的值。这意味着如果第一行的 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)

我在思考过程中是否正确,这可能吗?

4

2 回答 2

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 Cloud Storage。

阅读有关将数据附加到 BigQuery 表将查询结果保存到持久表的信息。

于 2012-09-29T00:21:33.530 回答
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

显然,在某些情况下,您可能真的想存储计算数据,在这种情况下,Michael 的解决方案是可行的方法。

于 2012-09-29T01:40:11.810 回答