使用regex从sql文件提取表

ulmd4ohb  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(266)

我希望能够使用正则表达式提取查询的源表。这将帮助我构建一个脚本来测试依赖项,而不必访问集群。
例子:

use datalab2;
select 
   *
from hello as table1
left join (
  select 
     *
  from ${hiveconf:varable_db}.events
  where  test=1
) as table2 on 
  table2.test = table1.test
inner join datalab3.table3 as table3 on 
  table3.test = table1.test;

将返回:

<br>
hello <br>
${hiveconf:varable_db}.events <br>
datalab3.table3 <br>
62lalag4

62lalag41#

使用以下两个正则表达式解决了这个问题
1:“(带\s+|,\s*)([a-za-z0-9|]+)\s+as\s*\(”
2:“(?<=[^a-za-z0-9\]从|[^a-za-z0-9\]连接)(\s+\s+[^\(])([a-za-z0-9.\{\\$\:]+)”
第一种方法收集所有具有语句名称的语句的列表
例子:https://regex101.com/r/sx5hz2/25
第二个获取查询和with语句中使用的所有表的列表
例子:https://regex101.com/r/sx5hz2/26
第二个列表中的不同项将是查询使用的所有表

相关问题