ZGLanguage 解析SQL数据血缘 之 提取select语句中的源表名
### 假设存在 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代码中的源表名,可配置语法标注“源表”如下:
__DEF_CASE_SENSITIVE__ N
__DEF_PATH__ __SELECT__
1 : x1 @ | select
N : x2 @ | __OTH_COL__
e : x3 @ | ,
1 : x4 @ | from
: x5 @ | __TABLE_NAME__
N : x6 @ | __JOIN_TABLE__
__DEF_SUB_PATH__ __OTH_COL__
1 : x1 | __NAME__
: x2 | .
: x3 | __NAME__
__DEF_SUB_PATH__ __TABLE_NAME__
1 : 源表 @ | __NAME__
+ : schema @ | __NAME__
: pp @ | .
: 源表_2 @ | __NAME__
1 : as @ CAN_SKIP | as
: 源表别名 @ CAN_SKIP | __NAME__
__DEF_SUB_PATH__ __JOIN_TABLE__
1 : x0 @ | join
+ : x1 @ | inner
: x2 @ | join
+ : x5 @ | left
: x6 @ CAN_SKIP | out
: x7 @ | join
+ : x12 @ | right
: x13 @ CAN_SKIP | out
: x14 @ | join
+ : x17 @ | full
: x18 @ CAN_SKIP | out
: x19 @ | join
+ : x20 @ | ,
1 : x21 @ | __TABLE_NAME__
: x22 @ | on
: x23 @ | 1=1
__DEF_STR__ __NAME__
<1,100>
[1,1]ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_??
[0,100]ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_??
[NO] select inner left join on from where group order by having union all with as table
# 根据语法配置解析结果(导入Excel)如下所示:

由以上解析结果红色部分所示,根据 标注 列进行“源表”筛选,可以得到select语句中的4张源表名。
2025-12-31 15:43:34 | 数据血缘测试帐号 | 技术 & 提问 | 阅读176次