Jailer:一款免费的数据库子集化和数据浏览工具
Jailer 是一款免费的数据库子集化和数据浏览工具,主要解决生产环境数据向开发/测试环境迁移时的完整性、效率与安全性问题。
数据库
Jailer 使用 JDBC 连接数据库,因此可以支持非常广泛的数据库产品。同时,它还针对以下主流数据库进行了特定扩展:PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server、Db2、SQLite、Sybase、Amazon Redshift、Firebird、Informix、H2、HyperSQL、Derby、Interbase、Exasol、SAP HANA、Vertica、Snowflake、ClickHouse。
数据浏览
Jailer 支持通过外键或用户自定义关系在表之间双向导航,直观展示数据关联路径,辅助用户理解复杂的数据库结构。
以上示例中,我们首先点击“Open Table”,选择“EMPLOYEE”数据表,显示员工表中的数据。然后通过员工表的“Related Rows | Children”选择“PROJECT_PARTICIPATION”,显示员工和项目的关系。接着继续通过这个关系表显示员工在项目中的角色“ROLE”以及项目的具体信息“PROJECT”。
子集化
数据库子集化(Subsetting)可以从生产数据库中提取引用完整的数据子集(例如仅抽取与特定业务线相关的数据),并且保持表间关联性,避免手动提取导致的外键断裂问题。
Jailer 支持导出多种格式:SQL(拓扑排序)、XML(分层结构)、JSON、YAML、DbUnit 数据集、Liquibase 等。导出完成后会显示每个表导出的行数和占比。
导出数据库子集时,还可以指定生成一个对应的数据删除脚本,实现归档并删除功能,在不破坏引用完整性的前提下优化生产数据库性能。
SQL控制台
SQL 控制台集成了代码补全、语法高亮、元数据可视化等功能,支持直接编辑并执行 SQL 语句,提升查询效率。
API
Jailer 提供了 API 接口,可以通过 Java 程序直接实现数据的导出和导入。例如,以下程序用于从 demo-scott 数据库中提取部分数据导入 demo-scott-subset 数据库,两者都是 H2 数据库:
public class APIExample {// JDBC connection pool sizeprivate static final int POOL_SIZE = 10;// Folder containing models and databasesprivate static final File baseFolder = new File(".");// The subsetterprivate static Subsetter subsetter = new Subsetter(new BasicDataSource("org.h2.Driver", "jdbc:h2:" + new File(baseFolder, "demo-db/demo-scott").getAbsolutePath(), "sa", "",POOL_SIZE,new File(baseFolder, "lib/h2-2.2.224.jar")),null,new File(baseFolder, "datamodel/Demo-Scott"),new File(baseFolder, "extractionmodel/Demo-Scott.jm"),ScriptFormat.SQL);// The importerprivate static Importer importer =new Importer(new BasicDataSource("org.h2.Driver", "jdbc:h2:" + new File(baseFolder, "demo-db/demo-scott-subset").getAbsolutePath(), "sa", "",POOL_SIZE,new File(baseFolder, "lib/h2-2.2.224.jar")));/*** Exports data related with employee "SCOTT"* and imports it into another database.*/public static void main(String[] args) throws SQLException, IOException {File exportScriptFile = Configuration.getInstance().createTempFile();subsetter.setUpsertOnly(true); // overwrite previous datasubsetter.execute("NAME='SCOTT'", exportScriptFile);importer.execute(exportScriptFile);exportScriptFile.delete();}
}
下载安装
Jailer 是一个基于 Java 的程序,支持 Windows、Linux、macOS 跨平台,下载程序托管在 SourceForge:
https://sourceforge.net/projects/jailer/files/
选择最新版本和对应操作系统的安装文件,安装完成后运行 Jailer.exe 或者 jailerGUI.sh 启动程序:
软件自带了两个示例,可以帮助我们快速了解相关功能。