每个表每天BigQuery UPDATE / DELETE语句 - 96,但是我使用“insert ... select”,它仍然不起作用

时间:2018-03-29 00:04:14

标签: google-bigquery

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)

有任何建议吗?

1 个答案:

答案 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秒进行一次操作"