图数据库初探 |
您所在的位置:网站首页 › mysql导入数据库 › 图数据库初探 |
文章目录
1. 新建一个图数据库并设置为启动项1.1 Desktop操作1.2 命令行操作
2. 将MySQL数据库中的数据导入2.1 现有的MySQL中的关系数据库2.2 使用Desktop中的ETL Tool进行导入2.3 关系数据库转为图数据库的规则
3. 问题解决1. Connection failed. SQL state:08001,message:Could not create connection to database server2. Mapping Error3. 确认可导入的数据格式4. Importing Data in Neo4j through ETL Tool failed due to error warning4.1 💢💢(无效)修改文件中的路径斜杠4.2 💢💢(无效)修改java版本4.3 💢💢研究neo4j-admin-import-params文件4.4 ✅✅修改,然后直接执行中断错误的命令4.5 结论✅✅
5. 用一下自己导入的这个数据库5.1. 验证数据量5.2. 中文乱码5.3. 简单使用
参考
1. 新建一个图数据库并设置为启动项
1.1 Desktop操作
由于我使用的是桌面版(Desktop),所以直接在界面上点点就可以了 必须先启动自己在Project创建的DBMS,然后才会显示当前这个DBMS下的数据库,同时才有进行其他操作的空间 点击Create database,比如我就创建了一个叫mysql的数据库,作为存放从mysql转过来的数据 然后需要将新建的这个数据库设置为(default)默认启动数据库,然后才可以使用命令行工具——neo4j bloom(浏览器UI命令行),然后才能做别的事情 点击这个DBMS的Settings, 把默认数据库那项,改成自己刚刚新建的那个数据库名称,前面的注释去掉。 改好之后,点击Apply,然后会提示重启这个DBMS,就重启等着好了 然后可以看到default这个关键词就跑到刚刚新创建的mysql数据库后面了,虽然右侧mysql数据库没有任何介绍,是个空壳子数据库。 另外,指定了mysql是default之后,启动neo4j的browser命令行,其命令行前缀就是这个数据库 参考: Managing Multiple Databases in Neo4j(在neo4j中管理多个数据库) 其实也可以不在启动的时候就指定数据库的。 逐步输入以下命令: 查看当前这个DBMS下有多少数据库,使用:dbs。可以看到,只有两个默认的,一个就是system,另一个就是neo4j(默认的) 创建一个新的数据库,使用create database mysql,再看看,:dbs的输出,其实就可以看到 Creating a new database (Enterprise only),创建数据集这个功能只有企业版才有。。桌面版其实有一部分功能是企业版的,所以桌面版只有一年的试用期。所以正常来说,一个DBMS只有一个默认数据库neo4j可以使用。。。 切换到新建的数据库进行使用,use mysql,提示已经更新了Neo4j的DBMS的数据库已经更新了,从这个语句之后的查询语句都是针对mysql数据库进行的了。(命令行前缀已经变成mysql了) 感谢:基于知识图谱的问答系统(KBQA),本示例使用的数据库来自这位大公无私的大神博主。数据库如下: 参考:https://neo4j.com/developer/neo4j-etl/以及https://neo4j.com/labs/etl-tool/1.5.0/ neo4j-ETL 这个工具就是neo4j提供的专门用于数据的工具 启动Neo4j ETL Tool(这个东西和DBMS的启动无关。。。这几个工具都可以单独启动) 选择一个Project(注意,这个还是企业版的功能,桌面版只是有部分企业版功能,而且桌面版只可以用一年。。。但是只要数据库构建好了,这个工具其实就可以去用社区版维护一个数据库就好了。。。😶😶😶) 另外,导入时是不能指定导入到neo4j中的哪个数据库中,只能是选择DBMS,然后新建一个图数据库导进去。 点击上面的ADD CONNECTION,填写一些必要的信息。 红框部分是默认的配置,Database名称改了之后,下面URL中也会自动修改的。如果不了解JDBC的话(这是java连接数据库的方式,可以参考菜鸟教程-Java MySQL 连接)。用户密码就是mysql的用户密码,一般是root用户,密码自己好好想想,想不起来就只能重置,重置参考mysql官方文档,或者是类似外国的菜鸟教程:How to Reset MySQL Root Password in Windows using cmd?Host和Port就是安装时候显示的,一般mysql的端口就是3306![]() 点击TEST AND SAVE CONNECTION,报错 如果测试连接正确,就会看到下面这个提示,创建连接成功。完整的提示信息为:Connection mysql2neo4j saved. Connection successful. Catalog: poem_kbqa_demo, Schema: null,这里有一点要注意,Schema是NULL 有了mysql数据库和neo4j数据库之间的连接,接下来其实就可以开始映射了,START MAPPING 只是因为我没有选择刚刚创建的那个mysql2neo4j的连接(那个框框,从浅灰变成深灰,就是选中了),另外,None变成mysql2neo4j。两个框都要选,官方文档Choose the ‘From’ and ‘To’ Databases for Import图就很明确,认真看!!!! 有兴趣的可以看看logs,或者复制下来,防止之后出错。。 💢💢💢乌龙 错误解决详情参见 3.问题解决->2.XXXX部分。 映射成功之后,点击NEXT,就会看到从mysql中导入的表了。 就先只映射节点好了 这里我导入的时候,Import Mode默认只有一种选择,Bulk Import 关于导入的图数据库名称,要么使用默认的,要么自己指定一个名字。 上一步报错,参考 3. 问题解决中->4. Importing Data in Neo4j through ETL Tool failed due to error warning。 另外,其实文档中也提示了,如果这步出错,可以使用命令行: 参考:Review data model transformation and make adjustments ,翻译大意如下: 查看数据模型转换并进行调整 这里实际上是将关系数据转换为图形数据的地方,使用三个规则将关系数据库转换为图形数据库。 带有外键的表被视为连接并作为具有关系的节点导入 对于Person表来说,其主键是person_id,其包含一个属性,address_id,这个属性刚好是Address表的主键,所以对于Person表来说,address_id就是外键。。![]() ![]() ![]()
感谢:ETL mysql Connection failed. SQL state 08001. How to find my JDBC driver? 解决方法就是,在上面的Connection URL链接中加入:&serverTimezone=UTC(直接复制到最后面就可以。) 给的经验就是,可以尝试先用其他的工具链接一下,看看使用这样的url链接会报啥错,这个neo4j ETL工具不给具体的错误信息,就很恶心(但是这个错误信息是mysql端的,它确实也获取不到。。只能返回mysql给返回的信息,无解🤐🤐🤐)。 其实这个问题,和CSDN博客:idea连接MySQL数据库报错:[08001] Could not create connection to database server. Attempted reconnect 3 times是一样的,都是时区设置问题 2. Mapping Error
最关键的一句, There is no suitable driver for the connection URL。我以为是缺少驱动。。 但是在:Neo4j ETL Docs/Neo4j ETL User Guide中,有一句很关键的话: The drivers for MySQL and PostgreSQL are bundled with the Neo4j-ETL tool. 意思就是,Neo4j-ETL工具里默认已经集成了MySQL和PostgreSQL的驱动了,所以不是驱动的问题。
💢💢💢💢都是乌龙 参考: Neo4j: 迁移MySQL的数据到Neo4j和菜鸟教程-Java MySQL 连接, 如果要使用JDBC连接mysql,第一件事就是下载JDBC驱动。把mysql-connector-java-8.0.11.jar复制到Neo4j安装目录中的plugins子目录下,重启Neo4jcp mysql-connector-java-8.0.11.jar $NEO4J_INSTALL_PATH/plugins不过我这个是neo4j desktop版本。。。 第一步,下载那个jdbc driver 这个JDBC驱动似乎和MySQL版本有点关系。。可以在命令行中输入mysql --version,可以看到,自己的mysql版本号,挺新的。mysql5.0以上就直接下最新版本的驱动就可以。 感谢 Neo4j: 迁移MySQL的数据到Neo4j中提供的下载链接 直接把上面的版本号改成自己想要的就可以,类似:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.27.zip 如果使用下面这个网页下载(集成下载,一次把mysql所有的东西都下下来)。。还要注册登录,注意避坑 解压完之后有很多文件,只需要jar包就行,其他不用管 那个博主用的是neo4j社区版本,直接放在neo4j安装目录下的plugins插件目录下,我找了一下,桌面版没有。。。 参考: Stack Overflow:No suitable driver found for jdbc Neo4j有直接包含了jdbc依赖的neo4j包,来自于neo4j github issue-Getting No suitable driver found for jdbc:neo4j://localhost:7474/ #36,但是对解决我的问题没啥用。 CSDN博客: neo4j Caused by:java.sql.SQLException:No suitable driver found for jdbc:neo4j:http:/127.0.0.1:7474/ 或neo4j官方社区:Connecting to neo4j using java 3. 确认可导入的数据格式在mapping之后,发现自己的这个mysql数据集导入之后,只有节点,没有关系(边)。 查看示例数据库,NorthWind的形式,github地址:https://github.com/pthom/northwind_psql参考2.4 关系数据库转为图数据库的规则对于我目前的数据来说,其实只要把代表关系的那两个表,设置对应的外键即可。 在navicat里点点就可以了,设计表,加一下外键。 但是mapping的时候报错了。。。所以neo4j转换的时候,不接受mysql一个表中一个属性既是主键,又是外键。。所以还是改改。 记录一下用到的sql语句(记得要加分号。。。) # 查询某个表中的约束 SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where table_name="poem";
完整的错误信息: COMMAND: java -cp "C:\shaiic_work\neo4j_data\graphApps\_global\neo4j-etl-ui/dist/neo4j-etl.jar" org.neo4j.etl.NeoIntegrationCli export --mapping-file "C:\Users\HUANGS~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json" --destination "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e/data/databases/graph.db/" --import-tool "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e/bin" --rdbms:password "XX" --rdbms:user "XXXX" --rdbms:url "jdbc:mysql://localhost:3306/poem_kbqa_demo?autoReconnect=true&useSSL=false&useCursorFetch=true&allowPublicKeyRetrieval=true&serverTimezone=UTC" --csv-directory "C:\Users\HUANGS~1\AppData\Local\Temp" --options-file "C:\Users\HUANGS~1\AppData\Local\Temp/import-tool-options.json" --using "bulk:neo4j-import" --neo4j:url "bolt://localhost:7687" --neo4j:user "XXX" --neo4j:password "XXX" --neo4j:db-auto-creation --force - Reading options from file C:\Users\HUANGS~1\AppData\Local\Temp\import-tool-options.json. - Reading metadata mapping from file: C:\Users\HUANGS~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json - Running ETL on Neo4j 4.3.5 - ENTERPRISE - Exporting from RDBMS to CSV... - CSV directory: C:\Users\yourname~1\AppData\Local\Temp\csv-002 - Writing CSV headers for node NODE_poemkbqademo.poem_629d5d8a-fe19-490a-8c36-cff14a7c8e25 - Writing CSV headers for node NODE_poemkbqademo.poet_af4dd1cb-83c9-4146-ad07-47c45a6a0d39 - Writing CSV headers for node NODE_poemkbqademo.verse_40715f90-ac78-4a5e-8ff0-e76a6caa2918 Export time: 0.278 (s) - Creating Neo4j store from CSV... - Direct driver instance 1765900922 created for server address localhost:7687 Unable to connect to Neo4j due to the following exception: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it. - Importing data into Neo4j - Command failed due to error (CommandFailedException: Command failed [Command: 'C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\bin\neo4j-admin.bat @C:\Users\HUANGS~1\AppData\Local\Temp\csv-002\neo4j-admin-import-params', CommandResult { ExitValue: 2, Stdout: 'Selecting JVM - Version:11.0.8, Name:OpenJDK 64-Bit Server VM, Vendor:Azul Systems, Inc.', Stderr: 'Invalid value for option '--report-file': cannot convert 'C:shaiic_work eo4j_data elate-datadbmssdbms-54e8721d-3337-412a-8b54-d6ccd03b564eimportimport.report' to interface java.nio.file.Path (java.nio.file.InvalidPathException: Illegal char at index 13: C:shaiic_work eo4j_data elate-datadbmssdbms-54e8721d-3337-412a-8b54-d6ccd03b564eimportimport.report)仔细看上面的路径,问题很明显,由于转义符存在,所以真正执行的时候,路径错误。 类似的问题也有:Neo4j Desktop Can’t export database。可能还是推出时间不够长,很多功能还没有被验证过,所以这个bug还没修。 4.1 💢💢(无效)修改文件中的路径斜杠查看执行ETL前读取的两个配置文件的内容,分别是: C:\Users\yourname~1\AppData\Local\Temp\import-tool-options.json.{"multiline-fields":"true"} C:\Users\yourname~1\AppData\Local\Temp/mysql_poem_kbqa_demo_poem_kbqa_demo_mapping.json。这里面主要是一些转换模式,转过来neo4j图数据库的节点和边的定义出错那一步的上一步是: Creating Neo4j store from CSV...,在对应的csv2文件夹中,有一个文件:neo4j-admin-import-params,其内容是:import --report-file "C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\import\import.report" --nodes "XXXXa6caa2918.csv" --delimiter , --array-delimiter ; --id-type STRING --ignore-empty-strings true --trim-strings true --multiline-fields true 所以对这里面的路径进行修改,全部改成/这种斜杠。无效,看来还是要改执行的命令。
即便在命令后面加上--debug,输出的错误信息其实都差不多。 4.2 💢💢(无效)修改java版本 警告: * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j Server. * Please see https://neo4j.com/docs/ for Neo4j installation instructions.', Stderr: 'Invoke-Neo4jAdmin : This instance of Java is not supported参考: Please help me install Neo4j Community, Java 11 Doesn’t Seem to Be Properly Working . .根据官方文档:System requirements 另外,根据:Use Java Runtime 11 with Neo4J 3.5.x neo4j从3.x版本到4.x版本最显著的一个区别就是,前者对应java jdk8,后者对应jdk 11。 这个文件是每次执行的时候现场生成的,所以改没有用。 找到执行的命令, C:\Users\HUANGS~1\AppData\Local\Temp\csv-010\neo4j-admin-import-params把这个文件里,文件路径的斜杠,都换成/这个。 再执行: C:\shaiic_work\neo4j_data\relate-data\dbmss\dbms-54e8721d-3337-412a-8b54-d6ccd03b564e\bin\neo4j-admin.bat @C:\Users\HUANGS~1\AppData\Local\Temp\csv-010\neo4j-admin-import-params在这里中断了,就直接改后面那个文件的斜杠,直接执行。然后就对了。。 综上,不建议使用desktop版本,也不建议在windows上使用neo4j。 如果是想使用desktop的,可以先使用server版本的,熟悉一下基本的命令和操作这样当desktop版本报错的时候,起码不至于慌张,而且有迹可循。另外,可以从中看出neo4j的导入逻辑 从上面的输出信息其实可以看出来,neo4j从mysql中提取文件的时候,其实还是先把RDBMS数据转为csv文件,然后再以csv文件的形式导入。 弄完了,回到界面,就可以看到: 验证一下数量 MATCH (p:Poem) RETURN p # 可以看一下图的样子(默认看300个) # 另外,也可以直接统计数量 MATCH (p:Verse) RETURN count(p)
怀疑是因为mysql中Verse(诗句),内容有重复的,去mysql里看看(其实都不用检索,肉眼都能看出来。。这个数据库质量真的不高!)
然后瞥了一眼旁边的介绍。。就很奇怪,有10148行,但是id递增只有9988(从1开始的)???但是拉到最后,最后一个序号是9987.。。。。就很迷??💢💢💢 参考: neo4j etl工具导入中文数据出现乱码解决方案✅✅ neo4j导入中文的csv文件,出现乱码 desktop转换的csv文件一般存放位置:C:\Users\huangshan\AppData\Local\Temp\csv-010\poem_kbqa_demo把mysql转成的csv文件格式编码重新搞一下就可以了,但是不能再重新使用上面的导入了,要重新搞一个数据库才可以导入。算了,垃圾。不要用桌面版!!!!直接用命令行!!!!不要用windows,用linux!!!! 5.3. 简单使用参考:Managing Multiple Databases in Neo4j 查看现有的数据库:show databases切换到某个指定的数据库::use neo4j查看当前数据库的schema,使用CALL db.schema.visualization()![]() Data Migration between MySQL and Neo4j Database Integration APOC 库增加了与其他数据库集成的支持,包括关系数据库(通过 JDBC)、MongoDB、Elastic 和 Couchbase。 它还支持从 LDAP 目录导入数据并针对其他 Neo4j 数据库执行查询。 Tutorial: Import Relational Data Into Neo4jMySQL迁移到Neo4j几种方法及注意事项 github博客:From SQL to Neo4j: Northwind |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |