数据管理DMS的SQL血缘功能支持将SQL中涉及的表、字段之间的依赖和影响关系,以清晰、可视化的方式展示在图谱和表格中。本文介绍如何使用SQL血缘功能。
背景信息
随着业务数据应用规模不断扩大,待加工的SQL越来越复杂、冗长,例如,嵌套多层子查询语句、CASE表达式等,初次接触复杂SQL的用户不易快速梳理出SQL中涉及的表、字段之间的依赖、影响关系。
为解决如上问题,您可以使用DMS提供的SQL血缘功能,帮助您快速梳理SQL中表、字段之间的依赖、影响关系。
应用场景
快速梳理SQL加工逻辑和链路。
辅助判断表、字段变更是否会对上游(数据源)及下游数据产生影响。
前提条件
数据库为:RDS MySQL、PolarDB MySQL版、AnalyticDB MySQL版、RDS PostgreSQL、PolarDB PostgreSQL版、AnalyticDB PostgreSQL版、Oracle、OpenGauss。
数据库实例的管控模式为安全协同。管控模式的详细信息,请参见管控模式。
技术实现
使用DMS自研的SQL血缘解析组件对填写的SQL进行解析。
SQL解析过程中,会使用DMS采集的实例、库、表、字段信息辅助进行血缘分析。
分析解析后的表、字段,进而获得表或字段之间的依赖、影响关系。
将表与字段之间的依赖、影响关系,以图谱和表格的形式呈现在界面。
操作步骤
- 登录数据管理DMS 5.0。
在顶部菜单栏中,选择数据资产 > SQL血缘。
说明若您使用的是极简模式的控制台,请单击控制台左上角的
图标,选择全部功能 > 数据资产 > SQL血缘。
在SQL血缘页面,选择目标数据库,填写待进行血缘可视化分析的SQL。
说明填写的SQL仅用于分析表、字段之间的血缘关系,不会被写入数据库中。
单击生成血缘,即可在右侧查看血缘图谱和血缘明细。
DMS支持解析的血缘关系详情,请参见支持的血缘关系和血缘明细。
血缘图谱示例图:
血缘明细示例图:
血缘图谱和血缘明细示例图中,包含但不仅限于如下血缘关系:
表依赖表: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) | 使用函数对从表中数据进行计算统计,且从表中的字段不依赖其他表的情况下,对目标表字段的影响。常见于使用 |
字段关联字段 (FIELD_JOIN_FIELD) | 分析SQL中的JOIN涉及的字段。 |