BigQuery:插入行,但未写入

Posted

技术标签:

【中文标题】BigQuery:插入行,但未写入【英文标题】:BigQuery: insert rows, but it's not written 【发布时间】:2016-02-10 06:50:24 【问题描述】:

我正在使用来自 bigquery 对象的方法 tabledata().insertAll 更新行列表。执行后,返回显示没有错误。但是,我的表仍然没有写入数据。

可能是权限问题。如果是,为什么没有返回错误?

谢谢

【问题讨论】:

在您发送第一个流式传输请求后,您的数据可能需要几分钟才能显示在查询中。您是否尝试过等待几分钟再检查? 您可能没有正确阅读错误,我看到很多用户犯了这个错误。 如果您向我提供您的项目 ID 和表,我可以从我们的(BigQuery 的)端看一下。 有两种方式返回错误:要么是 api 调用失败,要么您可能会在成功的 api 请求中收到每行错误。请参阅insertErrorscloud.google.com/bigquery/docs/reference/v2/tabledata/…。你能澄清一下你所说的“没有返回错误”是什么意思吗? 【参考方案1】:

如果您在删除并重新创建表后立即执行插入操作,就会发生这种情况。 已删除表的流式缓冲区不会在该表被删除时立即删除,这可能会导致新的插入被传递到这个旧的流式缓冲区。

来自BigQuery documentation:

删除和/或重新创建表可能会在一段时间内创建流式插入有效地传递到旧表并且不会出现在新创建的表中。

在这种情况下,不会返回任何错误。


参考资料:

https://cloud.google.com/bigquery/troubleshooting-errors#metadata-errors-for-streaming-inserts https://github.com/GoogleCloudPlatform/google-cloud-php/issues/871#issuecomment-361339800 https://cloud.google.com/bigquery/streaming-data-into-bigquery

【讨论】:

有解决办法吗?流最终会结束并移动到正确的表吗? 据我记忆,是的。最终旧的流缓冲区被删除,然后从这一点进行的新插入将被传递到正确的表。编辑:我上面链接的 github 问题也提到了一些处理这个问题的方法,例如github.com/googleapis/google-cloud-php/issues/…

以上是关于BigQuery:插入行,但未写入的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Dataflow 写入 Bigquery 非常慢?

BigQuery:插入行,但不写

数据流:我可以使用批处理作业连续写/流写入BigQuery吗?

Go 库的 BigQuery 行插入失败

BigQuery 流式插入在 GKE 上失败

在 C# 中插入具有重复记录列的 BigQuery 行