【发布时间】:2020-05-22 09:02:06
【问题描述】:
我正在尝试从 xml 标记内的 sql 查询中提取架构和表名
样本
<head>
<sql> select 1 from owner_a.table1 </sql>
<sql> select 1 from owner_b.table2 , owner_b.table3 where ... </sql>
<sql> select 1 from owner_c.table4 join owner_c.table5 on ... left join owner_c.table 6 on .. </sql>
<head>
您可能会注意到,sql 可能有不同的格式。
- 可能在也可能不在 ANSI
- 可能包含也可能不包含 where 子句
模式和表名也没有特定的模式。
为了从 xml 文件中提取 sql,我使用了 xml_grep。
xlm_grep 'sql' --text_only $file.xml
下一个挑战和我被困的部分是在此输出中获取架构和表名
schema | table_name
owner_a | table1
owner_b | table2
owner_b | table3
owner_c | table4
owner_c | table5
owner_c | table6
我正在考虑的方法 --
对于非 ansi 查询是
- 获取单词“from”之后直到“where”的字符串
- 使用逗号作为分隔符分割字符串
- 使用“.”再次拆分作为分隔模式和表名的分隔符
用于 ansi 查询
- 获取单词“join”之后的字符串
- 使用“.”分割作为分隔符
这是最有效的方法吗?使用 grep 、 sed 或 awk 是否可行?
【问题讨论】:
-
如果你能列出所有的可能性并找到一个模式,那么它是可以做到的。挑战在于确保列出所有可能性。至于输出,与数据提取相比,这是微不足道的。
-
现在这将是所有可能的查询格式。
-
所以你的计划似乎合乎逻辑。开始实施:)
-
@user2058738,样本输入和样本输出是什么?