2017-05-25 176 views
0

当数据应该聚集在ETL工作者的内存中(例如pandas groupby或pd.pivot_table)与在数据库级别执行groupby查询时,是否有普遍的偏好或最佳实践?作为ETL的一部分还是数据库内的聚合?

在可视化层,我连接到最近30天的详细交互级别数据,然后是最近几年的汇总数据(日常级别)。

我想如果我计划实现聚集表,最好在ETL阶段执行它,因为这可以远程完成,不会浪费数据库服务器的资源。那是对的吗?

回答

1

如果您担心的是尽可能减少源数据库服务器上的负载,最好将表从源数据库中提取到临时区域,并在那里进行连接和聚合。但请注意,ETL工具而不是在源数据库表上执行嵌套循环连接,即引入其中一个表,然后针对另一个表运行数千个查询以查找匹配的行。

如果您的目标是尽可能快速和高效地执行联接和聚合,则通过所有方法将它们推送到源数据库。尽管如此,这可能会增加源数据库的负担。我说“可能”,因为如果你所需要的只是一个表上的聚集,那么在源数据库中执行这个操作比拖动整个表要便宜。

0

如果您按天汇总,如果您的老板希望按小时或星期汇总,该怎么办?

一般规则是:您的事实表粒度应尽可能细化。然后你可以钻取。

您也可以创建预先汇总的表格,例如按小时,星期,星期,月份等。空间现在很便宜。

Pentaho Aggregation Designer这样的工具可以为您自动执行此操作。

+0

哦,当然,我将粒度数据保存为单独的表格。我的同事喜欢创建物化视图。但是,如果我们要处理数年的数据,那么与ETL阶段每天“增量”聚合相比,这需要相当长的一段时间。 – trench