Google bigquery 使用联接从BigQuery读取批量数据
我有一个用例,在这个用例中,我必须通过在20个不同的BQ表上应用左连接,从BigQuery中读取选定的数据,对该数据应用转换,然后最终转储到最终的BQ表中 为了实现这一点,我考虑了两种方法,在样本数据上进行了尝试(20个表中总共有1000-1200万行),结果如下: 方法1-为整个流程编写一个与BQ兼容的查询,并通过ApacheBeam(使用BigQueryIO.readTableRows())触发该查询,最后将数据转储到目标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机器类型运行作业,
- 使用n1-standard-4机器类型运行作业,作业在6:24分钟内完成
- 使用n1-standard-4机器类型运行作业,作业在14:50分钟内完成
考虑到未来数据的增加,哪种方法更有效?有两个步骤。您是否尝试过为第一个表(处理20个表)创建一个视图,然后创建一个简单的查询(甚至从UI)来执行第二步并将其保存到最终的表中 有两个步骤。您是否尝试过为第一个表(处理20个表)创建一个视图,然后创建一个简单的查询(甚至从UI)来执行第二步并将其保存到最终的表中 我需要每15分钟执行一次任务。这个解决方案听起来不错,但我希望即使数据增加,性能也能保持一致。视图本质上是带别名的查询。因此,如果今天您这样做,视图将在技术上使您的查询更具可读性和可维护性。我理解您的观点,但我想问一下性能。那又如何?正如我所说,视图的工作性能与常规查询相同。它没有写在任何地方,但我有轶事证据表明视图实际上表现得更好,因为它们可能有某种缓存。好的。谢谢@fkraussI我需要每15分钟执行一次此作业。这个解决方案听起来不错,但我希望即使数据增加,性能也能保持一致。视图本质上是带别名的查询。因此,如果今天您这样做,视图将在技术上使您的查询更具可读性和可维护性。我理解您的观点,但我想问一下性能。那又如何?正如我所说,视图的工作性能与常规查询相同。它没有写在任何地方,但我有轶事证据表明视图实际上表现得更好,因为它们可能有某种缓存。好的。谢谢@fkrauss