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次

回 复 :