将 BigQuery 的聚合具体化转储到 SQL 服务器、Dataflow 与 Airflow

Posted

技术标签:

【中文标题】将 BigQuery 的聚合具体化转储到 SQL 服务器、Dataflow 与 Airflow【英文标题】:Dump materialize aggregation from BigQuery to SQL server, Dataflow vs Airflow 【发布时间】:2019-07-30 18:32:29 【问题描述】:

我使用 BigQuery 数据集作为数据湖来存储所有记录/事件级别的数据,并使用 SQL 服务器来存储定期更新的汇总报告。因为报表会被客户端通过网页界面频繁访问,而且每个报表都聚合了大量的数据,所以存储 BigQuery 是不行的。

这样做的最佳做法是什么?在内部,我们有两个想法:

    每隔 X 小时运行一次 Dataflow 批处理作业,以重新计算聚合并更新 SQL 服务器。它需要一个调度器来触发作业,并且可以使用同一个作业来回填所有数据。

    运行执行相同操作的 Airflow 作业。回填需要单独的作业(但仍可以与常规作业共享大部分代码)

我知道 Dataflow 在并行处理数据块方面做得很好,但我想知道 Airflow 的性能,以及耗尽连接限制的风险

【问题讨论】:

据我了解,并考虑到您的用例,您将 Bi​​gquery 与 Dataflow 作业连接以更新 Cloud SQL 数据的想法似乎是可行的方法。你的问题本身是什么?。 @Mayeru 更新了问题。 【参考方案1】:

请从之前的类似问题中查看answer

总结:使用 Airflow 将带来一种更有效的方式来管理工作流中的所有过程。 Google 提供的基于 Airflow 的解决方案是Cloud Composer。

【讨论】:

附加问题:气流是否适合加载大量数据并每行执行一些简单的过程?我已经看到很多关于使用 BigQuery 或 csv 作为暂存位置以避免将数据直接加载到 Airflow 的讨论,但对于用例,我希望尽可能避免创建暂存资源 Airflow 可帮助您并行处理不同的任务以处理/传输数据。但是您仍然需要 BigQuery 来存储数据。

以上是关于将 BigQuery 的聚合具体化转储到 SQL 服务器、Dataflow 与 Airflow的主要内容,如果未能解决你的问题,请参考以下文章

从 Google BigQuery 导出到 CloudSQL?

`TFRecord` 从 Google BigQuery 转储到 Google Cloud Storage

Bigquery/标准 SQL:如何使用 sum() 聚合所有列(大约 100 列)?

google bigquery SQL group by 聚合函数

多日期数据加载到 BigQuery 分区表中

如何在 bigquery 中转储具有未知内容的 json?