基于ODS的实时数据分析

随着 ODS 表数据越来越多,需求越来越复杂,直接关联 ODS 表进行实时数据分析时效性变得越来越差。
本文将分享如何基于 Doris 的 ODS 层来做实时数据分析,其他数仓方法类似。

一、 ROLLUP 和 物化视图

对于 Doris 来说,我们可以使用 ROLLUP 和 物化视图对 ODS 表进行优化,以提高查询效率。

1.  Unique 模型

对于  Unique 模型,可以使用 ROLLUP 进行预聚合提高查询效率。但是要求 key 列必须和 Base 表主键字段一致,所以没有太大意义。

2. Aggregate 模型

对于  Aggregate  模型,可以使用 ROLLUP 进行预聚合提高查询效率。聚合方式与 Base 表保持一致,不可修改。

2. Duplicate 模型

  • 使用 ROLLUP

对于 Duplicate 模型, 可以使用 ROLLUP 调整前缀索引,提高查询效率。

  • 使用物化视图

对于 Duplicate 模型,可以使用物化视图进行预聚合提高查询效率。聚合方式可选比较多,比如 SUM、MAX、MIN

二、使用分层理论

直接使用 ODS 表进行关联,数据量大的时候查询会特别慢。

可以使用数仓分层理论,但是分层链路不能过多,否则达不到实时的目的。

1. ODS 层设计

ODS 层分为全量和增量接入,一般都为 Unique Key 模型。

  • 全量接入将保留数据所有的历史数据

  • 增量数据将保留最近N个月的数据,并且使用 binLog 中的 ts 作为分区字段

2. DWD 层设计

  • 一般的小数据量数据分析需求可以直接通过 ODS 层查询得出。

  • 当数据分析 sql 查询数据量比较大时,可以考虑准实时的办法,即在原有 ODS 层基础上建立小时级别的调度任务,生成 DWD 层。

查询时,只需要查询 DWD 层数据即可。

  • DWD 层一般为 ODS 表 join 形成的宽表,后续查询需求可以直接从 DWD 层出结果。

  • DWD 层也可以作为一个单表的轻度汇总层,简单的需求可以直接从 DWD 层出结果,复杂的需求可以再抽象出 DWS 层。

3. 增量 ODS 的使用

对于数据量比较大的查询需求,我们可以分为两个阶段完成:

  • 初始阶段:

    使用全量 ODS 表,手动将历史数据跑出来放到 DWD 表中。

  • 每日增量:

    建立1小时的调度任务,使用 binLog 时间作为过滤条件,定时从增量 ODS 表抽取宽表到 DWD 表中。

    为了解决时间漂移的问题,binLog 时间可以往后冗余15分钟。为了解决乱序的问题,binLog 时间可以往前冗余15分钟。

    对于订单状态这种时间跨度比较大的表,可以先和业务确认订单状态变更的最大天数,使用增量表和全量表数据进行合并,从而得出最终的订单状态。

    全量表根据实际的业务创建时间(分区字段)来过滤,并且限制天数来避免全表扫描。

4. DWS 层设计

如果 DWD 层数据量也特别大,我们可以:

  • 针对数据量大的 DWD 表做轻度汇总,并且以当天日期作为时间分区

  • 建立小时级别的 DWS 调度任务

  • 对于大部分实时或者准实时需求,ODS 层或者 DWD 层已经完全满足需求了,并且维护起来也比较方便。层数越多,对于后期的维护工作压力也比较大。

  • 分层设计还有一个目的就是通用性,减少重复工作,所以在分层设计时尽量考虑通用性,维护好数仓分层文档。便于后续其他需求或者其他人来使用。

5. 优化

对于建立的 Aggregate 表或者 Duplicate 表都可以根据实际情况建立不同的 ROLLUP 或者物化视图,以提高查询效率。

三、Q & A

1. 主从不同步或者网络故障导致数据不同步怎么办?

当主从同步或网络恢复后,需要手动进行补数操作。根据服务不可用的具体时间来确定需要补数的范围,一般这种问题不会超过一天就会及时发现,只需要手动处理一天的数据即可。

2. 接入任务出错怎么办?

一般接入任务出错会及时告警,需要先停止调度任务。待接入任务恢复后,手动处理一小时的任务即可。

3. 重复消费问题如何解决?

如果 DWD 层建立了 Aggregate 或者 Duplicate 模型的表,任务重启会导致 Aggregate 模型数据重复消费。

这时需要先停止调度任务,删除当天分区的数据,待接入任务恢复后进行补数操作,避免统计误差。

对于建立了物化视图的 Duplicate 模型的表,如果要删除数据,则需要先将物化视图删除,然后方可删除数据。



往期推荐



Supervisor 进程管理工具

Doris 负载均衡配置

kafka 数据快速接入 Apache Doris

Flink CDC数据接入Apache Doris实践

基于Flink和Doris构建的实时数仓方案实践

请使用浏览器的分享功能分享到微信等