Google bigquery Google BigQuery DML-执行更新和删除时性能低下

Google bigquery Google BigQuery DML-执行更新和删除时性能低下,google-bigquery,google-cloud-platform,google-perftools,Google Bigquery,Google Cloud Platform,Google Perftools,为了更好地了解BigQueryDML功能的性能,我运行了一些BigQueryDML测试。到目前为止,以下是一些初步观察结果: 1在非常小的表中仅更新少数记录时,性能会降低30K+记录 UPDATE babynames.names_2014 SET name = 'Emma B' WHERE name = 'Emma'; 输出: -表中受影响记录的2行:33176 -查询已完成4.5秒,已处理621 KB 2从一个小表中仅删除几条记录时,性能非常慢 SQL: 输出: -2行受影响。 -查询完成

为了更好地了解BigQueryDML功能的性能,我运行了一些BigQueryDML测试。到目前为止,以下是一些初步观察结果: 1在非常小的表中仅更新少数记录时,性能会降低30K+记录

UPDATE babynames.names_2014
SET name = 'Emma B' 
WHERE name = 'Emma';
输出: -表中受影响记录的2行:33176 -查询已完成4.5秒,已处理621 KB

2从一个小表中仅删除几条记录时,性能非常慢

SQL:

输出: -2行受影响。 -查询完成耗时162.6秒,处理1.21 MB—约3分钟

问题: 1这些行为是已知的吗?
2.对如何提高绩效有何建议

1是预期值-主要DML场景是影响数百万/数十亿行的大型更新/删除。因此,延迟不如吞吐量重要

2看起来不正常-你能再试一次吗?您试图更新的表有什么不寻常的地方吗

对如何提高绩效有何建议

优化DML语句,使每个语句更新多行。例如,您可以使用联接/半联接来指定大量受影响的行。

我还注意到,在BigQuery中,更新和删除操作可能会非常慢

有趣的是,使用create或REPLACETABLE语句覆盖表通常具有更好的性能

因此,不是:

DELETE from babynames.names_2014_copy
where gender<>'U'
考虑只使用:

create or replace table babynames.names_2014_copy
AS
select *
from babynames.names_2014_copy
where not  gender<>'U'

类似的技术也适用于更新;您只需要编写一个case语句来修改您的值。

1。延迟不如吞吐量重要是什么意思?2.我试过几次,结果都是一样的。
create or replace table babynames.names_2014_copy
AS
select *
from babynames.names_2014_copy
where not  gender<>'U'