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

Google bigquery 使用联接从BigQuery读取批量数据,google-bigquery,google-cloud-dataflow,apache-beam,apache-beam-io,Google Bigquery,Google Cloud Dataflow,Apache Beam,Apache Beam Io,我有一个用例,在这个用例中,我必须通过在20个不同的BQ表上应用左连接,从BigQuery中读取选定的数据,对该数据应用转换,然后最终转储到最终的BQ表中 为了实现这一点,我考虑了两种方法,在样本数据上进行了尝试(20个表中总共有1000-1200万行),结果如下: 方法1-为整个流程编写一个与BQ兼容的查询,并通过ApacheBeam(使用BigQueryIO.readTableRows())触发该查询,最后将数据转储到目标BigQuery表 使用n1-standard-4机器类型运行作业,

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

为了实现这一点,我考虑了两种方法,在样本数据上进行了尝试(20个表中总共有1000-1200万行),结果如下:

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

  • 使用n1-standard-4机器类型运行作业,作业在6:24分钟内完成
方法2-在Apache Beam中编写整个过程,避免占用BQ中的大量插槽

  • 使用n1-standard-4机器类型运行作业,作业在14:50分钟内完成
<> P>重要的是要考虑的是,20个源表将随着时间的推移而不断增长,并且在不久的将来我们可能会有TBS的数据。
考虑到未来数据的增加,哪种方法更有效?

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

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

我需要每15分钟执行一次任务。这个解决方案听起来不错,但我希望即使数据增加,性能也能保持一致。视图本质上是带别名的查询。因此,如果今天您这样做,视图将在技术上使您的查询更具可读性和可维护性。我理解您的观点,但我想问一下性能。那又如何?正如我所说,视图的工作性能与常规查询相同。它没有写在任何地方,但我有轶事证据表明视图实际上表现得更好,因为它们可能有某种缓存。好的。谢谢@fkraussI我需要每15分钟执行一次此作业。这个解决方案听起来不错,但我希望即使数据增加,性能也能保持一致。视图本质上是带别名的查询。因此,如果今天您这样做,视图将在技术上使您的查询更具可读性和可维护性。我理解您的观点,但我想问一下性能。那又如何?正如我所说,视图的工作性能与常规查询相同。它没有写在任何地方,但我有轶事证据表明视图实际上表现得更好,因为它们可能有某种缓存。好的。谢谢@fkrauss