根据之前文章的说明,可以使用 Python 对 ZGLanguage 的SQL代码解析结果进行处理,得到SQL的表级血缘树信息:
SQL代码 :
sql
复制代码
SELECT CL.OBJECTNO
, AL.PAYDATE
FROM NYBDP.O_SS_CL_LOAN_ACCT_STATIS CL
inner JOIN O_CWWS_ACCT_LOAN AL
ON 1=1
LEFT out JOIN NYBDP.O_CWWS_BUSINESS_DUEBILL BD
ON 1=1
LEFT JOIN O_CWWS_BUSINESS_CONTRACT BC
ON 1=1
;
解析生成SQL表级血缘树信息 sql_struct_info :
python
复制代码
[{'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 的树结构数据, 代码如下:
python
复制代码
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)
可以得到转换结果 :
python
复制代码
[{'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 展示 :