将记录插入到BigQuery流中vs.简单插入-使用table-> insertRow或table-> inserRows vs使用bigquery-> runquery

sea*_*ain 1 streaming google-bigquery

如果我使用table-> insertRow()或table-> inserRows()函数,则意味着我正在将数据流式传输到bigquery中。

https://googlecloudplatform.github.io/google-cloud-php/#/docs/google-cloud/v0.53.0/bigquery/table

但是,如果我使用bigquery-> runQuery()函数运行insert语句,则不会进行流式处理。

https://googlecloudplatform.github.io/google-cloud-php/#/docs/google-cloud/v0.53.0/bigquery/bigqueryclient?method=runQuery

在哪种情况下,我应该使用流式传输来插入数据?在什么情况下,我应该使用bigquery runQuery运行插入语句?

谢谢!

dse*_*sto 6

作为对@GrahamPolley在您的问题的评论中提供的答案的补充(并且为了使答案更易于社区使用),让我分享一些文档链接可能对您遇到的问题有用在这篇文章中。

流插入与DML插入

流插入使用该tabledata.insertAll方法一次在表中插入一条记录,并且不需要运行加载作业。在此文档页面中,您可以找到与流插入,其功能,限制和配额有关的所有信息。

正如您对问题的评论中所述,使用DML插入,您每天只能在每个表中执行1000次INSERT查询(并且相同的限制也适用于加载作业),而对于流插入,您每天没有限制,以及每秒最多只能请求的行数。

资料可用性

在表中第一次流式插入后不久(几秒钟之内)就可以使用流式传输到BigQuery的数据,即使它们在缓冲区中也是如此。但是,此数据可能无法用于其他操作(例如复制,导出或什至是某些API方法tabledata.list),因此,如果要执行任何这些操作,则首先必须检查缓冲区是否为空。您可以通过检查tables.get名为的部分中的响应来做到这一点streamingBuffer,如果缓冲区为空,则应为空。