Google bigquery 到BigQuery配额的数据流

Google bigquery 到BigQuery配额的数据流,google-bigquery,google-cloud-dataflow,Google Bigquery,Google Cloud Dataflow,我发现了几个相关的问题,但谷歌团队对这个问题没有明确的答案: 写入BigQuery的云数据流作业是否限制为每个表每秒100K行的BigQuery配额(即BQ流限制) 编辑: 主要动机是找到一种方法来预测各种输入大小的运行时 我已成功运行作业,这些作业显示通过数据流监视UI每秒处理的超过180K行。但是我不确定这是否在表中插入时受到限制,因为作业运行时比原始计算(500mm行/180k行/sec=45分钟,实际花费了将近2小时)慢了大约2倍。从您的消息中,听起来您是在批处理而不是流式执行管道

我发现了几个相关的问题,但谷歌团队对这个问题没有明确的答案:

写入BigQuery的云数据流作业是否限制为每个表每秒100K行的BigQuery配额(即BQ流限制)


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


我已成功运行作业,这些作业显示通过数据流监视UI每秒处理的超过180K行。但是我不确定这是否在表中插入时受到限制,因为作业运行时比原始计算(500mm行/180k行/sec=45分钟,实际花费了将近2小时)慢了大约2倍。

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

在批处理模式下,在谷歌云数据流服务上运行的作业不使用BigQuery的流式写入。相反,我们将所有要导入GCS上的文件的行写入,然后调用一个。请注意,这降低了成本(加载作业比流式写入便宜),而且总体效率更高(BigQuery执行大容量加载比执行每行导入更快)。折衷是,在整个作业成功完成之前,BigQuery中没有可用的结果

加载作业不受特定行数/秒的限制,而是受限制

在流模式下,数据流确实使用BigQuery的流写入。在这种情况下,每秒100000行的限制确实适用。如果超过该限制,数据流将获得一个
配额\u超出
错误,然后重试失败的插入。这种行为将有助于消除暂时超过BigQuery配额的短期峰值;如果您的管道在很长一段时间内超过配额,此失败重试策略最终将作为一种形式的背压,减慢管道速度

--


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

是-只是想确认我们正在批处理模式下运行作业,并且时间与手动脚本GCS+BQ加载作业一致。感谢您的详细解释-非常有用!