【SQLFlow】使用Grabit自定义SQL收集metadata

Grabit马哈鱼数据血缘分析器 的一个支持工具,它从各种数据源中收集SQL脚本,然后将它们上传到马哈鱼,以便对这些SQL脚本进行数据血缘分析,分析结果可以在马哈鱼中查看。同时,数据血缘结果将被提取到本地目录中。

Grabit目前支持图形化界面命令行两种方式操作,本文主要介绍Grabit如何使用命令行从数据库中获取DDL。

获取DDL

  • 下载Grabit
  • 在Grbit目录中,参考conf-template/dbname-config-template.json配置文件,新建配置文件,填写其中的数据库连接信息databaseServer对象,马哈鱼服务器连接信息SQLFlowServer以及数据库类型databaseType等参数,具体参数含义请参考官方文档:Grabit Using Document
  • 指定配置文件路径/f conf-path,运行start脚本
  • data/job/metadata/metadata.json文件可查看从数据库中导出的metadata数据
  • logs/grabit.log中查看运行日志,成功后在马哈鱼上的Joblist页面查看结果

自定义SQL获取DDL

Grabit中维护了从指定数据库获取DDL的SQL脚本,在 SQL conf 下载这些SQL。
conf目录中是Grabit获取各个数据库的DDL所执行的SQL, 通过执行这些SQL获取表,视图,存储过程DDL。

例如获取oracle的query.sql脚本的SQL:

SELECT
v.text sourceCode,
'view' as dbOjbType,
'"'||v.VIEW_NAME||'"' as dbObjName,
'"'||v.OWNER||'"."'||v.VIEW_NAME||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||v.OWNER||'"' as schemaName
FROM all_views v where v.OWNER = '%schema' and v.OWNER not in ('SYS', 'SYSTEM');

SELECT
v.text sourceCode,
'procedure' as dbOjbType,
'"'||v.name||'"' as dbObjName,
'"'||v.OWNER||'"."'||v.name||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||v.OWNER||'"' as schemaName
FROM all_source v where type='PROCEDURE' and v.OWNER = '%schema' and v.OWNER not in ('SYS', 'SYSTEM')
UNION ALL
SELECT
v.text sourceCode,
'trigger' as dbOjbType,
'"'||v.name||'"' as dbObjName,
'"'||v.OWNER||'"."'||v.name||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||v.OWNER||'"' as schemaName
FROM all_source v where type='TRIGGER' and v.OWNER = '%schema' and v.OWNER not in ('SYS', 'SYSTEM')
UNION ALL
SELECT
v.text sourceCode,
'function' as dbOjbType,
'"'||v.name||'"' as dbObjName,
'"'||v.OWNER||'"."'||v.name||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||v.OWNER||'"' as schemaName
FROM all_source v where type='FUNCTION' and v.OWNER = '%schema' and v.OWNER not in ('SYS', 'SYSTEM');

SELECT
mv.QUERY sourceCode,
'materialized view' as dbOjbType,
'"'||mv.MVIEW_NAME||'"' as dbObjName,
'"'||mv.OWNER||'"."'||mv.MVIEW_NAME||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||mv.OWNER||'"' as schemaName
FROM all_mviews mv where mv.OWNER = '%schema' and mv.OWNER not in ('SYS', 'SYSTEM');

当然,Grabit也支持自定义这些SQL,如果你想要自定义SQL来获取DDL,那么你需要按照以下的结果集结构编写SQL。

1,每个SQL查询的结果都必须包含五个结构:

  • sourceCode 获取的DDL文本
  • dbOjbType 类型,例如table,view,function等
  • dbObjName 名称
  • groupName 所属组名称
  • databaseName 所属database名称
  • schemaName 所属schema名称

例如:

SELECT
v.text sourceCode,
'function' as type,
'"'||v.name||'"' as name,
'"'||v.OWNER||'"."'||v.name||'"' as groupName,
'"'||'%database'||'"' as databaseName,
'"'||v.OWNER||'"' as schemaName
FROM all_source v where type='FUNCTION' and v.OWNER = '%schema' and v.OWNER not in ('SYS', 'SYSTEM')

2,将SQL脚本命名为你想要覆盖的conf模板目录中的SQL脚本文件名
3,再当前Grabit的工作目录下新建conf/dbname目录,其中dbname是你想要替换脚本的数据库名称,和模板目录中的名称一致,比如oracle
4,最后将自定义的脚本放在当前conf/dbname/目录下。

例如,想要修改/conf/oracle/query.sql脚本,你需要将自定义的SQL放在conf/oracle/query.sql文件中。
再参考conf-template/dbname-config-template.json配置文件,新建配置文件填写好数据库的连接信息,最后运行start脚本即可。

参考

马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn

马哈鱼数据血缘关系分析工具在线使用:https://sqlflow.gudusoft.com

Grabit使用文档:https://github.com/sqlparser/sqlflow_public/tree/master/grabit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值