Data Manipulation Language statements
The following limits apply to Data Manipulation Language (DML) statements.
Maximum UPDATE/DELETE statements per day per table — 96
Maximum INSERT statements per day per table — 1,000
因此更新和删除具有非常小的限制,并且Insert具有相对较高的限制。所以我试图使用“INSERT ... SELECT ...”语句而不是UPDATE。
简单来说,我想要更新TABLE1中的任何记录,我选择它们并将它们插入到另一个表TABLE2中。另外,我需要确保这些记录不在TABLE2中。
INSERT TABLE2 (...)
SELECT ....
FROM TABLE1
WHERE (RECORDS NOT IN TABLE2 YET)
这似乎是一个好主意。但遗憾的是我发现了上面的陈述,即使我没有使用UPDATE和DELETE。
我只能执行上述声明48次。
我不知道这48次限制来自哪里。
似乎BigQuery认为以下语句计算了2更新/删除。
INSERT TABLE2 (...)
SELECT ....
FROM TABLE1
WHERE (RECORDS NOT IN TABLE2 YET)
有任何建议吗?
答案 0 :(得分:1)
foreach ($ranks as rank) {
$query = "INSERT `{$dailyReport}`
(id, userId, artistId, release_id, track_id)
SELECT id, userId, artistId, release_id, track_id
FROM `{$processedDailyReport}`
WHERE
rank = @rank
AND selected = 1
AND id NOT IN (
SELECT
id
FROM
`{$dailyReport}`)
";
$job = $this->bigQuery->runQuery($query, ['parameters' => ['useLegacySql' => false, 'rank' => $rank]]);
$response = $this->isCloudJobSuccessful($job, 'Select report successfully ');
if ($response['status'] === true) {
sleep(3); //every 2 second one call limit
} else {
$error = $response['message'];
$error .= $job->id(). " " .$job->info();
return $this->returnResponse(null, 400, $error);
}
}
我做了改动。我在向同一个表发出下一个insert语句之前睡了3秒。
这似乎解决了这个问题。
因此我之前遇到的更新限制配额是"表元数据更新操作的最大速率 - 每个表每2秒执行1次操作"而不是每张桌子每天的最大INSERT语句 - 1,000"
表元数据更新操作的最大速率 - 每个表每2秒执行1次操作 表元数据更新限制包括使用BigQuery Web UI,bq命令行工具或通过调用tables.insert,tables.patch或tables.update API方法执行的所有元数据更新操作。此限制也适用于作业输出。
我的猜测,当我运行旧语句(没有睡眠)。它只是让bigquery变得温暖,稍后运行几次,BigQuery的执行速度更快,并且每桌每2秒就达到限制" 1操作"。
Google Cloud支持小组确认:
" location":" table.write"在工作错误中,每桌每2秒进行一次操作"限制。
我收到的错误消息是
{
"error": {
"errors": [
{
"domain": "global",
"reason": "rateLimitExceeded",
"message": "Exceeded rate limits: Your table exceeded quota for table
update operations. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors",
"locationType": "other",
"location": "table.write"
}
],
"code": 403,
"message": "Exceeded rate limits: Your table exceeded quota for table update operations. For more information,
see https://cloud.google.com/bigquery/troubleshooting-errors"
}
}
是的。我点击的限制是每桌每2秒进行一次操作"