注:本文系从https://medium.com/neo4j/tap-into-hidden-connections-translating-your-relational-data-to-graph-d3a2591d4026翻译整理而来。
本文介绍新近推出的Neo4j ETL App,包括其安装、使用和功能特性。大纲如下:
- Neo4j ETL工具
- 添加Neo4j ETL应用程序
- 选择项目
- 检索RDBMS元数据
- Mapping.json中的数据
- 调整映射
- 导入数据
- 检查导入的数据
- 总结
Neo4j ETL工具 Neo4j ETL(Extract-Transform-Load)工具的构建使开发人员能够轻松地将关系数据加载到图数据库中。它包括3个简单的步骤来实现:
- 通过JDBC设置指定源关系数据库;
- 使用图形化的编辑工具建立数据模型映射;
- 运行生成的脚本将所有数据导入到Neo4j。
该工具很容易访问和使用。有两种方式与工具交互:
- 通过命令行,
- 通过Neo4j Desktop应用程序。 为了使用命令行,在GitHub上下载项目,并按照文档说明运行每个步骤: https://github.com/neo4j-contrib/neo4j-etl
本文将主要介绍如何在Neo4j Desktop中使用ETL工具。
添加Neo4j ETL应用程序 要在Neo4j Desktop中添加ETL,首先需要联系Neo4j以获取激活密钥,并添加到配置文件中。下面的屏幕截图显示了如何在Neo4j Desktop中添加激活密钥。
完成后,即可以访问ETL应用程序。现在,我们需要将它添加到图形应用程序中。
首先,进入Neo4j Desktop中的Projects菜单,选择/创建一个项目。然后,点击右侧菜单窗格第一个横幅下的“添加应用程序”。当弹出窗口显示可添加的应用程序时,通过单击“添加”按钮选择ETL应用程序。如下图所示:
好,一切就绪了!现在,点击ETL App图标,就可以运行这个工具了。
选择项目 Neo4j ETL App采用类似执行向导的方式,让ETL设计和运行的每一步都直观、简洁。第一步,是选择一个要运行ETL的项目。这将在应用程序的主屏幕上打开一个新窗口,如下所示。选择要在其中工作的项目,这将告诉应用程序Neo4j数据库的位置。
设置RDBMS连接 接下来,我们需要建立一个关系数据库连接。该工具允许使用支持JDBC驱动程序的大多数类型的关系数据库,包括MySQL,PostgreSQL,Oracle,Cassandra,DB2,SQL Server,Derby等。虽然MySQL和PostgreSQL数据库内置于该工具中,但通过指定驱动程序文件可以轻松设置所有其他数据库。
在这个例子中,我将使用加载了Northwind数据集的PostgreSQL关系数据库。如果需要安装此示例数据库和数据集,那么可以下载PostgreSQL、并运行从GitHub上获得的为Northwind数据集提供的加载脚本。链接如下: https://github.com/pthom/northwind_psql
要设置连接详细信息,首先单击左侧边栏(数据库)中的顶部图标,然后单击打开窗格中的RDBMS
选项,这将在窗口右侧显示JDBC Connection界面。
首先从“类型”下拉字段中选择数据库类型,其他一些字段将自动填充。在这个例子中,选择postgresql
选项。这里,使用默认端口和连接URL就可以了。
现在我们可以根据需要填写其他细节。在“连接名称”字段中输入任何你喜欢的名称。需要注意的是“数据库”字段必须与关系数据库中实际的名称相匹配。如果使用Postgres或MySQL以外的其他数据库,请确保选择相应的连接驱动程序。
注意:如果为关系数据库设置了用户名和密码,则必须在相应的字段中输入这些用户名和密码。但是,如果没有为关系数据库指定用户名和/或密码,则可以将其中一个或两个字段留空。 完成所有细节填写后,单击窗格底部的“ 测试并保存连接 ”按钮,这时应该会在顶部看到一个蓝色的消息栏,表示连接已成功保存。如果其中一个字段不正确或无法找到关系数据库,则会出现一条带有错误消息的红色条。
检索RDBMS元数据 好的,现在我们已经建立了关系数据库连接。接下来,选择左侧边栏中的第二个图标(导入),然后在打开的窗格中单击“导入数据”选项。这会在窗口右侧显示“检查元数据”面板。
要从关系图映射到图,我们从顶部列表中选择已加载的关系数据库连接,然后选择在底部列表中选择要写入的图形数据库。选中的数据库信息会出现在窗口右侧的FROM和TO文本中。完成后点击Start Mapping
按钮。
Mapping.json中的数据 输出会在窗口的底部显示。其中包括一些JSON文件。这是mapping.json基于源关系数据库的模式创建的文件。这是ETL过程的执行逻辑定义,因为如果决定在迁移中忽略特定的表或字段,则可以对此文件进行更改。
要查看该文件,打开Neo4j桌面窗口,转至当前项目,然后找到目标Neo4j数据库上,点击下面的“Manage”按钮。在本例中,它的名称为ETL_db。在打开i的面板上面点击“打开文件夹”按钮。
这里,应该可以看到一个postgresql_northwind_mapping.json文件(或类似命名的文件)。如果在进行下一步之前想做出任何更改,可以直接打开并编辑。这里,我我们对mapping.json不做任何修改、直接进入下一步。
调整映射 回到ETL应用程序窗口,单击右下角的“ 下一步 ”按钮,打开数据建模屏幕。可以移动屏幕右侧图表中的节点和关系,以便更好地查看它们中的每一个。
在这里,可以更改节点名称、关系、甚至属性(字段)名称和数据类型。例如,可以选择更适合的关系类型,将它们从通用名词更改为更具体的动词。本例中,将员工节点之间的关系从“ EMPLOYEES”改为“ REPORTS_TO”,因为员工可以向另一个员工(即经理)报告。
Neo4j ETL App会根据源数据库模式决定基本的数据映射,规则如下: a. 拥有1个外键的表会映射成节点和其上的关系; b. 拥有2个外键的表会被当做是关系表,映射成关系; c. 拥有多于2个外键的表会被当作中间表处理,映射成拥有多个关系的节点。
数据导入 一旦对建立的映射足够满意了,可以点击右下角的“ 下一步”按钮。这将打开最后一步的屏幕,即选择导入方式。有四个选项可以使用:
- Neo4j import命令行工具 - 适用大型数据集的快速、初始、批量导入,数据库必须脱机且本地运行,已有数据将被覆盖。
- Neo4j Shell - 基于Cypher的大型数据集导入,数据库必须脱机且本地运行。
- Cypher Shell - 创建并运行可编辑的Cypher脚本,数据库需要联机。
- 直接Cypher导入 - 创建可以编辑的Cypher脚本,数据库需要联机,在客户端通过Bolt协议连接数据库并导入数据。 所以,采用何种导入方法的关键是,Neo4j数据库是否正在运行/联机,以及是否要将数据添加到现有的图数据库中。
Neo4j Import 比Cypher导入要快得多,因为它使用底层数据库文件直接、批量导入程序来初始创建数据库。但是,如果无法关闭并更换数据库,那么Cypher导入选项是更加可行的方案。
最后,单击“导入数据 ”按钮,屏幕底部的输出会显示后台命令执行的状态。完成后,窗口顶部会出现蓝色的消息栏,表示导入已成功。
检查导入的数据 要验证加载的所有内容并开始使用Neo4j中的数据,我们可以查看数据模型并从Neo4j浏览器或连接到数据库的应用程序运行查询。
在这个例子中,我们回到Neo4j桌面窗口,进入到ETL_db数据库,然后点击’ 打开浏览器 `。在浏览器命令行上执行CALL db.schema()会你显示图形数据模型。
请注意,该模型不包含连接到Customer节点的Customer Demographics节点。这是因为所使用的Postgres数据集在客户人口统计学csv文件中没有任何数据。
接下来,你可以充分运用你的Cypher技能对数据库中的数据进行查询、更新和分析,在连接的数据集中收集价值和发现新的内在价值。下面的屏幕截图显示了关于客户、托运人、订单和产品的查询结果。
总结 ETL工具的使用将大大简化从关系数据库到图数据库进行数据迁移的开发和运行。目前,ETL App还处于早期版本,许多重要的ETL特性,例如对更加复杂的映射规则的支持、并行数据导出/导入的执行等都尚未实现。因此,现阶段更加适合于作为一个建模/开发工具,简化数据映射的过程、生成可客户化的ETL脚本。 对于复杂的项目,可以参考Pentaho 的Kettle ETL工具。
如需了解更多,或者希望试用ETL App,请发姓名和工作邮箱到:joshua.yu@neo4j.com。
您好,在尝试连接Oracle数据库时,报错内容:Connection failed. No suitable driver for the connection,请问这个是需要自己安装Java JDBC吗?
@graphway 老师,我在第二步JDBC CONNECTION 中,使用的是mysql,但显示Could not create connection to database server. Attempted reconnect 3 times. Giving up.但mysql中已经建立了相关数据库,用户名密码也都是正确的,但仍然连接不上,实在是想不出是什么原因。十分希望老师给予指点。
@graphway老师好,最近正在学习neo4j在服务器上部署,且能使用neo etl 工具,谢谢老师发个激活码,且能给neo4j etl在服务器上的使用方法教一下,邮箱:791518613@qq.com