精华 Neo4j ETL工具快速上手:简化从关系数据库到图数据库的数据迁移
发布于 6 年前 作者 graphway 17773 次浏览 最后一次编辑是 5 年前 来自 分享

注:本文系从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个简单的步骤来实现:

  1. 通过JDBC设置指定源关系数据库;
  2. 使用图形化的编辑工具建立数据模型映射;
  3. 运行生成的脚本将所有数据导入到Neo4j。

该工具很容易访问和使用。有两种方式与工具交互:

  1. 通过命令行,
  2. 通过Neo4j Desktop应用程序。 为了使用命令行,在GitHub上下载项目,并按照文档说明运行每个步骤: https://github.com/neo4j-contrib/neo4j-etl

本文将主要介绍如何在Neo4j Desktop中使用ETL工具。

添加Neo4j ETL应用程序 要在Neo4j Desktop中添加ETL,首先需要联系Neo4j以获取激活密钥,并添加到配置文件中。下面的屏幕截图显示了如何在Neo4j Desktop中添加激活密钥。 etl-1.png

完成后,即可以访问ETL应用程序。现在,我们需要将它添加到图形应用程序中。

首先,进入Neo4j Desktop中的Projects菜单,选择/创建一个项目。然后,点击右侧菜单窗格第一个横幅下的“添加应用程序”。当弹出窗口显示可添加的应用程序时,通过单击“添加”按钮选择ETL应用程序。如下图所示: etl-2.png

etl-3.png

好,一切就绪了!现在,点击ETL App图标,就可以运行这个工具了。 etl-4.png

选择项目 Neo4j ETL App采用类似执行向导的方式,让ETL设计和运行的每一步都直观、简洁。第一步,是选择一个要运行ETL的项目。这将在应用程序的主屏幕上打开一个新窗口,如下所示。选择要在其中工作的项目,这将告诉应用程序Neo4j数据库的位置。 etl-5.png

设置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界面。 etl-6.png

首先从“类型”下拉字段中选择数据库类型,其他一些字段将自动填充。在这个例子中,选择postgresql选项。这里,使用默认端口和连接URL就可以了。 etl-7.png

现在我们可以根据需要填写其他细节。在“连接名称”字段中输入任何你喜欢的名称。需要注意的是“数据库”字段必须与关系数据库中实际的名称相匹配。如果使用Postgres或MySQL以外的其他数据库,请确保选择相应的连接驱动程序。

注意:如果为关系数据库设置了用户名和密码,则必须在相应的字段中输入这些用户名和密码。但是,如果没有为关系数据库指定用户名和/或密码,则可以将其中一个或两个字段留空。 完成所有细节填写后,单击窗格底部的“ 测试并保存连接 ”按钮,这时应该会在顶部看到一个蓝色的消息栏,表示连接已成功保存。如果其中一个字段不正确或无法找到关系数据库,则会出现一条带有错误消息的红色条。

检索RDBMS元数据 好的,现在我们已经建立了关系数据库连接。接下来,选择左侧边栏中的第二个图标(导入),然后在打开的窗格中单击“导入数据”选项。这会在窗口右侧显示“检查元数据”面板。 etl-8.png

要从关系图映射到图,我们从顶部列表中选择已加载的关系数据库连接,然后选择在底部列表中选择要写入的图形数据库。选中的数据库信息会出现在窗口右侧的FROM和TO文本中。完成后点击Start Mapping按钮。 etl-9.png

Mapping.json中的数据 输出会在窗口的底部显示。其中包括一些JSON文件。这是mapping.json基于源关系数据库的模式创建的文件。这是ETL过程的执行逻辑定义,因为如果决定在迁移中忽略特定的表或字段,则可以对此文件进行更改。

要查看该文件,打开Neo4j桌面窗口,转至当前项目,然后找到目标Neo4j数据库上,点击下面的“Manage”按钮。在本例中,它的名称为ETL_db。在打开i的面板上面点击“打开文件夹”按钮。 etl-11.png

这里,应该可以看到一个postgresql_northwind_mapping.json文件(或类似命名的文件)。如果在进行下一步之前想做出任何更改,可以直接打开并编辑。这里,我我们对mapping.json不做任何修改、直接进入下一步。

调整映射 回到ETL应用程序窗口,单击右下角的“ 下一步 ”按钮,打开数据建模屏幕。可以移动屏幕右侧图表中的节点和关系,以便更好地查看它们中的每一个。

在这里,可以更改节点名称、关系、甚至属性(字段)名称和数据类型。例如,可以选择更适合的关系类型,将它们从通用名词更改为更具体的动词。本例中,将员工节点之间的关系从“ EMPLOYEES”改为“ REPORTS_TO”,因为员工可以向另一个员工(即经理)报告。 etl-12.png

