数据流到BigQuery配额

时间:2015-11-19 15:46:50

标签: google-bigquery google-cloud-dataflow

我发现了一些相关的问题,但是对于这个特殊的问题,谷歌团队没有明确的答案:

写入BigQuery的Cloud DataFlow作业是否限制为每桌每秒100K行的BigQuery配额(即BQ流限制)?

google dataflow write to bigquery table performance

Cloud DataFlow performance - are our times to be expected?

修改 主要动机是找到一种方法来预测各种输入大小的运行时间。

我设法运行显示&gt;的作业通过Dataflow监控UI处理180K行/秒。但我不确定这是否会以某种方式限制插入到表中,因为作业运行时间比原始计算慢了约2倍(500毫米行/ 180k行/秒= 45分钟,实际上花费了近2小时)< / p>

1 个答案:

答案 0 :(得分:6)

从您的消息中,听起来您正在以批处理方式执行管道,而不是流式处理模式。

在批处理模式下,在Google Cloud Dataflow服务上运行的作业不使用BigQuery的流式写入。相反,我们将要导入的所有行写入GCS上的文件,然后调用BigQuery load" job。请注意,这可以降低您的成本(加载作业比流写入更便宜)并且整体效率更高(BigQuery可以比执行每行导入更快地执行批量加载)。权衡的是,在整个作业成功完成之前,BigQuery中没有可用的结果。

加载作业不受一定行数/秒的限制,而是受daily quotas的限制。

在Streaming模式下,Dataflow确实使用了BigQuery的流式写入。在这种情况下,每秒100,000行的限制确实适用。如果超过该限制,Dataflow将出现quota_exceeded错误,然后重试失败的插入。这种行为有助于消除暂时超过BigQuery配额的短期峰值;如果你的管道长时间超过配额,这种失败重试策略最终会成为一种背压,会减慢你的管道。

-

至于为什么你的工作耗时2小时而不是45分钟,你的工作将有多个阶段连续进行,因此使用最快阶段的吞吐量并不是估算端到端运行时的准确方法。例如,在Dataflow完成将所有行写入GCS之后才会启动BigQuery加载作业。您的费率似乎合理,但如果您怀疑性能下降,请跟进。