ZGLanguage 解析SQL数据血缘 之 标识提取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
         ;

通过 ZGLanguage 解析配置,标识出目标表:

sql 复制代码
__DEF_FUZZY__             Y
__DEF_DEBUG__             N
__DEF_CASE_SENSITIVE__    N

__DEF_LINE_COMMENT__      --
__DEF_LINES_COMMENT__     /*     */


__DEF_PATH__    __CREATE_TABLE_SELECT__
1             : x1            @          | create
              : x2            @          | table
1             : 目标表        @          | __NAME__
+             : schema        @          | __NAME__
              : pp            @          | .
              : 目标表_2      @          | __NAME__
1             : x3            @          | as
              : x4            @          | __SELECT__
              : x5            @          | ;


__DEF_SUB_PATH__    __SELECT__
1             : x1            @          | select
N             : x2            @          | __OTH_COL__
e             : x3            @          | ,
1             : x4            @          | from
              : x5            @          | __TABLE_NAME__
              : x5s           @          + __SUB_SELECT__
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__   __SUB_SELECT__
1       : x1                     | (
        : x2                     | __SELECT__
        : x3                     | )
        : x4         @ CAN_SKIP  | as
        : x5         @ 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__
              : x2s     @                + __SUB_SELECT__
              : 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)如下所示:

由上图可以看出,通过"标识"列,可以提取到SQL的"目标表"和"源表"

相关推荐
鸿乃江边鸟2 分钟前
Spark中怎么做Spark canonicalize归一化
大数据·分布式·spark
视觉小萌新3 分钟前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
未来之窗软件服务4 分钟前
精选之变,顺势而生(2026 年高考语文作文)
大数据·人工智能·高考·仙盟创梦ide·东方仙盟
Amnesia0_05 分钟前
MYSQL复合查询和内外连接
数据库·mysql
Gauss松鼠会5 分钟前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
仰望星空的代码5 分钟前
科技是市场的唯一
大数据·人工智能·科技·财经·股市行情
芯盾时代7 分钟前
企业建立安全防线治理失控的Agent
大数据·人工智能·安全
二等饼干~za8986688 分钟前
2026 主流 GEO 源码厂商实测:云罗 GEO、摘星智能、棋引科技技术与落地能力对比
大数据·运维·科技
AI数据皮皮侠8 分钟前
全国高考报名、录取数据(1977-2026)
大数据·数据库·人工智能·python·机器学习·高考
格发许可优化管理系统12 分钟前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++