google-bigquery - BigQueryIO 读取与 fromQuery
问题描述
在 Dataflow/Apache Beam 程序中说,我正在尝试读取数据呈指数增长的表。我想提高读取的性能。
BigQueryIO.Read.from("projectid:dataset.tablename")
或者
BigQueryIO.Read.fromQuery("SELECT A, B FROM [projectid:dataset.tablename]")
如果我只选择表中所需的列,而不是上面的整个表,我的读取性能会提高吗?
我知道选择少数列会降低成本。但是想知道上面的读取性能。
解决方案
没错,它会降低成本,而不是引用 SQL/查询中的所有列。此外,当您使用from()
而不是 时fromQuery()
,您无需为 BigQuery 中的任何表扫描付费。我不确定你是否意识到这一点。
在后台,每当 Dataflow 从 BigQuery 读取数据时,它实际上都会调用其导出 API 并指示 BigQuery 将表作为分片文件转储到 GCS。然后 Dataflow 将这些文件并行读取到您的管道中。它不会从 BigQuery 中“直接”准备好。
因此,是的,这可能会提高性能,因为需要在后台导出到 GCS 并读入管道的数据量会更少,即更少的列 = 更少的数据。
但是,我也会考虑使用分区表,然后甚至考虑对它们进行集群。此外,使用WHERE
子句甚至可以进一步减少要导出和读取的数据量。
推荐阅读
- python - 属性的 getter 方法是否返回浅拷贝
- vue.js - Vue.js 将所有输入转换为 v-model
- python - 绘制具有不同尺度的多个时间序列
- c - 如果我尝试从 Channel 调用字符串数据,则会出现错误
- visual-studio-2017 - VSIX XML Visual Studio 2017 片段无法识别
- python - 暂停并继续秒表
- reactjs - Reactjs 表单计算数据仅适用于输入
- c++ - 如何在 Q3DSurface 中为每个 QSurfaceDataRow 设置不同的颜色?
- apache - .htaccess 将媒体文件请求重定向到不同的域/服务器
- floating-point - 是否可以将此数字存储为具有这些限制的浮点数?