到 BigQuery 配额的数据流

Dataflow to BigQuery quota

我发现了几个相关的问题,但 Google 团队没有针对这个特定问题给出明确的答案:

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

google dataflow write to bigquery table performance


编辑: 主要动机是找到一种方法来预测各种输入大小的 运行 次。

我已经设法 运行 作业显示 > 180K rows/sec 通过数据流监控 UI 处理。但我不确定这是否在插入 table 时以某种方式受到限制,因为作业 运行time 比天真的计算慢了大约 2 倍(500 毫米行/180k rows/sec = 45分钟,实际用了将近2小时)

从您的消息来看,您似乎正在以批处理方式而非流式处理方式执行管道。

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

加载作业不受一定数量的限制 rows/second,而是受限于 daily quotas

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

--

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