源代码:跨数据库通用“字段级”数据血缘解析与图形化(1/3:血缘信息的识别、提取、标注)

举报
yd_234468518 发表于 2026/08/26 16:50:36 2026/08/26
【摘要】 源代码:跨数据库通用“字段级”数据血缘解析与图形化(1/3:血缘信息的识别、提取、标注)

### 背景:

1、 数据血缘可以大幅提升数据治理、问题定位的能力,重要性不言而喻
2、 目前大部分数据血缘工具,往往只能做到表级血缘。而字段级血缘要么没有,要么不准,要么需要花大量人力维护


### 问题:

1、 能否通过一个命令,实现对不同关系型数据库的多种SQL脚本,自动解析出准确的字段级数据血缘数据?
2、 能否对字段级数据血缘进行图形化并实现追溯功能?


### 方案:

# 总体可以分为3个部分:

1、 使用 ZGLanguage 对SQL脚本文件进行解析转换,对脚本中的血缘信息进行识别、提取、标注,得到初级血缘标注信息
2、 使用 Python 对以上标注信息,进行:(a)代码层级拆解;(b)字段和表的映射识别检验;(c)得到最终字段级血缘数据并保存到mysql数据库中
3、 使用 Django 创建web应用,对数据库中的字段级血缘数据进行读取、图形化展示、上下游追溯


### 由于篇幅原因,将方案中的3个步骤,拆成3篇文章进行展示,此文章是第1部分:


# 创建跨数据库通用SQL语法解析转换配置文件:MARK_SQL_4_COLS_DATA_LINEAGE.syn,由于文件较大,可查看链接:

https://gitee.com/zgl-20053779/zglanguage/tree/master/etc/SQL_DATA_LINEAGE


# 使用配置文件 MARK_SQL_4_COLS_DATA_LINEAGE.syn 对SQL脚本(如:xxxxx.hql)进行处理,命令如下:

ZGLanguage -e MARK_SQL_4_COLS_DATA_LINEAGE.syn -t xxxxx.hql -o mark_sql_cols_data_lineage.zgl > log.log


### 实例结果演示:

# 实例源代码 :

DROP TABLE IF EXISTS bi_dw.dw_omc_sales_detail_f_tmp
;
CREATE TABLE bi_dw.dw_omc_sales_detail_f_tmp
(
company_wid	int4,
org_id	    int4 COMMENT'机构ID',
org_code	varchar(255) COMMENT'机构code',
org_name	varchar(255),
customer_wid	int4,
cust_account_id	int4
)
distributed randomly
;

--ALTER TABLE bi_dw.dw_omc_sales_detail_f_tmp ADD PRIMARY KEY(invoice_number);
GRANT ALL PRIVILEGES ON bi_dw.dw_omc_sales_detail_f_tmp TO gkht_yibai;

set optimizer = off;
insert into bi_dw.dw_omc_sales_detail_f_tmp
(
company_wid,
org_id,
org_code,
org_name,
customer_wid,
cust_account_id
)
select 
123 as company_wid,
ifnull(T.org_id, '9999') org_id,
T.org_code as org_code,
T.org_name,
T.customer_wid,
T.cust_account_id
FROM bi_dw.dw_om_sales_detail_f_data_tmp T
where 1=1
;

reset optimizer;

# 实例转换结果 :

__CREATE_TABLE_STRUCT__{:::}dw_omc_sales_detail_f_tmp{:::}
company_wid||int4||{###}
org_id||int4||'机构ID'{###}
org_code||	varchar(255)||'机构code'{###}
org_name||	varchar(255)||{###}
customer_wid||int4||{###}
cust_account_id||int4||
{111} 


__DECLARE_VAR__{:::}optimizer
{111}


__INSERT_TABLE_SELECT__{:::}dw_omc_sales_detail_f_tmp{:::}
{###}<tartab_col_list>{###}company_wid,org_id,org_code,org_name,customer_wid,cust_account_id{###}</tartab_col_list>{###} 
select 
{###}<column_logic>{###}
	123 as {###}<column_oth_name>{###}company_wid{###}</column_oth_name>{###}
{###}</column_logic>{###}

{###}<column_logic>{###}
	ifnull( {###}<column_name>{###}T.org_id{###}</column_name>{###}  , '9999'  ) {###}<column_oth_name>{###}org_id{###}</column_oth_name>{###}
{###}</column_logic>{###}

{###}<column_logic>{###}
	{###}<column_name>{###}T.org_code{###}</column_name>{###} as {###}<column_oth_name>{###}org_code{###}</column_oth_name>{###}
{###}</column_logic>{###}

{###}<column_logic>{###} 
	{###}<column_name>{###}T.org_name{###}</column_name>{###}
{###}</column_logic>{###}

{###}<column_logic>{###}
	{###}<column_name>{###}T.customer_wid{###}</column_name>{###}
{###}</column_logic>{###}

{###}<column_logic>{###}
	{###}<column_name>{###}T.cust_account_id{###}</column_name>{###} 
{###}</column_logic>{###}

{###}<source_table_info>{###}
	FROM||dw_om_sales_detail_f_data_tmp||T
{###}</source_table_info>{###}

{###}<source_table_condition>{###}
	where 1 = 1 
{###}</source_table_condition>{###}
{111}


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。