增强E-R

数据管理DMS的增强E-R功能基于DMS自研的统一Catalog的元数据采集引擎、列算子血缘解析引擎(解析字段间关联、依赖和影响关系的引擎)和数据资产知识图谱构建等核心能力,可清晰地展现您名下某个数据库内资产之间的关联关系。本文介绍了增强E-R功能的优势、应用场景以及使用方法。

前提条件

  • 支持的数据库实例类型:RDS MySQLRDS PostgreSQLRDS MariaDBPolarDB MySQL版PolarDB PostgreSQL版AnalyticDB for MySQLAnalyticDB for PostgreSQL

  • 数据库实例所在地域:华东1(杭州)、华北2(北京)、华东2(上海)、华南1(深圳)、华北3(张家口)、华北1(青岛)、西南1(成都)、华北5(呼和浩特)、华南2(河源)、华北6(乌兰察布)、华南3(广州)、华东6(福州)、华东5(南京)。

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

背景信息

E-R图(Entity Relationship Diagram)也称实体关系图,是一种用来描述实体、属性和关系的模型。数据库结构设计阶段需要绘制数据库的E-R图,并将E-R图转换为多张数据库表,存储各表的主、外键。E-R图能较好的描述业务数据中的关联关系、数据库存储表和字段之间的依赖和关联关系,并通过此关系将业务或数据库存储的逻辑关系沉淀到数据库设计中。

随着业务规模的增大和数据库外键性能的降低,越来越多的系统设计采用应用系统来保障业务之间的依赖关系,导致数据库的外键信息并不会真正的沉淀到数据库外键设计上,不易通过实际数据库的外键信息看到业务数据表中的逻辑关系,进而影响您梳理数据库内的表之间真实的逻辑关系。

数据管理DMS的增强E-R可以清晰地展示出业务数据之间、数据库存储表和字段之间的关联、依赖和影响关系,并将此关系通过表结构中的逻辑关系沉淀到数据库设计中。

应用场景

  • 快速梳理出数据库内数据间的关系。

  • 导出增强E-R图,作为项目数据设计的资料。

  • 通过查看敏感数据的传递方式,避免敏感信息二次加工后泄露。

  • 通过查看数据之间的依赖关系,尽早发现数据变更的风险。

  • 通过查看数据之间的关联关系,可辅助构建数仓宽表。

  • 通过查看数据之间的加工关系,查看数据的加工链路。

  • 通过查看数据之间的引用关系,识别数据库中的冷、热资产。

注意事项

  • 此功能开通后的T+1日,才可查看E-R图。

  • 增强E-R仅可感知到在DMS中输入或变更的数据表、字段信息,并将其之间的关联、影响和依赖关系展示在页面,感知不到在程序代码等其他端输入或变更的信息。

费用说明

该功能不收费。但该功能仅支持安全协同模式的实例使用,安全协同管控模式是计费商品。

功能优势

  • DMS的增强E-R与传统E-R的构建方案不同,除了具有传统E-R的能力,还具有基于DMS自研的统一Catalog的元数据采集器、列算子血缘解析器和数据资产知识图谱的构建能力,这些能力可以帮助您挖掘出数据资产之间更多潜在的关联关系。

  • DMS构建了百亿级别以上的数据节点和关系的资产图谱,结合多种数据资产业务应用场景,并提供对应的查询和可视化服务。

zichantupu

使用方法

传统E-R

