Oracle 数据库数据血缘分析

Oracle 数据库作为一个传统老牌的数据库,在各个行业都有广泛的应用。随着大数据应用的兴起,Oracle 以其卓越的性能表现,作为数据仓库使用,也有着众多的用户。数据治理在大数据应用中是一个重要的环节,它对保证企业的数据质量,满足监管的数据合规性都必不可少。数据血缘是数据治理中一种重要的元数据,有了数据血缘这个种类的元数据,我们可以用它进行数据溯源、表和字段变更的影响分析、数据合规性的证明、数据质量的检查等。

在 Oracle 数据库的环境中,我们可以通过进行以下内容的分析,获得数据血缘元数据:

一、数据库对象的DDL

我们可以从 Oracle 数据库中获取各种数据库对象的 DDL,即各种数据库对象的 SQL 定义语句,这些数据库对象有 View、Function, Procedure, Package 等。通过对这些数据库对象 DDL 的分析,我们不但可以获得这些数据库对象的定义,例如有哪些表和字段,而且可以获得表、视图之间的数据血缘关系,也可以知道哪些表和视图的数据在哪些 Function, Procedure, Package 中进行了数据的转换。

血缘分析中常见的 Oracle 数据库对象:

  • DB Link
  • Function
  • Package
  • Procedure
  • Synonym
  • Table
  • View

二、ETL 转换中的脚本

在 Oracle 的数仓环境中,很多企业利用 Oralce 的 PL/SQL 进行 ETL 脚本的开发,在数仓的不同层之间进行数据的抽取(Extract)、转换(Transform)、加载(Load)。如果我们对这些用 PL/SQL 编写的 ETL 脚本进行分析,可以整理出数据在数仓不同层之间是如何进行转换的,获得 ETL 过程中数据血缘元数据。

三、报表等应用系统中的 SQL 语句

在仪表盘(Dashboard)等应用中,会显示大量的指标数据,这些数据一般都是通过复杂的 SQL 语句计算而来,通常这些 SQL 语句都有嵌套的子查询,多个表的 JOIN 等复杂操作。通过实时分析这些 SQL 语句,我们可以知道这些统计的指标数据来自数仓 DW 层的哪些表(一般都是一些大宽表)。

看了上面的这些描述,可能你还没有完全明白这些数据血缘分析的结果有什么作用。那么我们换一个视角,从一个典型数仓包含的各个分层入手,看看以上进行的数据血缘分析,如何帮助你从应用层的一个你感兴趣的报表的数据开始,逐层穿透,溯源到这个数据来自哪个业务系统的哪些表和字段。

数据仓库的分层

数仓的分层:

1、ODS 层 (Operation Data Store 数据准备区), 数据仓库源头系统的数据表通常会原封不动的存储一份,这称为ODS层,也称为准备区。它们是后续数据仓库层加工数据的来源。ODS层数据的主要来源是业务数据库、埋点日志、其他数据源。

2、DW 层(Data Warehouse 数据仓库层),该层包含DWD、DWS、DIM层,由ODS层数据加工而成,主要是完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。

3、ADS 层(Application Data Store 应用数据层),该层是基于DW层的数据,整合汇总成主题域的服务数据,用于提供后续的业务查询等。

在 Oracle 数仓环境中,不同层的数据会利用 Oralce 的 PL/SQL 开发的 ETL 脚本进行数据的抽取、转换、加载。通过对 ETL 代码的分析,数仓不同层之间数据的血缘关系就可以梳理出来。

通过分析业务数据库中的数据库对象 DDL,业务库中的血缘关系也就准备就绪。

经过以上两步的准备,基本的数据血缘信息都有了。然后如果需要对最顶层的应用中的数据(一般都是一些动态计算的汇总数据)进行溯源,只要分析应用中使用的 SQL 查询,就可以通过类似下面这条链路完成数据的完整溯源:

应用数据 -> ADS -> DW -> ODS -> 业务数据库

数仓中的数据血缘分析