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

         ;


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



__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)如下所示:







2026-01-07 18:40:44 | 数据血缘测试帐号 | 技术 & 提问 | 阅读99次

回 复 :