BigQuery Stream丢失流数据,但没有报告错误

时间:2018-03-26 20:47:47

标签: google-bigquery streaming

$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行,我调用了上面的stream语句。然后在最后845行中,我再次调用了流语句。

如果流式传输成功(返回true),我将继续流式传输下一行1000行。如果流式传输失败,那么我将停止完整的流式传输过程。

我发现bigquery流媒体并不稳定。在我的测试中,大多数时候,我将所有534845行流入表中。但有一段时间,我失去了一些行。比如有一次我只有522845行流。没有报告/记录错误。

由于我每次流1000行,似乎我的两个流活动失败,我丢失了2000行。但是没有错误报告,如果它报告错误,我的代码也会停止。

请告知我接下来应该怎么做才能调试此BigQuery Streaming问题。

1 个答案:

答案 0 :(得分:1)

插入行时是否提供了insertId?如果是这样,insertIds是否可能重复?它可能导致BigQuery丢弃它认为可能是重复行的内容。