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 数据库的角色,可选。
- hostname
-
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
本文介绍了如何使用Grabit工具通过Snowflake的密钥对认证来获取数据库的元数据和历史SQL,以进行数据血缘分析。Grabit支持从多种数据库收集数据,特别强调了在Snowflake中配置密钥对认证和权限角色的步骤,以及如何设置Grabit的配置文件来连接和上传数据到SQLFlow进行血缘关系分析。
1001

被折叠的 条评论
为什么被折叠?



