reata / sqllineage

SQL Lineage Analysis Tool powered by Python
MIT License
1.19k stars 215 forks source link

请教下当列级血缘和表级血缘在一张图中时是如何处理的? #586

Closed LiuWeidongK closed 3 months ago

LiuWeidongK commented 3 months ago

如果有些实体没有列级血缘,当存在一张大图中时,需要特殊处理这些没有列级血缘的实体,否则查询时会出现血缘断裂,这种特殊处理你这边时怎么做的呢

maoxingda commented 3 months ago
  1. 能举个例子么
  2. 再说一下你的预期或者建议
LiuWeidongK commented 3 months ago

非常感谢您的回复,我这边在建设大数据领域的字段血缘逻辑遇到些问题,看到你写的文章想了解下方案实现的细节

字段血缘的DAG,不能独立于表级血缘。 理想情况下,只维护一份统一的血缘图。至于实现,可以有两种:

  1. 把DAG做到字段粒度,通过一些转换, 可以计算出表级血缘的DAG。用关系型数据库的概念来做类比,就像先做一张明细表,在明细表的基础上聚合可以得到汇总表。
  2. 通过属性图的形式来建模, 可以参照JanusGraph的文档。表和字段分别是两种类型 的节点,同时另外还有两种类型的边, 其一是字段到表的所属关系,其二是字段与字段、表与表的血缘关系。

你这里的方案2能详细介绍下么,我举一个简单的例子 image

对于上图来说,Hive TB1 和 Hive TB2 之间的表血缘和字段血缘可以正常构建,但后续通过hive2kafka任务加工得到的kafka实体可能就没有字段级血缘,这种情况在分析一个字段的全部下游时可能就会断在这个没有字段血缘的实体上; 这边不太确定你这里的方案2是如何处理的,所以想请教一下。

maoxingda commented 3 months ago

你截图 hive2kafka & kafka2clickhouse 具体的处理是什么,是SQL么。如果是为什么会没有字段血缘?

LiuWeidongK commented 3 months ago

是一个配置化的数据同步任务,这里拿这两种任务类型举例,假设kafka实体不存在字段血缘

maoxingda commented 3 months ago

kafka实体的上,下游实体之间有没有字段血缘。

LiuWeidongK commented 3 months ago

有,kafka上游的hive有字段血缘,下游的clickhouse也有字段血缘,只有kafka没有

maoxingda commented 3 months ago

我说的是H2_C2, CK_C1之间有没有血缘

LiuWeidongK commented 3 months ago

这个是没有的

maoxingda commented 3 months ago

那我理解你的血缘就应该在kafka实体上游就停止了,这是符合预期的吧

maoxingda commented 3 months ago

字段血缘

koftcl commented 3 months ago

CK_C1 应该是 H2_C1 的子代, CK_C2 是 H2_C2 的子代

maoxingda commented 3 months ago

我理解在列级别血缘,你这个图没有你说的这个关系