如何覆盖 bigquery 现有表中的列值

Posted

技术标签:

【中文标题】如何覆盖 bigquery 现有表中的列值【英文标题】:How to overwrite column values in bigquery existing table 【发布时间】:2021-08-16 17:45:14 【问题描述】:

我需要覆盖/更新 bigquery 中的列值。 下面解决方案的问题是每次需要上传少量记录时都会加载大量数据。 需要一个更优化的解决方案,只上传匹配的 id。

额外:如果它可以检查值是否相同会更好,否则它不会更新记录。 我认为它会随着负载减少更多

表 1:

name   id    value
jose   1     10
jack   5     15
lex    4   12

表 2:

id   value
1    200
2    200
3    700
4    800
5    200

查询:

select
t1.name,
t1.id,
t2.value

from table 1 as t1
left join table2 as t2
on t1.id=t2.id

下面链接中的示例创建了一个新表,因此不起作用。它需要更新现有表中的值。

changing column values in bigquery

【问题讨论】:

【参考方案1】:

你错了。

在 BigQuery 中,您支付所读内容,而不是所写内容。因此,如果您需要读取很多行进行比较,则每次读取您都需要付费,并且写入是免费的。因此,您应该使用 WHERE 逻辑减少您“阅读”的项目数量以降低成本。

【讨论】:

以上是关于如何覆盖 bigquery 现有表中的列值的主要内容,如果未能解决你的问题,请参考以下文章

更改 bigquery 中的列值

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回

如何引用 BigQuery SQL 中先前行的列值,以便执行操作或计算?

如何编写 BigQuery/SQL 查询以将一个表中的列的平均值与第二个/另一个表中的列相除

在bigquery中以编程方式更新/插入数据

在另一个表的 select 子句中使用一个表中的列值