DMS具有传统E-R能力,可以基于数据库中的物理外键构建E-R图。如下操作步骤为您演示如何实现传统E-R。

  1. 登录数据管理DMS 5.0
  2. 单击首页左侧的数据库实例,在实例列表中选择目标实例。

  3. 单击目标实例,左键双击目标数据库名称,进入SQL Console页面。

  4. 在该页面构建测试数据。分别为表ods_huiyuan_t1(简称t1)、ods_huiyuan_t2(简称t2)、ods_huiyuan_t3(简称t3)、ods_huiyuan_t4(简称t4)和ods_huiyuan_fk。在SQL Console页面执行如下SQL:

    示例SQL

    /*创建表*/
    CREATE TABLE `ods_huiyuan_t1` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `user_name` varchar(255) DEFAULT NULL comment '用户名字',
      `english_name` varchar(255) DEFAULT NULL comment '用户英文名',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员1表'
    
    CREATE TABLE `ods_huiyuan_t2` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `user_name` varchar(255) DEFAULT NULL comment '用户名字',
      `tel_number` varchar(255) DEFAULT NULL comment '用户电话号',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员2表'
    
    CREATE TABLE `ods_huiyuan_t3` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `birth_date` varchar(255) DEFAULT NULL comment '出生日期',
      `age` varchar(255) DEFAULT NULL comment '用户年龄',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员3表'
    
    CREATE TABLE `ods_huiyuan_t4` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `address` varchar(255) DEFAULT NULL comment '用户地址',
      `postcode` varchar(255) DEFAULT NULL comment '邮编',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员4表'
    
    CREATE TABLE `ods_huiyuan_fk` (
      `id` int NOT NULL AUTO_INCREMENT comment '自增id',
      `user_id` int NOT NULL comment '用户id',
      `school` varchar(255) DEFAULT NULL comment '用户毕业学校',
      PRIMARY KEY (`id`),
      CONSTRAINT fk_user_id FOREIGN KEY(user_id) REFERENCES ods_huiyuan_t1(id)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员外键测试表'
    
    /*插入数据*/
    INSERT INTO `ods_huiyuan_t1` (`id`,`user_name`,`english_name`) 
    VALUES (1,'唐雪',' Caspar  Jiracek'),
    (2,'傅强钧',' Willem  Skatcher'),
    (3,'麻婕',' Maje  Pennell');
    
    INSERT INTO `ods_huiyuan_t2` (`id`,`user_name`,`tel_number`) 
    VALUES (1,'唐雪','1640116****'),
    (2,'傅强钧','1640116****'),
    (3,'麻婕','1970429****');
    
    INSERT INTO `ods_huiyuan_t3` (`id`,`birth_date`,`age`) 
    VALUES (1,'19870718','35'),
    (2,'19900608','32'),
    (3,'19870101','35');
    
    INSERT INTO `ods_huiyuan_t4` (`id`,`address`,`postcode`) 
    VALUES (1,'晋邦省辽河市蜀锋路4987号戳真流小区11单元0000室','842768'),
    (2,'汉东省京州市勉斡韩路5238号缆攒小区5单元0000室','520241'),
    (3,'宁熙省东顾市辟缘路514号话赃榔小区11单元0000室','432298');
    
    INSERT INTO `ods_huiyuan_fk` (`id`,`user_id`,`school`) 
    VALUES (10001,1,'中国农业大学'),
    (10002,2,'中南大学'),
    (10003,3,'南京农业大学');
                                
  5. T+1日后,在SQL Console页面查看增强E-R。查看的具体操作,请参见查看增强E-R

    chuantongE-R

在此基础上,还具有列算子血缘解析、任务编排的能力,并且可以通过这三种能力实现DMS的增强E-R功能。如下介绍实现DMS增强E-R功能的三种方式及过程。

列算子血缘解析E-R

列算子血缘解析E-R是基于DMS自研的列算子血缘解析器能力构建,可以将字段之间的关联、依赖及影响关系纳入E-R图谱。如下操作步骤为您演示如何通过列算子血缘解析E-R能力实现增强E-R。

  1. 将表ods_huiyuan_t1与ods_huiyuan_t3的ID进行关联,生成一个宽表。在SQL Console页面执行如下SQL:

    示例SQL

    /*字段关联字段关系*/
    SELECT * FROM ods_huiyuan_t1 t1 join `ods_huiyuan_t3` t3 on t1.id = t3.id;

    insert-liesuanzi

  2. 对t4进行一次数据加工,生成一个新的表depend。在SQL Console页面执行如下SQL:

    示例SQL

    /*字段依赖字段关系*/
    CREATE TABLE `ods_huiyuan_depend` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `col1` varchar(255) DEFAULT NULL comment '关联结果1',
      `col2` varchar(255) DEFAULT NULL comment '关联结果2',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员依赖测试表';
    
    insert into `ods_huiyuan_depend` (`id`,`col1`, `col2` )  select `id` , `address` , `postcode`  from `ods_huiyuan_t4`  where  id=1;
    
    select * from ods_huiyuan_depend;
  3. 对t2和t3进行数据加工,将加工后的数据进行关联,生成一张新的表influ。在SQL Console页面执行如下SQL:

    示例SQL

    /*字段影响字段关系*/
    CREATE TABLE `ods_huiyuan_influ` (
      `id` int NOT NULL AUTO_INCREMENT comment '用户id',
      `col1` varchar(255) DEFAULT NULL comment '关联结果1',
      `col2` varchar(255) DEFAULT NULL comment '关联结果2',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='会员影响测试表';
    
    INSERT INTO ods_huiyuan_influ (`id`, `col1`, `col2`)
    SELECT a.id,a.user_name,b.birth_date
    FROM (
        SELECT `id`,`user_name`,`tel_number`
        FROM `ods_huiyuan_t2`
      ) a
      LEFT OUTER JOIN (
        SELECT `id`,`birth_date`,`age`
        FROM `ods_huiyuan_t3`
        WHERE `age` > 32
      ) b ON a.id = b.id;
    
    select * from ods_huiyuan_influ;
  4. T+1日后,在SQL Console页面查看增强E-R。查看的具体操作,请参见查看增强E-R

    liesuanzi-E-R

通过如下示例SQL及表格说明列算子血缘解析E-R的原理及能力,包含字段与字段之间的关联、影响和依赖关系。

CREATE TABLE user_trade AS
SELECT  a.user_id
        ,a.user_name
        ,a.gender
        ,b.amt
        ,b.cnt
FROM    (
            SELECT  user_id,user_name,gender
            FROM    user
            WHERE   user_type = 'taobao'
        ) a
LEFT OUTER JOIN    (
                       SELECT  user_id,sum(amt) AS amt,sum(1) as cnt
                       FROM    trade
                       WHERE   is_pay = 1
                       GROUP BY user_id
                   ) b
ON      a.user_id = b.user_id;

关系类型

说明

示例

字段之间的关联关系

表与表的关联条件中,存在字段的关联。

示例SQL中user表中的user_id字段与trade表中的user_id字段之间存在关联关系。

字段之间的依赖关系

目标字段来源于哪张表的哪个字段。

示例SQL中user_trade表中的user_id字段来源于user表中的user_id字段。

字段之间的影响关系

从表中WHERE字段对目标表字段的影响。

示例SQL中trade表的is_pay字段影响user_trade表中amt字段,影响条件为trade.is_pay=1

任务编排E-R

任务编排E-R是通过任务编排的调度血缘功能来构建资产图谱。如下操作步骤为您演示如何通过任务编排E-R能力实现增强E-R。

  1. 使用DMS的任务编排功能,创建一个单实例SQL节点,并且设置调度时间为每天0点。

    任务编排-设0

  2. 在任务节点的编写SQL区域,写入如下SQL:

    示例SQL

    /*DMS任务编排,每天重复调度一次*/
    drop table if exists ods_huiyuan_df; 
    create table IF NOT EXISTS `ods_huiyuan_df`  
    AS  
    SELECT `user_name`,`tel_number` 
    FROM `ods_huiyuan_t2`
  3. T+1日后,在SQL Console页面查看增强E-R。查看的具体操作,请参见查看增强E-R

    任务编排E-R

查看增强E-R

方法一:通过SQL Console页面查看

  1. 登录数据管理DMS 5.0
  2. 单击首页左侧的数据库实例,在实例列表中选择目标实例。

  3. 单击目标实例,左键双击目标数据库名称,进入SQL Console页面。

  4. 单击页面右上方的ER图标,进入E-R分析页面,查看增强E-R。

    在E-R分析页面,您可以进行如下操作:

    • 单击表,查看表详情。look-table

    • 单击表区域的边,查看关系详情。edge-E-R

方法二:通过资产图谱功能查看

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

    说明

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

  3. 依次单击目标实例、数据库区块右下角的2023-04-18_16-17-04,进入E-R分析页面,查看增强E-R。