Neo4j ETL App会根据源数据库模式决定基本的数据映射,规则如下: a. 拥有1个外键的表会映射成节点和其上的关系; b. 拥有2个外键的表会被当做是关系表,映射成关系; c. 拥有多于2个外键的表会被当作中间表处理,映射成拥有多个关系的节点。

数据导入 一旦对建立的映射足够满意了,可以点击右下角的“ 下一步”按钮。这将打开最后一步的屏幕,即选择导入方式。有四个选项可以使用:

  1. Neo4j import命令行工具 - 适用大型数据集的快速、初始、批量导入,数据库必须脱机且本地运行,已有数据将被覆盖。
  2. Neo4j Shell  - 基于Cypher的大型数据集导入,数据库必须脱机且本地运行。
  3. Cypher Shell  - 创建并运行可编辑的Cypher脚本,数据库需要联机。
  4. 直接Cypher导入  - 创建可以编辑的Cypher脚本,数据库需要联机,在客户端通过Bolt协议连接数据库并导入数据。 所以,采用何种导入方法的关键是,Neo4j数据库是否正在运行/联机,以及是否要将数据添加到现有的图数据库中。

Neo4j Import 比Cypher导入要快得多,因为它使用底层数据库文件直接、批量导入程序来初始创建数据库。但是,如果无法关闭并更换数据库,那么Cypher导入选项是更加可行的方案。

最后,单击“导入数据 ”按钮,屏幕底部的输出会显示后台命令执行的状态。完成后,窗口顶部会出现蓝色的消息栏,表示导入已成功。 etl-13.png

检查导入的数据 要验证加载的所有内容并开始使用Neo4j中的数据,我们可以查看数据模型并从Neo4j浏览器或连接到数据库的应用程序运行查询。

