BigQueryIO.read().fromQuery性能缓慢

ris*_*097 5 google-bigquery google-cloud-dataflow apache-beam

我注意到的一件事是,BigQueryIO.read().fromQuery()的性能比Apache Beam中的BigQueryIO.read().from()的性能要慢得多.为什么会这样?有没有办法改善它?

dse*_*sto 9

正如其他Stack Overflow类似的问题所讨论的那样(他们实际上讨论了定价而不是速度),你认为这两个BigQueryIO阅读方法之间存在显着差异的原因是因为,在幕后,他们做了完全不同的操作:

  • BigQueryIO.read.from()直接从BigQuery读取整个表.此功能将整个表导出到Google Cloud Storage中的临时文件,稍后将从中读取该文件.这几乎不需要计算,因为它只执行导出作业,后来Dataflow从GCS(而不是从BigQuery)读取.
  • BigQueryIO.read.fromQuery()执行查询,然后读取查询执行后收到的结果.因此,该功能更耗时,因为它需要首先执行查询(这将导致相应的经济和计算成本).

因此,简而言之,这两个Apache Beam函数之间的主要区别在于,一个从BigQuery⟷GCS导出读取整个表,而另一个执行查询,然后读取其结果.它们的基本概念是完全不同的,所以作为对你是否有任何方法来改善性能的问题的答案,不,你可以通过遵循BigQuery最佳实践来为你的用例设计最佳查询. .