Миграция данных mysql в базу данных neo4j

Я хотел перенести данные из Mysql в neo4j. Я использую 64-разрядный установщик Neo4j 2.1.2 на 64-битной машине Windows. Я следил за блогами по ссылке http://maxdemarzi.com/2012/02/28/batch-importer-part-2/#more-660 где хорошо переносятся данные из postgreSQL.

Даже я взял тот же пример и создал таблицы sames в mysql. После создания узлов и таблиц отношений в mysql я экспортировал их как файл csv. Поэтому я могу использовать их в команде batch import. Здесь все мои поля - varchar, а row_number() - также поле 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, confirm " - строка в myrels.csv.

Вышеприведенная ошибка может быть вызвана некоторыми проблемами типа данных или csv, но я не могу это понять. Даже я попытался изменить различные параметры загрузки csv при загрузке из mysql в файл csv. Но все равно такая же ошибка.

2 ответа

Переход от MySQL к Neo4j не является простой проблемой экспорта-нагрузки. График свойств должен быть ясен для Neo4j и должен соответствовать схеме MySQL. Насколько мне известно, нет возможности автоматически генерировать график свойств Neo4j из схемы MySQL. После того, как 2 схемы хорошо определены, вы можете написать свои собственные миграции на любом языке программирования.

Путь python для миграции

py2neo - это библиотека Python, которая позволяет легко переносить миграции, поскольку она предоставляет массу полезных функций, возможность запуска запросов cypher, поддержку транзакций и т.д.

Я использовал py2neo в проекте для переноса около 100 МБ данных из MySQL в Neo4j. Вот пример кода для справки, а также документация. Данные не предоставляются, но дается схема графика свойств MySQL и Neo4j.

PS: Я, возможно, отвлекся от попытки решить вашу проблему. Но я написал этот ответ, поскольку это может помочь читателям, которые хотят решить проблему миграции MySQL в Neo4j, используя Python.


Я бы предложил посмотреть опцию LOAD CSV Cypher. На сайте Neo4j есть подробные документы.

В принципе, вы можете использовать запрос 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, я считаю, что ваш файл должен быть разделен на табуляции, а не на запятую.

licensed under cc by-sa 3.0 with attribution.