Grabit 是马哈鱼数据血缘分析器的一款支持工具,作用是从各种数据源收集 SQL 数据,然后将它们上传到马哈鱼,以便马哈鱼对这些数据进行分析获取血缘关系。目前 Grabit 支持获取数据的方式有:
- 获取本地文件
- 连接指定数据库获取 metadata。
- 获取本地目录
- 从指定 git 仓库获取数据
其中,连接指定数据库获取 metadata 的这种方式目前支持下面这几种数据库:
Azure
,Greeplum
,Hive
,MySQL
,Netezza
,Oracle
,Postgresql
,Redshift
,Snowflake
,SQLServer
,Teradata
以上所有的数据库都是通过账号密码进行连接认证,只有 Snowflake
除了可以使用账号密码认证外,还支持使用密钥对进行身份认证。并且,连接到 Snowflake
后不光支持获取表,视图,存储过程的 DDL,还支持获取历史执行的查询 SQL,收集这些数据后提交给马哈鱼分析这些数据的血缘关系。
本文主要就介绍 Grabit 如何使用 Snowflake
的密钥对进行认证,并获取表,视图,存储过程的 DDL 以及指定时间内历史执行的查询 SQL,收集这些 metadata 后上传到马哈鱼获取血缘关系。
生成密钥对
使用密钥对认证方式需要自己在本地生成密钥对,生成的密钥对是一对相匹配的公私钥文件,生成之后再在 Snowflake 服务器上为账号分配公钥,之后此用户就可以使用私钥进行认证了,具体生成和分配操作如下:
- 生成公私钥:
- 1,首先生成私钥,官方提供了加密和不加密的两种方式,建议生成加密的私钥
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8
- 2,选择私钥文件生成对应的公钥
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
- 为用户分配生成的公钥
alter user jsmith set rsa_public_key='MIIBIjANBgkqh...';
但是这里需要注意,执行
ALTER USER
语句需要拥有USERADMIN
角色的权限,一般需要执行以下操作:
USE ROLE useradmin
官方详情文档:[Key Pair Authentication & Key Pair Rotation]
分配获取历史 SQL 的权限角色
想要从 Snowflake
中获取历史执行 SQL,必须定义一个可以访问 SNOWFLAKE 数据库的角色,并为这个角色分配 WAREHOUSE 仓库权限。
例如创建 custom_role 角色,并为其分配 test_warehouse 仓库的权限:
use role accountadmin;
grant imported privileges on database snowflake to role custom_role;
use role custom_role;
use role sysadmin
GRANT ALL PRIVILEGES ON WAREHOUSE test_warehouse TO role custom_role;
官方详情文档:[QUERY_HISTORY]
Grabit 使用密钥对认证并获取历史查询 SQL 的配置
进行了上面两步操作之后,就可以使用 Grabit 进行认证并获取 metadata 数据提交马哈鱼。Grabit 提供了命令行的方式操作,通过加载 Grabit 所支持的结构的配置文件,连接指定数据源获取数据后推送到马哈鱼进行血缘关系分析。
Grabit 提供了配置文档模板的格式,下面主要介绍使用 Snowflake 密钥对进行认证获取 metadata 然后推送到马哈鱼的配置说明。
配置文件示例:
{
"databaseServer":{
"hostname":"127.0.0.1",
"port":"433",
"username":"USERNAME",
"privateKeyFile":"/data/rsa_key.p8",
"privateKeyFilePwd":"123456",
"database":"DATABASE",
"enableQueryHistory":true,
"queryHistoryBlockOfTimeInMinutes":30,
"queryHistorySqlType":"SELECT,UPDATE",
"snowflakeDefaultRole":"custom_role"
},
"SQLFlowServer":{
"server":"http:127.0.0.1",
"serverPort":"8081",
"userId":"gudu|0123456789",
"userSecret":""
},
"SQLScriptSource":"database",
"databaseType":"snowflake"
}
其中的属性说明:
- SQLScriptSource
此属性是 Grabit 收集数据源的来源类型,目前支持四种来源,必填。分别对应具体的 SQLScriptSource 值如下:
- 上传本地文件 (singleFile)
- 连接指定数据库获取 metadata(database)
- 上传本地目录(directory)
- 从指定 git 仓库获取 SQL 脚本(gitserver)
- databaseType
数据源的数据库类型,必填。 - databaseServer
当SQLScriptSource=database
时,此对象中的值必填,代表着从指定数据库中获取 metadata。
- hostname
数据库连接 ip,必填。 - port
数据库连接端口,必填。 - username
连接的用户名,必填。 - privateKeyFile
使用密钥对认证所需要的私钥文件地址,默认是生成的rsa_key.p8
文件,使用密钥对认证时必填。 - privateKeyFilePwd
生成私钥的时候设置的密码,如果选择不加密方式生成则不用填。 - database
要连接的数据库名称,可选。 - enableQueryHistory
表示是否开启收集历史查询 SQL,默认为 false 不开启,为 true 则开启。 - queryHistoryBlockOfTimeInMinutes
当enableQueryHistory=true
时起作用,表示从查询历史中提取 SQL 查询的时间间隔,默认为30
分钟。 - queryHistorySqlType
当enableQueryHistory=true
时起作用,表示从查询历史中指定提取 DML 类型的 SQL。如果为空时提取所有类型,如果指定多种类型时,则用逗号分隔,如SELECT,UPDATE,MERGE
。目前支持的类型有 SHOW、SELECT、INSERT、UPDATE、DELETE、MERGE、CREATE TABLE、CREATE VIEW、CREATE PROCEDURE、CREATE FUNCTION。
例如:queryHistorySqlType: "SELECT,DELETE"
- snowflakeDefaultRole
所连接的 Snowflake 数据库的角色,可选。
- SQLFlowServer
因为推送要分析的数据到马哈鱼,所有也需要设置其连接信息。
- server
马哈鱼服务器的地址,如果使用官方云版本The SQLFlow Cloud Server,则填写https://api.gudusoft.com
,如果使用内部部署的The SQLFlow on-premise version版本,则填写127.0.0.1
或者http://127.0.0.1
,或者其他服务器地址。 - port
端口,如果使用的是云版本则不填写,如果是马哈鱼的内部部署版本,则填写默认的端口 8081,当然此端口可以自定义,如果你在 nginx 配置文件中设置了 nginx 反向代理设置了特定的端口则需要设置为对应的端口。 - userId 和 userSecret
马哈鱼平台的用户 ID 和密匙,如果你使用内部部署版本,需要将此值设置为gudu|0123456789
并保持userSecret
为空。如果你想连接到云平台The SQLFlow Cloud Server,你可以申请一个 30 天的高级帐户 以获取必要的用户 ID 和密码。
例如本地版本:
"SQLFlowServer":{
"server":"127.0.0.1",
"serverPort":"8081",
"userId":"gudu|0123456789",
"userSecret":""
}
云版本:
"SQLFlowServer":{
"server":"https://api.gudusoft.com",
"serverPort":"",
"userId":"your own user id here",
"userSecret":"your own secret key here"
}
Grabit 命令行运行方式
Grabit 支持 UI 界面和命令行两种方式操作,目前 Snowflake
使用密钥对认证只支持命令行方式,命令行支持 linux,mac 和 windows 环境。
注意:命令行方式需要 java8 或以上版本
Grabit 可在此处下载:Download Grabit Tool 。
目录结构
下载之后是一个 grabit-x.x.x.zip 的文件,解压后文件层级为:
/grabit-x.x.x/
└── conf-template
├── snowflake-config-template.json #snowflake配置文件模板
├── ... #其他配置文件模板
└── grabit-x.x.x.jar #执行的jar程序
└── readme.md #Grabit说明文档
└── start.bat #winodws环境启动脚本
└── start.sh #linux和mac环境启动脚本
└── lib
├── ... #依赖的jar
启动命令(linux 或者 mac 环境)
./start.sh /f <path_to_config_file>
<path_to_config_file>:配置文件地址
例如:
./start.sh /f config.json
以上就是对 Grabit 使用 Snowflake 密钥对进行认证并获取 metadata 提交马哈鱼的介绍,Grabit 提交数据到马哈鱼之后,马哈鱼数据血缘分析器会对数据进行分析,然后在马哈鱼平台上查看分析结果。Grabit 还有很多其他的功能,会继续介绍其他功能。
参考
马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn
马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com