将mysql数据迁移到neo4j数据库

时间:2014-07-22 08:44:28

标签: neo4j

我想将数据从Mysql迁移到neo4j。我在64位Windows机器上使用Neo4j 2.1.2 64位安装程序。 我在链接http://maxdemarzi.com/2012/02/28/batch-importer-part-2/#more-660中关注了博客,其中很好地解释了从postgreSQL迁移数据。

即使我采用相同的示例并在mysql中创建了相同的表。在mysql中创建节点和关系表后,我将它们导出为csv文件。这样我就可以在batch import命令中使用它们。 这里我的所有字段都是varchar,而row_number()fiels也是一个varchar字段。

我使用下面的命令将mysql的关系表导出到myrels.csv文件中(对于节点表也一样):

SELECT  *
INTO OUTFILE 'D:/Tech_Explorations/BigData_Related/Neo4j/mqytoneo4j/myrels.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
FROM
(
SELECT 'start' AS `start`, 'end' AS `end`,'type' AS `type`,'status' AS `status`
UNION ALL

SELECT `start`, `end`,`type`,`status`
FROM `vouch_rels`
) `sub_query`;

在查询下方用于加载mynodes.csv和myrels.csv o neo4j:

java -server -Xms1024M -jar D:/Neo4j/target/batch-import-jar-with-dependencies.jar    
neo4j/data/graph.db mynodes.csv myrels.csv

当我执行上面的批量导入查询时,它给出了一个错误说

Exception in thread "main" java.lang.NumberFormatException: For input string: "1
,"1","python,confirmed"

其中“1”,“1”,“python,确认”是myrels.csv中的行。

上述错误可能是由于某些数据类型或csv文件问题,但我无法弄明白。甚至我尝试在从mysql加载到csv文件时更改不同的csv加载选项。但仍然得到同样的错误。

2 个答案:

答案 0 :(得分:3)

MySQL到Neo4j的迁移不是一个简单的导出加载问题。 Neo4j需要清楚属性图,并且应该与MySQL模式一致。根据我的知识,无法从MySQL模式自动生成Neo4j属性图。在明确定义了2个模式之后,您可以使用任何编程语言编写自己的迁移。

进行迁移的python方法

py2neo是一个Python库,可以轻松编写迁移,因为它提供了大量有用的功能,运行密码查询的选项,事务支持等。

我在项目中使用py2neo将大约100MB的数据从MySQL迁移到Neo4j。 Here是示例代码以供参考和文档。未提供数据,但提供了MySQL和Neo4j属性图的模式。

P.S:我可能会试图解决你的问题。但我写了这个答案,因为它可能会帮助那些希望使用Python解决MySQL到Neo4j迁移问题的读者。

答案 1 :(得分:0)

我建议查看LOAD CSV Cypher选项。 Neo4j website上有详细的文档。

基本上,您可以使用如下的Cypher查询来导入数据。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/path/to/your.csv" AS csvLine
MATCH (person:Person { id: toInt(csvLine.personId)}),(movie:Movie { id: toInt(csvLine.movieId)})
CREATE (person)-[:PLAYED { role: csvLine.role }]->(movie)

如果您希望继续使用Java批量导入工具,我相信您的文件需要以制表符分隔,而不是以逗号分隔。