数据治理中的一个重要基础工作是分析组织中数据的血缘关系。有了完整的数据血缘关系,我们可以用它进行数据溯源、表和字段变更的影响分析、数据合规性的证明、数据质量的检查等。

分析数据血缘的方法主要分为四类

  • 自动解析
  • 系统跟踪
  • 机器学习
  • 人工收集

自动解析主要是利用工具解析 SQL 语句、存储过程和 ETL等文件。
本文以 Oracle 为例,来说明如何分析 SQL 和存储过程中的数据血缘。

产生数据血缘的 SQL 语句

  • SELECT
  • INSERT
  • UPDATE
  • MERGE
  • CREATE VIEW
  • CREATE TABLE
  • 存储过程

SELECT

可能你会感到奇怪, SELECT 语句没有对数据进行增、改操作,如何会产生数据血缘?
秘密就在于 SELECT 语句中的 select list 部分,在这里,可以对数据进行转换。
以下面这个 SELECT 语句为例:

select  sal + commission as totalSal
from emp;

我们可以看到,totalSal 字段的数据来自 emp.sal 和 emp.commission,在这里,数据进行了一次转换。
这种在 SELECT 内部产生的数据血缘是临时性的,但是这个 SELECT 语句和 CREATE VIEW 或者 CREATE TABLE
一结合,这个数据血缘就真正落地形成了。例如:

create view v_sal(mySal)
as
select  sal + commission as totalSal
from emp;

这个 CREATE VIEW 语句通过 SELECT 形成了 从 emp.sal 和 emp.commission 到 v_sal.mySal 的数据血缘。

因此我们可以知道,分析好 SELECT 语句是对 SQL 语句进行数据血缘分析的基础。总体来说,通过分析 SQL 语句来获得数据血缘是比较直观和简单的,但问题的关键是人工分析的效率太低,对于企业内众多的 SQL 来说,人工分析基本是不可能的。

存储过程

存储过程可以包含比较复杂的逻辑处理,例如条件判断、循环分支等。因此常用来完成数据抽取、转换、加载、清洗等任务。
这其中,就产生了大量的数据血缘关系。为了更好的对企业内数据进行治理,整理存储过程中的数据血缘工作是必不可少的。

分析存储过程中的数据血缘,游标 cursor 是一个关键因素,数据流一般都是围绕着游标进行处理。

在下面这个 Oracle PL/SQL 的存储过程中,首先定义了游标 CURSOR cur_stclerk。

DECLARECURSOR cur_stclerk ISSELECT employee_id,department_id,first_name,last_nameFROM employeesWHERE job_id = 'ST_CLERK';

然后通过这个游标,用 LOOP 进行循环, 把数据从 employees 表中插入到表 emp_temp 和 emp_detls_temp。

INSERT INTO emp_temp
(employee_id,
department_id,
job_id)
VALUES (z_empid,
z_depid,
'ST_CLERK');INSERT INTO emp_detls_temp
(employee_id,
empname)
VALUES (z_empid,
z_firstname
|| ' '
|| z_lastname);
END LOOP;CLOSE cur_stclerk;
COMMIT;
END;

因此我们可以建立从 employees 表到表 emp_temp 和 emp_detls_temp 的数据血缘。

完整的 PLSQL 存储过程。

DECLAREz_empid employees.employee_id%TYPE;z_depid employees.department_id%TYPE;z_firstname employees.first_name%TYPE;z_lastname employees.last_name%TYPE;CURSOR cur_stclerk ISSELECT employee_id,department_id,first_name,last_nameFROM employeesWHERE job_id = 'ST_CLERK';
BEGIN
OPEN cur_stclerk;
LOOPFETCH cur_stclerk INTO z_empid,z_depid,z_firstname,z_lastname;EXIT WHEN cur_stclerk%NOTFOUND;INSERT INTO emp_temp(employee_id,department_id,job_id)VALUES (z_empid,z_depid,'ST_CLERK');INSERT INTO emp_detls_temp(employee_id,empname)VALUES (z_empid,z_firstname|| ' '|| z_lastname);
END LOOP;CLOSE cur_stclerk;
COMMIT;
END;

自动化数据血缘分析工具

SQLFlow 支持分析多达 20 多种主流数据库的 SQL 语句。支持的数据库有 bigquery, couchbase, dax, db2, greenplum, hana, hive, impala, informix, mdx, mysql, netezza, odbc, openedge, oracle, postgresql, redshift, snowflake, sparksql, sqlserver, sybase, teradata, vertica。

支持分析存储过程和动态 SQL 语句。

通过 UI 分析 SQL 语句

通过 SQLFlow 的 UI 可以快速的获取一个 SQL 的数据血缘情况,并可以得到可视化的结果,帮助用户迅速了解一个 SQL 中的数据血缘。

通过 API 方式分析 SQL 的数据血缘

有时,我们需要把分析所得的数据血缘作为元数据存储到我们自己的数据治理平台中,和其它元数据进行整合,这时,我们可以利用 SQLFlow 提供的Restful API,利用 shell, python 等脚本对数据血缘分析工作进行自动化。

这里用 curl 展示如何用 API 访问 SQLFlow 进行数据血缘分析。

  • 准备好用 API 连接 SQLFlow 需要的 userid 和 secret code
  • 利用 userid 和 secret code 来获取 token。注意,用你自己的 userid 和 secret code 来替换掉命令中的对应部分。
