全部产品
Search
文档中心

数据管理 DMS:SQL血缘

更新时间:May 11, 2023

数据管理DMS的SQL血缘功能支持将SQL中涉及的表、字段之间的依赖和影响关系,以清晰、可视化的方式展示在图谱和表格中。本文介绍如何使用SQL血缘功能。

背景信息

随着业务数据应用规模不断扩大,待加工的SQL越来越复杂、冗长,例如,嵌套多层子查询语句、CASE表达式等,初次接触复杂SQL的用户不易快速梳理出SQL中涉及的表、字段之间的依赖、影响关系。

为解决如上问题,您可以使用DMS提供的SQL血缘功能,帮助您快速梳理SQL中表、字段之间的依赖、影响关系。

应用场景

  • 快速梳理SQL加工逻辑和链路。

  • 辅助判断表、字段变更是否会对上游(数据源)及下游数据产生影响。

前提条件

  • 数据库为:RDS MySQLPolarDB MySQL版AnalyticDB MySQL版RDS PostgreSQLPolarDB PostgreSQL版AnalyticDB PostgreSQL版Oracle、OpenGauss。

  • 数据库实例的管控模式为安全协同。管控模式的详细信息,请参见管控模式

技术实现

  1. 使用DMS自研的SQL血缘解析组件对填写的SQL进行解析。

    SQL解析过程中,会使用DMS采集的实例、库、表、字段信息辅助进行血缘分析。

  2. 分析解析后的表、字段,进而获得表或字段之间的依赖、影响关系。

  3. 将表与字段之间的依赖、影响关系,以图谱和表格的形式呈现在界面。

操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据资产 > SQL血缘

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17图标,选择全部功能 > 数据资产 > SQL血缘

  3. SQL血缘页面,选择目标数据库,填写待进行血缘可视化分析的SQL。

    说明

    填写的SQL仅用于分析表、字段之间的血缘关系,不会被写入数据库中。

    示例SQL

    CREATE TABLE scott.dept(   
      deptno     BIGINT PRIMARY KEY,   
      dname      VARCHAR(14),   
      loc        VARCHAR(13)
    );
    
    CREATE TABLE scott.emp(   
      empno    BIGINT PRIMARY KEY,   
      ename    VARCHAR(10),   
      job      VARCHAR(9),   
      mgr      BIGINT,   
      hiredate DATE,   
      sal      DECIMAL(7,2),   
      comm     DECIMAL(7,2),   
      deptno   BIGINT
    );
    
    CREATE TABLE orders(
        order_id VARCHAR(64) PRIMARY KEY,
        order_total BIGINT,
        sales_rep_id VARCHAR(64),
        customer_id varchar(64) 
    );
    
    CREATE TABLE customers(
        customer_id VARCHAR(64) PRIMARY KEY,
        c_name VARCHAR(128)
    );
    
    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 
    ;
    
    INSERT 
        INTO small_orders
          (oid, ottl, sid, cid)
    SELECT 
    o.order_id AS oid, 
    o.order_total AS ottl,
    o.sales_rep_id AS sid, 
    c.customer_id AS cid
    FROM orders AS o INNER JOIN customers AS c
    ON o.customer_id = c.customer_id;
  4. 单击生成血缘,即可在右侧查看血缘图谱血缘明细

    DMS支持解析的血缘关系详情,请参见支持的血缘关系血缘明细

    • 血缘图谱示例图

      2023-04-13_11-39-37
    • 血缘明细示例图

      2023-04-13_11-40-11

    血缘图谱和血缘明细示例图中,包含但不仅限于如下血缘关系:

    • 表依赖表:small_orders表数据依赖于orders表和customers表。

    • 字段依赖字段:small_orders表中oid字段的生成依赖于orders表的order_id字段。

    • 字段影响表:emp表中的deptno字段通过GROUP BY分组聚合影响vasl视图。

血缘明细

  • 来源:指依赖或影响关系来源于哪张表或哪个字段,一般以具体表名或字段名展示。特殊名称如下:

    • NO_DIRECT_RELATE_COLUMN:表示来源是常量,不是表或字段。例如,

      INSERT INTO a select 1 from b;
    • NO_META:表示SQL血缘解析器无法解析到具体的来源表或字段。

  • 目标:指依赖源表、字段,或受来源表或字段影响的表或字段,以具体表名或字段名展示。

  • 操作类型:指产生血缘关系的位置。例如,操作类型为SELECT,则表示该血缘关系来源于SELECT语句。枚举值如下:SELECT、UPDATE、MERGE、WHERE、GROUP、HAVING、ORDER、JOIN_LEFT、JOIN_RIGHT、WHERE_JOIN、INNER、LEFT、RIGHT、FULL。

  • 加工口径:字段的SQL语句。仅展示在字段依赖字段、字段影响字段和字段影响表关系中。

  • 计算方式:加工口径中的字段是否用到了函数或表达式。枚举值如下:

    • DIRECT:未使用函数或表达式。

    • EXPR:使用了函数或表达式。

DMS支持解析的血缘关系

说明
  • 血缘解析按粒度分为表级血缘和字段血缘。

  • 血缘分析包括来源分析和影响分析。

关系类型

说明

表依赖表(TABLE_DEPEND_TABLE)

目标表依赖于哪张表。

例如,示例SQL的small_orders表来源于orders表。

字段依赖字段(FIELD_DEPEND_FIELD)

目标字段依赖于哪张表的哪个字段。

例如,示例SQL的vsal中的Department字段依赖于emp表的deptno字段。

字段影响表(FIELD_INFLU_TABLE)

在WHERE、GROUP BY或ORDER BY等子句中的字段对目标表的影响。

例如,示例SQL的emp表中的deptno字段影响vsal。

字段影响字段

(FIELD_INFLU_FIELD)

从表中WHERE、GROUP BY、ORDER BY或JOIN条件的字段对目标表字段的影响。

说明

从表是以主表的主键值为外键的表。

表影响字段(TABLE_INFLU_FIELD)

使用函数对从表中数据进行计算统计,且从表中的字段不依赖其他表的情况下,对目标表字段的影响。常见于使用COUNT(*)函数输出数据到某个目标表字段。

字段关联字段

(FIELD_JOIN_FIELD)

分析SQL中的JOIN涉及的字段。