【问题标题】:BigQuery Stream Lost the stream data but there are no error reportedBigQuery Stream 丢失了流数据但没有报错
【发布时间】: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 支持团队。

标签: google-bigquery streaming


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多