使用联接从BigQuery读取批量数据

时间:2018-09-06 15:24:29

标签: google-bigquery google-cloud-dataflow apache-beam apache-beam-io

我有一个用例,其中我必须通过对20个不同的BQ表应用左联接来从BigQuery中读取选定的数据,对这些数据应用转换,然后最终转储到最终的BQ表中。

我有两种实现此目标的方法,我尝试了这些示例数据(来自20个表的总计10-12百万行),结果如下:

方法1-为整个过程编写一个与BQ兼容的查询,并通过Apache Beam(使用BigQueryIO.readTableRows())触发该查询,最后将数据转储到目标BigQuery表中。

  • 使用n1-standard-4机器类型运行该作业,并在6:24分钟内完成该作业。

方法2-在Apache Beam中编写整个过程,并避免在BQ中耗尽大量插槽。

  • 使用n1-standard-4机器类型运行该作业,并在14:50分钟内完成该作业。

这里要考虑的重要事情是,随着时间的流逝,要连接的20个源表将继续增长,并且在不久的将来可能会有TB的数据。

考虑到我们将来将会增加的数据量,哪种方法更有效?

1 个答案:

答案 0 :(得分:2)

有两个步骤。您是否尝试过为第一个视图创建视图(处理20个表),然后为一个简单查询(甚至从UI)创建视图以执行第二步并将其保存到最终表中?