尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

源代码:跨数据库通用“字段级”数据血缘解析与图形化(1/3:血缘信息的识别、提取、标注) ### 背景1、 数据血缘可以大幅提升数据治理、问题定位的能力重要性不言而喻2、 目前大部分数据血缘工具往往只能做到表级血缘。而字段级血缘要么没有要么不准要么需要花大量人力维护### 问题1、 能否通过一个命令实现对不同关系型数据库的多种SQL脚本自动解析出准确的字段级数据血缘数据2、 能否对字段级数据血缘进行图形化并实现追溯功能### 方案# 总体可以分为3个部分1、 使用 ZGLanguage (20260826后的版本)对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 11 ; 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}
返回列表