У меня возникли проблемы с импортом большого объема данных в экземпляр Neo4j с использованием команды Cypher LOAD CSV
. Я пытаюсь загрузить примерно 253 тыс. Пользовательских записей с уникальным user_id. Мой первый шаг, чтобы добавить ограничение уникальности на TjE этикетки, чтобы убедиться, что пользователь был только быть запущен один разNeo4j Cypher Load CSV Failure on Unique Constraint
CREATE CONSTRAINT ON (b:User) ASSERT b.user_id IS UNIQUE;
Затем я попытался запустить НАГРУЗКИ CSV с периодическими фиксациями, чтобы вытащить эти данные.
Это запрос не удался, так что я пытался объединить записи пользователя перед установкой
USING PERIODIC COMMIT 1000
load csv with headers from "file:///home/data/uk_users.csv" as line
match (t:Territory{territory:"uk"})
merge (p:User {user_id:toInt(line.user_id)})-[:REGISTERED_TO]->(t)
set p.created=toInt(line.created), p.completed=toInt(line.completed);
Изменения периодической фиксации значения не имеет никакого значения, возвращается та же ошибка.
USING PERIODIC COMMIT 1000
load csv with headers from "file:///home/data/uk_buddies.csv" as line
match (t:Territory{territory:"uk"})
merge (p:User {user_id:toInt(line.user_id), created:toInt(line.created), completed:toInt(line.completed)})-[:REGISTERED_TO]->(t);
Я получаю следующее сообщение об ошибке:
LoadCsvStatusWrapCypherException: Node 9752 already exists with label Person and property "hpcm_uk_buddy_id"=[2446] (Failure when processing URL 'file:/home/data/uk_buddies.csv' on line 253316 (which is the last row in the file). Possibly the last row committed during import is line 253299. Note that this information might not be accurate.)
цифры, кажется, совпадают примерно, файл CSV содержит 253315 записей в общей сложности. Периодическая фиксация, похоже, тоже не вступила в силу, количество узлов возвращает только 5446 строк.
neo4j-sh (?)$ match (n) return count(n);
+----------+
| count(n) |
+----------+
| 5446 |
+----------+
1 row
768 ms
Я могу понять количество неправильных узлов, если этот идентификатор составляет всего около 5000 строк в CSV-файле. Но есть ли какой-либо метод или команда, которую я могу использовать для успеха этого импорта?
Что-то еще, чтобы принять во внимание, может быть слияние по нескольким свойствам. Я не знаю, изменилось ли это в 2.2, но, по крайней мере, в предыдущих версиях это ** не ** использовало бы индексы схемы. Для того, чтобы использовать индексы, он должен MATCH только на одном свойстве, то есть MERGE (p: User {user_id: toInt (line.user_id) SET [дополнительные свойства ...]. – albertoperdomo
Спасибо @FrobberOfBits, что делает много смысл. – user3132965
@albertoperdomo Спасибо, это был мой следующий вопрос. Это не было проблемой для этого импорта, но я вижу, что проблема возникает в будущем (скажем, если бы я добавил обновленную временную метку). – user3132965