我有一个用例,其中我必须通过在 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 的数据。
考虑到我们未来的数据增长,哪种方法更有效?