Несколько операторов LOAD CSV в одном запросе Cypher - PullRequest
0 голосов
/ 09 февраля 2020

Попытка импортировать строки и создать узлы из разных файлов .csv в одном запросе шифра:

// User nodes
LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' AS profile_line
CREATE (user:User { userId: profile_line.User })

// Project nodes
LOAD CSV WITH HEADERS
FROM 'file:///project.csv' AS project_line
CREATE (project:Project { projectId: project_line.projectId })

// Image nodes
LOAD CSV WITH HEADERS
FROM 'file:///media.csv' AS image_line
CREATE (image:Image { imageId: '<imageId>' })

Выдает следующую ошибку:

"WITH требуется между CREATE и LOAD CSV (строка 9, столбец 1 (смещение: 211))" CREATE (project: Project {projectId: project_line.projectId}) "

Мне неясно, как должен быть построен оператор WITH.

1 Ответ

1 голос
/ 09 февраля 2020

Если вы используете браузер Neo4j, самый простой способ сделать это - просто разделить ваши операторы точками с запятой и включить «редактор запросов с несколькими утверждениями» (который также дает вам небольшой индикатор прогресса в качестве каждого оператора выполняется):

enter image description here

LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' as profile_line
CREATE (user: User { userId: profile_line.User });

LOAD CSV WITH HEADERS
FROM 'file:///project.csv' as project_line
CREATE (project: Project { projectId: project_line.projectId });

LOAD CSV WITH HEADERS
FROM 'file:///media.csv' as image_line
CREATE (image: Image { imageId: image_line.ImageId });

enter image description here

В противном случае все еще возможно сделай это. Нам нужен оператор WITH, который будет возвращать одну строку независимо от того, сколько узлов было создано предыдущим CREATE, поэтому подойдет любая функция агрегирования. Например:

LOAD CSV WITH HEADERS
FROM 'file:///profile.csv' as profile_line
CREATE (user: User { userId: profile_line.User })

WITH max(1) as dummy
LOAD CSV WITH HEADERS
FROM 'file:///project.csv' as project_line
CREATE (project: Project { projectId: project_line.projectId })

WITH max(1) as dummy
LOAD CSV WITH HEADERS
FROM 'file:///media.csv' as image_line
CREATE (image: Image { imageId: image_line.ImageId })
Added 9 labels, created 9 nodes, set 9 properties, completed after 17 ms.

Хотя я думаю, что это очень непонятно для будущего, и я бы не рекомендовал это.

...