curl -X POST "https://api.gudusoft.com/gspLive_backend/user/generateToken" -H  "Request-Origion:testClientDemo" -H  "accept:application/json;charset=utf-8" -H  "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -d "secretKey=YOUR SECRET KEY" -d "userId=YOUR USER ID HERE"
  • 把需要分析的 SQL 语句递交给 SQLFlow 进行分析,并返回处理结果。注意,用你自己的 userid 和上面命令中返回的 token 来替换掉命令中的对应部分。
curl -X POST "https://api.gudusoft.com/gspLive_backend/sqlflow/generation/sqlflow?showRelationType=fdd" -H  "Request-Origion:testClientDemo" -H  "accept:application/json;charset=utf-8" -H  "Content-Type:multipart/form-data" -F "sqlfile=" -F "dbvendor=dbvoracle" -F "ignoreRecordSet=true" -F "simpleOutput=false" -F "sqltext=create view v_sal(mySal) as select  sal + commission as totalSal from emp;" -F "userId=YOUR USER ID HERE"  -F "token=YOUR TOKEN HERE"
  • 返回的 json 包含了如下数据血缘关系。
"relations": [{"id": "3","type": "fdd","effectType": "create_view","target": {"id": "11","column": "mySal","parentId": "9","parentName": "v_sal",},"sources": [{"id": "3","column": "sal","parentId": "2","parentName": "emp",},{"id": "4","column": "commission","parentId": "2","parentName": "emp",}],"processId": "10"}
]

更详细的信息见官网 SQLFlow Restful API。

小结

本文介绍了如何通过分析 Oracle 的 SQL 语句和存储过程来获取组织中的数据血缘,从而更好的进行数据治理。
并介绍了如何利用 SQLFlow 工具把分析 SQL 语句中的数据血缘工作自动化,提高数据自理效率和水平。

感兴趣的联系:Zy2133223

数据治理中Oracle SQL和存储过程的数据血缘分析相关推荐

  1. oracle突然查询变慢,[转] Oracle sql 查询突然变慢 -- 案例分析

    一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决 步骤思路: 1:查看sql是否走索引 2:查看索引是否失效 3:hint 强制走索引(只是用来查看hint状态下,查询是否更 ...

  2. sql azure 语法_Azure SQL数据同步–在Azure SQL数据库之间复制数据和架构更改

    sql azure 语法 In this article, we will review how to configure the sync group to replicate data betwe ...

  3. 数据治理中哪3点最重要

    数据治理能够带来的好处就在于,更高效地帮助企业将数据价值转化成实际的业务价值.数据"井喷"仍在进行,机器学习.AI等这类十分依赖数据质量的技术持续火热,全球数字化转型浪潮也在全面推 ...

  4. oracle修改数据前备份,Oracle 之利用BBED修改数据块SCN—-没有备份数据文件的数据恢复...

    测试环境 OS:redhat6.6 oracle:12.1.0.2 BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle ...

  5. Oracle数据二进制传输,Oracle数据库插入二进制字段数据

    oracle数据库喜欢搞特殊,二进制字段数据不能直接插入,需先再该字段插入oracle函数返回的的初始数据,然后在查询更新该字段.下面以Blob字段类型为例: 1.插入初始数据 Class.forNa ...

  6. 如何使用数据质量服务和SQL Server集成服务清除数据

    介绍 (Introduction) A year or so ago, I worked for an online web grocery software house located in the ...

  7. 对于一万条数据量使用Oracle游标,存储过程,一般查询的速度的对比

    一,创建ID自增长表格 1,创建序列 create sequence my_em_seq --序列名minvalue 1--最小值maxvalue 99999999999999999999999999 ...

  8. 将 SQL Server 存储过程用于数据访问

    在 .NET Framework 提供的所有数据访问方法中,基于 SQL Server 的数据访问是生成高性能.可缩放 Web 应用程序的推荐选择.使用托管 SQL Server 提供程序时,可通过使 ...

  9. oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)

    1.准备表数据 select * from emp10;create sequence seq_eseq increment by 1 start with 1001 maxvalue 9999999 ...

最新文章

  1. 【iOS】通过NSURLProtocol提高Web加载速度
  2. yum工具对软件包安装,删除,更新介绍
  3. WordPress自动升级插件时需要填写FTP信息的解决
  4. 红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建
  5. 技术人如何自我提升?阿里技术带来丰富学习资源
  6. DXperience 8.2.4 简繁体汉化,本地化,Skins包含webform,winform
  7. java 并发 同步信号_Java并发教程–信号量
  8. [html] 对于rtl网站的适配有哪些方案?
  9. 漫步最优化二十三——一维优化
  10. 高德地图+Serverless 护航你的假日出行
  11. Java se 基础
  12. 《Word 排版艺术》一书的人到此交流
  13. php解析酷狗音乐,PHP_将酷狗krc歌词解析并转换为lrc歌词php源码,最近在进行一次对酷狗音乐歌 - phpStudy...
  14. 《算法导论》 第28章 矩阵运算
  15. DNS解析与CDN加速
  16. leetcode系列-链表
  17. k线顶分型 python_顶底分型K线
  18. 关闭系统还原清理垃圾文件
  19. luoguP2324 [SCOI2005]骑士精神 IDA*
  20. jersey的使用总结

热门文章

  1. 一命二运三风水,四积功德五读书,六择业七择偶,八交贵人,九养生
  2. MongoDB删除字段
  3. 高级Linux系统 常用命令与知识点
  4. SQL去除重复数据(count函数的用法)
  5. Excel一键按背景颜色统计个数的操作
  6. 用python制作全国身份证号验证及查询系统
  7. 自学python能干什么工作_自学python能干什么
  8. 小白学习Spark原理
  9. 为什么互联网大厂企业都宁愿花20K+招应届生,都不愿意涨薪5K来留住老员工?
  10. atof函数 C++用法