type
status
date
slug
summary
tags
category
icon
password
最近收到这么个需求:追溯帆软仪表板用到的所有数据库源表。解析脚本是有现成的,如果是追溯帆软报表(FR, Fine Report)的话其实会更简单些,因为 FR 有保存物理文件(.cpt, .cptx),直接解析就行。而 BI 仪表板并没有物理文件,所以得稍微绕一下,不过思路还是比较清晰的:
仪表板 -> 所用数据集 -> 数据集引用表 -> 源SQL -> 脚本解析数据库源表

基础数据

找官方技术支持一顿咨询,拿到了这么两段SQL(这里简化了一下):
SQL-1
NAME[VARCHAR2]
TABLES[CLOB]
A
["TABLE1", "TABLE2"]
B
[“TABLE3”]
C
[“TABLE4”]
SQL-2
ID[VARCHAR2]
ORIGNAME[CLOB]
SQLVAL[CLOB]
1
TABLE1
SELECT * FROM R_CISP_1
2
TABLE2
SELECT * FROM R_CISP_2
3
TABLE3
SELECT * FROM R_CISP_3
4
TABLE4
SELECT * FROM R_CISP_4
注意:
  1. TBL1.TABLES 为 CLOB 类型,值为多个 TBL2.ORIGNAME 的列表
  1. 关联条件为 TBL1.TABLES 和 TBL2.ORIGNAME

解决思路

TABLES是一个ORIGNAME的集合,直接关联显然不行,我的想法是用正则来进行匹配关联:
然后还得区分下表的来源数据库,类比 SQL-2 不难得到存储数据库名的数据行为:
剔除下官方内置仪表板的数据,整理得最后的 SQL:
关联结果:
用户名
仪表板名
数据集所用表
数据库
表名
SQL
zhangsan
A
["TABLE1", "TABLE2"]
impala
TABLE1
SELECT * FROM R_CISP_1
zhangsan
A
["TABLE1", "TABLE2"]
impala
TABLE2
SELECT * FROM R_CISP_2
lisi
B
[“TABLE3”]
oracle
TABLE3
SELECT * FROM R_CISP_3
wangwu
C
[“TABLE4”]
mysql
TABLE4
SELECT * FROM R_CISP_3
搞定,是想要的结果~(由于保密规定,上述实际数据均替换成了造数据。)
Prompt | Python Package Learning Assistant v2Prompt | Language Coach
  • Twikoo