BigQueryIO读取与fromQuery

时间:2019-01-29 04:04:55

标签: google-bigquery google-cloud-dataflow dataflow

在Dataflow / Apache Beam程序中说,我正在尝试读取表,其中的数据呈指数增长。我想提高阅读效果。

BigQueryIO.Read.from("projectid:dataset.tablename")

BigQueryIO.Read.fromQuery("SELECT A, B FROM [projectid:dataset.tablename]")

如果我仅选择表中所需的列,而不是上面的整个表,则读取性能是否会提高?

我知道选择很少的列可以降低成本。但是想知道上面的读取性能。

1 个答案:

答案 0 :(得分:5)

您是对的,它将减少成本,而不是引用SQL /查询中的所有列。另外,当您使用from()代替fromQuery()时,BigQuery中无需为任何表扫描付费。我不确定您是否意识到这一点。

在后台,每当Dataflow从BigQuery读取数据时,它实际上都会调用其导出API,并指示BigQuery将表作为分片文件转储到GCS。然后,Dataflow将这些文件并行读取到管道中。它尚未直接从BigQuery准备就绪。

如此,是的,此可能可以提高性能,因为需要在后台将数据导出到GCS并读入管道的数据量将减少,即,列数减少=数据量减少。

但是,我也将考虑使用分区表,然后甚至考虑对其进行群集。另外,使用WHERE子句可以进一步减少要导出和读取的数据量。