SQLLineage.com(数据溯源 )

778 阅读2分钟

本人熟悉的数据溯源的方法分为2大类:

一:标注法

标记原始信息的一些信息,让标注的信息与数据一起参与数据生产的处理过程,这样在数据生产的整个生命周期内,标注信息都得以保留,通过标注信息便可以定位数据;标注的信息决定了数据追溯的精度和范围。标注一个极端做法是将原始数据的所有信息都作为标注参与数据的处理过程。

二:逆向查询

通过构造逆向函数,对数据系统中的数据进行逆向计算,逆向函数决定了逆向查询的计算难度。

这2种方式的设计和实现都需要考虑一个问题,数据传播的方式(使用SQL来描述)

1.线性传播 例如:如下SQL执行的结果和原始数据之前的数据传播方式就这种方式

select t1.col as id, concat(t1.col1, '#' , t1.col2) as name from DB.TAB t1

*对于标注法: 可以动态的为SQL增加一个标注字段,文中样例SQL通常使用 TAB的 主键或唯一索引最为标注信息。 select .... TAB.主键 as 标注字段 from TAB

*对于逆向查询法: 文中样例需要构建。concat的逆向函数,

结果 : 1#aaa => col1=1 col2=aaa

结果 : 1#aaaa#33 =? col1=1 col2=aaaa#3 col1=1#aaaa col2=33

部分的结果数据是无法做直接完成逆向运算的,但结合2种方法结合对对数据的查询也可以完成数据追溯。

2.聚合传播

例如:SQL执行结果num字段的计算需要聚合多条TAB表的数据 select id , count(*) as num from TAB group by id

*对于标注法: group by使用的字段可以作为标注的字段

3.行转列

例如:HiveSQL中的UDTF函数输出的结果

select t.id , view.code , view.name from TAB t lateral view explode(list_items) view as code,name

*对于标注法: 主键或唯一索引最为标注信息。

【待续】