0

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

我有两种方法来实现这一点,我尝试了样本数据(来自 20 个表的总共 10-1200 万行)并得到了如下结果:

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

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

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

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

这里要考虑的重要一点是,随着时间的推移,要加入的 20 个源表将继续增长,并且可能在不久的将来我们将拥有 TB 的数据。

考虑到我们未来的数据增长,哪种方法更有效?

4

1 回答 1

2

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

于 2018-09-07T05:50:00.970 回答