ZGLanguage 解析SQL数据血缘 之 提取select语句中的源表名

假设存在 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 复制代码
__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张源表名。

相关推荐
xiaoye-duck9 小时前
C++ string 类使用超全攻略(上):创建、遍历及容量操作深度解析
c++·stl
IvorySQL9 小时前
PostgreSQL 性能:云端与本地的延迟分析
数据库·postgresql
wangbing11259 小时前
分组取前几位
数据库
Elastic 中国社区官方博客9 小时前
使用瑞士风格哈希表实现更快的 ES|QL 统计
大数据·数据结构·sql·elasticsearch·搜索引擎·全文检索·散列表
csdn_aspnet9 小时前
C++跨平台开发,分享一些用C++实现多平台兼容的工程难题与解决方案
c++
isNotNullX10 小时前
什么是数字脱敏?一文讲透数字脱敏概念
大数据·数据安全·数据可视化·数字脱敏
给我来一根10 小时前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
_F_y10 小时前
MySQL表的操作
android·数据库·mysql
linweidong10 小时前
C++大型系统中如何组织头文件和依赖树?
java·c++·架构
weixin_4572971010 小时前
大数据面试常见问题
大数据·面试·职场和发展