You need to enable JavaScript to run this app.
导航
血缘图谱说明
最近更新时间:2022.08.02 11:35:35首次发布时间:2022.08.02 11:35:35

血缘图谱更新规则

  • 数据地图中的血缘都来源于对数据开发任务的代码解析。

  • 全量定时任务会触发解析动作。

  • 全量定时任务执行规则:
    小时级运行,拉取全量的任务,计算血缘,与数据地图中已有的血缘做对比,并将不一致处写入数据地图。

会造成“血缘消失”的情况

数据地图中,血缘的数据结构是 表->任务->表。其中,表和任务是两种实体,二者之间存在生产关系。
假设有以下开发任务链路,且1号加工任务是小时级调度执行。

alt

如果1号加工任务中使用了“drop table + create table”的组合,则每次1号加工任务运行时,中间表都会重建一次,进而导致任务执行过程中血缘关系消失。具体情况如下:

  1. 当1号加工任务执行到 drop table 语句时,会清理掉中间表以及其与1号、2号加工任务的关联关系,从而清空血缘关系。

  2. 当1号加工任务执行 create table 语句时,又会重建中间表。但是,由于1号加工任务和2号加工任务都没有发生变化,数据地图不感知,无法重建中间表与两个任务的关联关系,因此血缘关系依然缺失。

  3. 当全量血缘解析任务运行时,会拉取1号加工任务,解析血缘,并与数据地图中现有血缘数据对比,将1号加工任务与表的关系重新创建出来,此时血缘关系才会重新出现中间表。

如何避免出现“血缘消失”的情况?

  • 方案一

    使用“create table if not exist + truncate + insert into”的组合,确保表建出来后,做数据清理,这样可以保持血缘以及其他各种关系不变。

  • 方案二

    使用“create table if not exist + insert overwrite”的组合,确保表建出来后,使用 overwrite 来做复写。

  • 方案三

    使用“分区表 + TTL(Time to Live,生存时间)”的方式,即每天往新的分区里写入,并通过 TTL 将分区数量保持在一定范围内。