在这个例子中,我们回到Neo4j桌面窗口,进入到ETL_db数据库,然后点击’ 打开浏览器 `。在浏览器命令行上执行CALL db.schema()会你显示图形数据模型。 etl-14.png

请注意,该模型不包含连接到Customer节点的Customer Demographics节点。这是因为所使用的Postgres数据集在客户人口统计学csv文件中没有任何数据。

接下来,你可以充分运用你的Cypher技能对数据库中的数据进行查询、更新和分析,在连接的数据集中收集价值和发现新的内在价值。下面的屏幕截图显示了关于客户、托运人、订单和产品的查询结果。 etl-15.png

总结 ETL工具的使用将大大简化从关系数据库到图数据库进行数据迁移的开发和运行。目前,ETL App还处于早期版本,许多重要的ETL特性,例如对更加复杂的映射规则的支持、并行数据导出/导入的执行等都尚未实现。因此,现阶段更加适合于作为一个建模/开发工具,简化数据映射的过程、生成可客户化的ETL脚本。 对于复杂的项目,可以参考Pentaho 的Kettle ETL工具。

如需了解更多,或者希望试用ETL App,请发姓名和工作邮箱到:joshua.yu@neo4j.com。

64 回复

ETL APP是免费的吗

目前是。需要的话请发姓名和工作邮件给我,我回复激活码。谢谢!

@graphway 老师我需要一个激活码,请问您的邮箱是?我发邮件给你

有没有从hive导入neo4j的工具?

@feng1990liu 你们是本地hive还是阿里云的odps?

@atlantis hive服务器是腾讯云,与阿里云应该差不多

@feng1990liu 那咱俩的需求应该差不多,我们是阿里云hive

hive有JDBC驱动,所以也是可以的。

@graphway 最近一直在研究Neo4j,看到了这篇文章,需要一个激活码,请问您邮箱是?

您好,在尝试连接Oracle数据库时,报错内容:Connection failed. No suitable driver for the connection,请问这个是需要自己安装Java JDBC吗?

@graphway :老师,请发一个ETL APP的激活码给我:王峰 mountain.wang@outlook.com

请问一下大神, neo4j-etl的工具是不是不开源的?我在neo4j-etl github 上没有找到源码。

@graphway :老师,请发一个ETL APP的激活码给我:fcy@kuaihuoyun.com

@graphway :你好,请发一个ETL APP的激活码给我hmcheng@qq.com,谢谢

@graphway 老师您好,我是您腾讯课堂学院,麻烦您能否发一个ETL app 激活码 给我 29257771@qq.com 谢谢

你好,请发一个ETL APP的激活码给我329391@qq.com,谢谢;

@graphway 老师您好,我是alex,能否发一份激活码给到64748319@qq.com

@graphway 老师您好,我是dominic ,请问能否发一份激活码给我?这是我的邮箱first_eye@163.com

@graphway 老师,能麻烦你发个激活码到582080848@qq.com吗?

@graphway 老师,能麻烦你发个激活码到765362434@qq.com吗?

@graphway 老师,能麻烦你发个ETL APP的激活码到765362434@qq.com吗?

@graphway 老师,能麻烦你发个激活码到marquisthunder@gmail.com上吗?

@graphway 老师,能麻烦你发个ETL的激活码到13001214245@163.com吗,我即将在课堂展示neo4j,希望有更多震撼的东西能和同学们分享!

老师,能麻烦您发个激活码到754779987@qq.com上吗? 非常感谢

您好,老师,麻烦您发个激活码,邮箱:systemgc@126.com.衷心感谢。

您好,老师,麻烦您发个激活码,邮箱:xiaokun1108@126.com.感谢。

@graphway 老师,能麻烦你发个激活码到xup8888@163.com吗?

@graphway 老师,麻烦您发个激活码,邮箱:yanchangyou@qq.com

@graphway 老师,麻烦您发个激活码,邮箱:1083933702@qq.com

@graphway 老是,麻烦您发哥激活码,邮箱:786947270@qq.com

@graphway 你好,麻烦发一个激活码 邮箱:dmt312_2010@163.com

@graphway 你好,麻烦发一个激活码 邮箱:fish-5241@163.com

@graphway 你好,麻烦发一个激活码 邮箱:674175742@qq.com

@graphway 您好,麻烦发一个激活码,谢谢,邮箱:abert.zhao@zoom.us

@graphway 庞老师好,请发激活码试用,谢谢,邮箱:akzll@163.com

@graphway 庞老师好,请发激活码试用,谢谢,邮箱:772445469@qq.com

@graphway 庞老师好,请发激活码试用,谢谢,邮箱:2590667609@qq.com

@goodwater @wangtuanjie @akzll 这是Neo4j官方技术支持 俞方桦 老师,不是我(庞国明) :)

@graphway 老师您好,可以发一个激活码吗,谢谢。申豪杰,邮箱:2336502545@qq.com

@graphway 老师可以发一个激活码吗:15907569756@139.com

老师,请问,用etl导入的数据,中文出现乱码,这个要怎么处理

@graphway 老师您好,可以发一个激活码吗:nbullet@126.com

庞老师好,请发激活码试用,谢谢,邮箱:1362728057@139.com

请问:ETL tool 在 NEO4J server / browser 中如何安装激活?

老师您好,可以发一个激活码吗:zong65432@163.com

庞老师,目前正在使用Neo4j,帮忙发一个激活码,非常感谢。邮箱:849114618@163.com

@graphway 老师,我在第二步JDBC CONNECTION 中,使用的是mysql,但显示Could not create connection to database server. Attempted reconnect 3 times. Giving up.但mysql中已经建立了相关数据库,用户名密码也都是正确的,但仍然连接不上,实在是想不出是什么原因。十分希望老师给予指点。

@graphway 老师好,可以发一个激活码吗: jiadianduo@lowrisk.com.cn

老师好,刚开始学习Neo4j,能帮忙发一个激活码吗,非常感谢 邮箱 63406227@qq.com

@graphway 老师好,可以发一个激活码吗? 邮箱:1025251990@qq.com

@graphway 老师好,可以发一个激活码吗 非常感谢 邮箱 zhf361181840@163.com

@graphway 老师您好,能麻烦您发一个激活码吗??? 非常感谢 邮箱 924844511@qq.com

老师您好,能麻烦您发一个激活码吗??? 非常感谢 邮箱 1505127742@qq.com

老师,您好,最近正在学习这个,麻烦您发一个激活码! 邮箱 787749492@qq.com,非常感谢!

老师,您好,最近正在学习这个,麻烦您发一个激活码! 邮箱 502867670@qq.com,非常感谢!

老师,您好,在学习oracle导入到neo4j,麻烦您发一个激活码,邮箱www.shixingyun.cn@qq.com,非常感谢!

老师,您好。请问使用etl tool连接mysql 导入中文字段为乱码的情况应该如何解决那?mysql 数据库已设置为utf8

@graphway 老师好,可以发一个激活码吗: 18758251854@139.com

@graphway老师好,最近正在学习neo4j在服务器上部署,且能使用neo etl 工具,谢谢老师发个激活码,且能给neo4j etl在服务器上的使用方法教一下,邮箱:791518613@qq.com

@wudi92 我发现用etl命令行导入中文乱码,用桌面工具不乱码,官网文档中没有关于encoding的参数

@graphway 庞老师好,请发激活码试用,谢谢,邮箱:zhushao@nestciao.com

@richard 这是俞方桦老师的帖子

回到顶部