BigQueryIO.read()。fromQuery性能缓慢

问题描述 投票:5回答:1

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

google-bigquery google-cloud-dataflow apache-beam
1个回答
9
投票

正如this other Stack Overflow similar question(他们实际讨论定价而不是速度)所讨论的那样,你认为这两个BigQueryIO Reading methods之间显着差异的原因是因为,在引擎盖下,他们做了完全不同的操作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.