马哈鱼血缘分析工具介绍 

SQLFlow通过分析SQL查询和存储过程来生成数据血缘关系。数据血缘关系模型中的实体包括表、列、函数、关系和其他实体。实体和数据流的组合显示了从一个表/列到另一个表/列的沿袭。

1、数据流单元

数据流单元包括源实体、目标实体以及它们之间的数据流类型。

SELECT p.FirstName from Person.Person AS p 

这是为上述SQL查询生成的数据流。

person.persion.FirstName -> direct -> RS-1.FirstName

1.1 源、目标实体

源实体和目标实体通常引用表、视图和其他关系,例如公共表表达式、查询执行期间生成的结果集。它也可能指HDFS系统中的文件等。

1.2 数据流类型

数据流有两种类型:直接数据流(direct )和间接数据流(indirect )。

1.2.1 直接数据流(direct )

直接数据流意味着目标实体的数据直接来自源实体。

在上图中,RS-1.FirstName。直接来自Person.FirstName。

箭头用于表示图表中的直接数据流:

1.2.2 间接数据流(indirect )

间接数据流意味着目标列的数据不是来自源列,而是源列/表的数据影响目标列的结果数据。

虚线箭头用于表示图表中的间接数据流:

间接数据流中的源列通常出现在以下子句中:

  • Where 子句
  • Group by 子句
  • Winddows function
  • Join condition
SELECT deptno, COUNT() num_emp, SUM(SAL) sal_sum
FROM scott.emp
GROUP BY deptno

COUNT()和SUM(SAL)的值受group by子句中deptno列的值影响。因此,间接数据流将如下创建:

scott.emp.deptno -> indirect -> COUNT()
scott.emp.deptno -> indirect -> SUM(SAL)

对于其他间接数据流,我们将在后面讨论。

1.2.3 Join操作符

Join在联接条件中的两个或多个列之间建立链接。严格地说,这种关系不是数据流类型。

 select b.teur from tbl a left join TT b on (a.key=b.key)

分析上述SQL后将创建连接关系。它表示tbl之间的连接关系,在tbl.key和TT.key之间。

2、数据流中的实体

在两个实体之间构建数据流时:源实体和目标实体。它们可以是列到列、表到列或表到表。

2.1 列对列

这是最常见的情况,数据流中的两个实体都是列。

2.2 表对列

当我们说一个表影响一列的值时,我们通常指的是一个表的行总数影响一列的值,通常,这个列是从COUNT()函数派生出来的。

SELECT COUNT() num_emp FROM scott.emp

表到列的数据流通过使用表RelationRows的 psedou列来表示,这将从scott构建一个间接数据流,关系行RS-1.num_emp。

scott.emp.RelationRows -> indirect -> COUNT() -> RS-1.num_emp

2.3 表对表

有时,两个表之间会有数据流。例如,在 alter table rename SQL 语句, 将创建一个表到表的数据流。实际上,表到表的数据流由使用 RelationRows表 pseudo 列.

alter table t2 rename to t3;

3、数据血缘

数据血缘关系由许多基本的数据流单元组成。

CREATE VIEW vsal 
AS
SELECT a.deptno                 "Department",
        a.num_emp / b.total_count "Employees",
        a.sal_sum / b.total_sal   "Salary"
FROM   (SELECT deptno,
                Count() num_emp,
                SUM(sal) sal_sum
        FROM   scott.emp
        WHERE city = 'NYC'
        GROUP BY deptno) a,
        (SELECT Count() total_count,
                SUM(sal) total_sal
        FROM   scott.emp
        WHERE city = 'NYC') b

数据血缘分析图:

输出也可以是XML或JSON格式。

4、参考

马哈鱼数据血缘分析器: https://sqlflow.gudusoft.com

马哈鱼数据血缘分析器中文网站: https://www.sqlflow.cn