最近想清理一下OBIEE的模型,考虑了一下,需要能够到统计一下展现层表和字段的使用次数才能做判断,如果能统计到物理层那就更好了。
数据来源:
1.OBIEE的日志表(一般叫s_nq_acct)有逻辑sql语句,使用query_text字段就可以了,不过可能由于字段长度可能被截断,obiee11g增加了一个blob字段query_blob。
2.物理语句就需要使用NQQuery.log了。
整理了一下具体要做的事:
1.准备SQL解析语句,能够获取字段名和表名。
2.获取逻辑语句并统计
3.获取物理语句并统计
解析SQL语句:
今天先介绍如何使用sqlparse,解析sql语句, 介绍见https://pypi.python.org/pypi/sqlparse
安装pip install sqlparse
使用的示例
import sqlparse
sql = 'select a.col11,a.col12,b.col21,b.col22 from foo a , foo_detail b where (a.id = b.id) and a.id in (select bar.id from bar);'
print( sqlparse.format(sql, reindent=True, keyword_case='upper'))
结果如下:
SELECT a.col11,
a.col12,
b.col21,
b.col22
FROM foo a,
foo_detail b
WHERE (a.id = b.id)
AND a.id IN
(SELECT bar.id
FROM bar);
下一步就是统计字段了,下一次继续。