我们有一个包含72行的流式插入,但错误消息为空,reason
为timeout
,但仅限前3行。
Error on line 0, reason: timeout, msg:
Error on line 1, reason: timeout, msg:
Error on line 2, reason: timeout, msg:
这怎么可能,我们是否只重播这3行或其余的行?
我们在付费的谷歌企业支持上有案例05044644。
代码段是:
$resp = new Google_Service_Bigquery_TableDataInsertAllResponse();
$resp = $bq->tabledata->insertAll($project_id, $dataset_id, static::tableId(), $request);
$errors = new Google_Service_Bigquery_TableDataInsertAllResponseInsertErrors();
$errors = @$resp->getInsertErrors();
if (!empty($errors)) {
$error_msg = '';
if (is_array($errors)) {
$line = 0;
foreach ($errors as $eP) {
$arr = $eP->getErrors();
if (is_array($arr)) {
foreach ($arr as $e) {
switch ($e->getReason()) {
case "stopped":
break;
default:
$error_msg.= sprintf("Error on line %s, reason: %s, msg: %s\r\n", $line, $e->getReason(), $e->getMessage());
break;
}
}
} else {
$this->setErrorMessage($arr);
}
$line++;
}
$this->setErrorMessage($error_msg);
} else {
$this->setErrorMessage($errors);
}
//print_r($errors);
//exit;
return false;
}
答案 0 :(得分:3)
借用Bigquery stream: 'Failed to insert XX rows due to timeout'的回复:
BigQuery可以部分提交行。如果存在无效行(结构不匹配),我们将完全拒绝该请求,但单个行可能无法缓冲。
在这种情况下,只有指示的行无法提交。如果您有插入ID,则只需重试失败的行,或者根据需要重试完整的请求(尽管每个重试的行都将计入您的表配额)。
自8月以来这些行级错误的增加是由于我们处理批量插入的方式发生了变化。以前,整个请求都会遇到超时。