【发布时间】:2018-03-26 20:47:47
【问题描述】:
$insertResponse = $bqTable->insertRows($insertRows);
if ($insertResponse->isSuccessful()) {
return true;
} else {
foreach ($insertResponse->failedRows() as $row) {
foreach ($row['errors'] as $error) {
Log::error('Streaming to BigQuery Error: ' . $error['reason'] . ' ' . $error['message']);
}
}
return false;
}
我使用了上面的代码(复制自php客户端示例代码)。
基本上,它的作用是。如果推流成功,我会返回true,如果推流失败,我会返回false。
我有 524845 行要插入。为了避免过大错误,对于每 1000 行,我调用了上面的流语句。然后对于最后的 845 行,我再次调用了流语句。
如果流式传输成功(返回 true),我将继续流式传输接下来的 1000 行。如果流式传输失败,那么我将停止完整的流式传输过程。
我发现 bigquery 流式传输不稳定。在我的测试中,大多数时候,我将所有 534845 行都流式传输到表中。但是有一次,我丢失了一些行。例如有一次我只有 522845 行流式传输。没有错误报告/记录。
由于我每次流 1000 行,我的两个流活动似乎失败了,我丢失了 2000 行。但是没有报错,如果报错,我的代码就会停止。
请告知我接下来应该怎么做才能调试此 BigQuery Streaming 问题。
【问题讨论】:
-
由于没有记录流式传输错误。我添加了代码来记录成功的流媒体活动。下次,如果我看到丢失数据的情况,我应该能够挖掘出成功的流式日志,看看是否有更多信息可以帮助我调试或发送给 Google Cloud 支持团队。