ZGLanguage 解析SQL数据血缘 之 Python + Echarts 显示SQL结构图


### 根据之前文章的说明,可以使用 Python 对 ZGLanguage 的SQL代码解析结果进行处理,得到SQL的表级血缘树信息:


# SQL代码 :


CREATE TABLE TMP_O_SS_CL_1

AS

    SELECT CL.OBJECTNO

         , PP.PAYDATE

      FROM NYBDP.O_SS_CL_LOAN_ACCT_STATIS CL

 LEFT JOIN (SELECT AL.PAYDATE

                 , BC.BUSS_NO

              FROM O_CWWS_ACCT_LOAN AL

        INNER JOIN NYBDP.O_CWWS_BUSINESS_DUEBILL BD

                ON 1=1

         LEFT JOIN O_CWWS_BUSINESS_CONTRACT BC

                ON 1=1

           ) PP

        ON 1=1

         ;



# SQL表级血缘树信息 sql_struct_info :


[{'level': '0', 'node_type': '', 'value': '', 

  'children': [{

  

      'level': '1', 'node_type': '__CREATE_TABLE_SELECT__', 'value': 'TMP_O_SS_CL_1', 

  'children': [{

  

      'level': '5', 'node_type': '__TABLE_NAME__', 'value': 'O_SS_CL_LOAN_ACCT_STATIS', 

  'children': []}, {

  

  'level': '7', 'node_type': '__SUB_SELECT__', 'value': '', 

  'children': [{

  

      'level': '11', 'node_type': '__TABLE_NAME__', 'value': 'O_CWWS_ACCT_LOAN', 

  'children': []}, {

  

  'level': '13', 'node_type': '__TABLE_NAME__', 'value': 'O_CWWS_BUSINESS_DUEBILL', 

  'children': []}, {

  

  'level': '15', 'node_type': '__TABLE_NAME__', 'value': 'O_CWWS_BUSINESS_CONTRACT', 

  'children': []}]}]}]}]



#### 为了直观显示,可以使用 Echarts 图形化 :


# 将以上信息转换成 Echarts 的树结构数据, 代码如下:


def getTableTree(sql_struct_info, one_tree) :

    for one_node in sql_struct_info :

        # print(one_node['value'])

        new_node = {'name':one_node['value'], 'children':[]}

        one_tree.append(new_node)

        getTableTree(one_node['children'], new_node['children'])


    return


tree_date = []

getTableTree(sql_struct_info, tree_date)


print(tree_date)



# 可以得到转换结果 :


[{'name': 'file:out.zgl', 

  'children': [{

  

      'name': 'TMP_O_SS_CL_1', 

  'children': [{

  

      'name': 'O_SS_CL_LOAN_ACCT_STATIS', 

  'children': []}, {

  

  'name': '__SUB_SELECT_11__', 

  'children': [{

  

      'name': 'O_CWWS_ACCT_LOAN', 

  'children': []}, {

  

  'name': 'O_CWWS_BUSINESS_DUEBILL', 

  'children': []}, {

  

  'name': 'O_CWWS_BUSINESS_CONTRACT', 

  'children': []}]}]}]}]



# 将以上转换结果使用 Echarts 展示 :






2026-01-12 12:54:53 | 数据血缘测试帐号 | 技术 & 提问 | 阅读76次

回 复 :