Google bigquery BigQueryIO读取vs fromQuery

Google bigquery BigQueryIO读取vs fromQuery,google-bigquery,google-cloud-dataflow,dataflow,Google Bigquery,Google Cloud Dataflow,Dataflow,比如在Dataflow/ApacheBeam程序中,我试图读取数据呈指数增长的表。我想提高读取的性能 BigQueryIO.Read.from("projectid:dataset.tablename") 或 如果我只选择表中所需的列,而不是上面的整个表,那么我的读取性能会提高吗 我知道选择几个列可以降低成本。但是我想知道上面的读取性能。您是对的,它将降低成本,而不是引用SQL/查询中的所有列。此外,当您使用from()而不是fromQuery()时,您不需要为BigQuery中的任何表扫描付

比如在Dataflow/ApacheBeam程序中,我试图读取数据呈指数增长的表。我想提高读取的性能

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

如果我只选择表中所需的列,而不是上面的整个表,那么我的读取性能会提高吗


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

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

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

因此,是的,这可能会提高性能,因为需要导出到引擎盖下的地面军事系统并读入管道的数据量会减少,即列数减少=数据量减少


但是,我也会考虑使用分区表,然后甚至考虑对它们进行聚类。另外,使用

WHERE
子句可以进一步减少要导出和读取的数据量。

这将降低成本,而不是引用SQL/查询中的所有列,这是正确的。此外,当您使用
from()
而不是
fromQuery()
时,您不需要为BigQuery中的任何表扫描付费。我不确定你是否意识到这一点

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

因此,是的,这可能会提高性能,因为需要导出到引擎盖下的地面军事系统并读入管道的数据量会减少,即列数减少=数据量减少


但是,我也会考虑使用分区表,然后甚至考虑对它们进行聚类。另外,使用

WHERE
子句可以进一步减少要导出和读取的数据量。

谢谢,是的,我知道,但实际上不知道fromQuery()也会转储到GCS。您是否可以确认fromQuery()是否也使用相同的导出API将所需的列数据导出到GCS,这是from()使用的导出API,在读取到管道中之前,它们都先转储到GCS。谢谢,是的,我知道这一点,但实际上不知道fromQuery()也转储到GCS。您是否可以确认fromQuery()是否也使用相同的导出API将所需的列数据导出到GCS,该API用于from(),它们在读入管道之前都先转储到GCS。
BigQueryIO.Read.fromQuery("SELECT A, B FROM [projectid:dataset.tablename]")