[程序员] Doris 增量数据刷新方案

各位巨佬,真没招呀,在线拜求

目前我们引入了 Doris 实时数仓,版本 2.1 ,FE 8c 32g BE 16c 32g

数据处理流程是 数据进入到 Doris 后开始使用 Doris 的 insert into select 进行 dwd dwm dws ads 等层级的数据处理。

由于都是业务数据,不是纯新增数据,所以都是主键模型。

某个业务维护的相关表需要先根据 update_time 统计出关联的业务字段,写入到一张增量表中,最后由增量表作为驱动表。也就是在一个大的多表 JOIN sql 中,增量表作为 build 端,利用 RUNTIME FILTER 下推过滤大表数据从而实现表数据更新

现在问题就出现在这个增量驱动表上,增量表数据很少可能也就 3 万~5 万区间,5 分钟跑一次,每次全量刷新。

然后利用 ANALYZE TABLE 刷新增量表的统计新的,我没想到的是,增量表数据进去了以后,统计信息居然需要等 3 分钟在执行才能统计到条数,

这也就导致 Doris 优化器 CBO 在利用统计信息判断 join 的时,增量表如果统计信息是 0,或者健康度太低,就不会走 RF ,从而进行全表扫描,导致OOM !!

我尝试过使用 /*+ SET_VAR(disable_join_reorder=true) / 或/+ LEADING(a b c) */ 都不行,效率太差,内存使用更高,原本能成功的,用了这两个优化后失败率更高了。

现在是我每两个小时执行一次增量表统计信息收集,然后 DORIS 的 ETL 任务能抗两小时,两小时后就开始报错 OOM 了。

所以想请教下各位巨佬,Doris 不是各个大厂都在推么,难道没这种问题么?还是我使用方式错了,我人要麻了。。。