数据治理--数据血缘模型【lineage model】的概念及三个层级
数据血缘
数据血缘关系:数据血缘关系是指数据在产生、处理、流转到消亡过程中,数据之间形成的一种类似于人类社会血缘关系的关系。
数据血缘模型【lineage model】中的实体包括表、列、函数、RESULTSET、关系和其他实体。实体和关系的组合显示了从一个表/列到其他表/列的血缘
如以下SQL解析产生的数据血缘如下:
针对员工表创建一个视图,针对NYC城市的员工统计如下信息:
- 每个部门的员工数 与 总员工数的比值
- 每个部门的工资数 与 总工资数的比例
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
数据血缘涉及的实体、关系如下:
- table 表
- view 视图
- resultset 结果集
- relation 关系
- target element 源
- source element 目标
- process 处理过程(SQL statement)
- column 列、字段
- variable 变量:scalar、cursor、record
- procedure 存储过程:argument 参数
- path 路径
- error 错误
数据血缘的三个层级
完整的数据血缘模型
完整的数据血缘模型包括所有的详细信息,例如在SELECT语句中生成的RESULT SET、用于根据输入列计算新列值的FUNCTION CALL、用于将数据从一列转换到另一列的CASE EXPRESSION等等
这个完整的数据血缘模型是所有其他高级血缘模型的基础,这些高级血缘模型通过省略或聚合模型中的某些关系和实体而只包含该完整模型中的一些血缘
更高层次的模型不仅删除一些关系和实体,而且合并一些关系来创建新的关系。在高级模型中引入的最重要的实体是PROCESS,它是一个执行转换的SQL查询。**
高级模型使用SQL查询作为最小单元,告诉您数据是如何从一个表/列传输到另一个表/列的。
另一方面,完整的模型告诉您在SQL查询中数据是如何传输的。
完整的数据血缘模型不适合展示给用户:
- 包含数千个实体的图表和关系是混乱的,几乎不可能在一张图片中展示。
- 分析所有详细信息是费时费力的
实体类型
Table, view, column, process(SQL statement), resultset, function, variale, path.
PseudoRows column:表示结果集中的行数
关系类型
- fdd : 目标实体的数据来自源实体
- fdr : 源列的数据将影响选择列表中结果集的行号,或者影响aggreate函数的结果值。
示例如下:
SELECT a.empName “eName” FROM scott.emp a Where sal > 1000
sal -> fdr -> resultset.PseudoRows - join : 在连接条件中建立2个或更多列之间的链接
字段级别的血缘
该模型只包含三种实体:
- 源列
- 目标列
- SQL语句(模型中称之为PROCESS)
- 它们之间的关系。
表级别的血缘
该模型只包含三种实体:
- 源表
- 目标表
- SQL语句(模型中称之为PROCESS)
- 它们之间的关系
基于解析SQL的表间血缘关系工具
sqllineage
SQL Lineage Analysis Tool powered by Python,只提供表级别的血缘分析
源码地址:https://github.com/reata/sqllineage
安装:pip install sqllineage
使用:sqllineage -e “select * from tabA”
sqllineage -f demo.sql
在线工具sqlflow
https://sqlflow.gudusoft.com/#/
著名的sqlparser: http://www.sqlparser.com/index.php
访问地址(提供了解析SQL并展示血缘关系的小工具):https://sqlflow.gudusoft.com/#/
能提供字段及表级别的血缘分析
相关文章
- 数据全景洞察概念简介
- Scrapy框架的概念、作用和工作流程
- 图像的形态学梯度运算(基本梯度、外部梯度、内部梯度、X方向梯度、Y方向梯度)的概念、作用以及相关的OpenCV示例代码
- 2.1.5 线程概念和多线程模型
- 《Spark大数据分析:核心概念、技术及实践》一1.2 数据序列化
- 并发编程--ThreadLocal、InheritableThreadLocal概念及示例
- 【前端学习之HTML&CSS进阶篇】-- CSS第三篇 -- 基本布局概念
- c++指针概念回顾
- 抓包概念大比较:数据报、数据包、分组
- Playmaker Input篇教程之引入的核心概念
- 数据结构的相关概念
- linux字符设备概念
- 软件架构概念与思想-组成派、决策派
- 《计算机系统:核心概念及软硬件实现(原书第4版)》——2.8 问题
- 机器人冗余自由度优化过程中的零空间概念
- Linux sudo命令的概念与使用
- 思曼达应用智慧城市新概念 推进中国教育信息化
- webpack高级概念,webpack-dev-server解决单页面应用路由问题(手动搭建webpack,不是用脚手架,404找不到页面,一)(系列十五)
- 数据集成之主数据管理(一)基础概念篇
- sql server dba常用概念、操作分析char,varchar,nvarchar,varchar(max)
- 大数据概念只飘在半空不落地,怎么破解?
- 简单理解Hibernate三种状态的概念及互相转化
- 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
- 思科:6成物联网计划仍处于概念验证阶段