Google Bigquery 插入流式传输

Posted

技术标签:

【中文标题】Google Bigquery 插入流式传输【英文标题】:Google Bigquery insert streaming 【发布时间】:2015-11-03 08:44:06 【问题描述】:

我正在浏览其官方网站上提供的 Google 的 Bigquery 文档。 我对谷歌的插入流配额政策有点困惑。 Here 网页上提到了以下几点。

1]Maximum row size: 1 MB 
2]HTTP request size limit: 10 MB
3]Maximum rows per second: 100,000 rows per second, per table. Exceeding this amount will cause quota_exceeded errors.
4]Maximum rows per request: 500
5]Maximum bytes per second: 100 MB per second, per table. Exceeding this amount will cause quota_exceeded errors.

我对第 3 点和第 4 点的理解感到困惑。 我们可以使用 new TableDataInsertAllRequest().setRows(rowList); 设置数据 rowList.size() 最多为 100,000。对于插入,我们可以使用 table().insertAll().execute()。

但我仍然对第 3 点和第 4 点感到困惑。 任何人都可以详细解释这一点吗? 提前致谢。

【问题讨论】:

大概每个请求最多可以插入 500 行,每秒最多可以进行 200 个请求。 @AndyTurner 谢谢 :) 【参考方案1】:

假设您使用大量并行工作器来发送流式插入,例如同时发送数千台服务器。

如果您对机器正在流式传输的所有这些行求和,则可能会导致每秒超过 100k 行。每台服务器单独流式传输最多 500 个,但一个大型集群一起可以每秒流式传输超过 100k。如果达到该上限,您可能需要联系支持人员以提高您的限制。

因此,您需要了解一个有效负载必须很小且适合 500 行。如果要流式传输更多,则需要并行进行流式传输。要实现这一点,最好有一个像 Beanstalkd 这样的消息队列系统,您可以使用 beanstalkd admin console 监视您的工作。

【讨论】:

我可以使用 tabledata().insertAll() 发送超过 500 行。即使我可以使用这种方法发送 1000 行。如果我弄错了,请纠正我。 也许它只是暂时的,但稍后端点实现可能会改变并严格限制为最大 500。

以上是关于Google Bigquery 插入流式传输的主要内容,如果未能解决你的问题,请参考以下文章

从其他 Google Cloud 服务流式传输数据时,是不是可以修复失败的 BigQuery 插入?

Google BigQuery - 将数据流式传输到 BigQuery

使用 GET 方法将数据流式传输到 Google BigQuery?

BigQuery 流式传输和分区:_PARTITIONTIME 何时真正评估?

BigQuery 插入作业而不是流式传输

直接流式传输到 BigQuery 与通过 Google Pub/Sub + Dataflow 流式传输的优缺点