Читайте CSV в Neo4j, создавая один узел на столбец и отношения - PullRequest
0 голосов
/ 15 марта 2020

Я застрял в команде в Neo4j (я новичок ie), чтобы создать базу данных на основе CSV, например:

Страна, Имя1, Имя2, Имя3, Влияние Франция, Джон Пит, Джо sh 2 Италия, Пит, Bepe, Хуан, 3 США, Jo sh, Хуан, Пит, 1 Испания, Хуан, Джон ,, 2

Когда я пытаюсь создать один узел на человека (NameX), устанавливая отношения между столбцами имен, добавляя теги Влияние и Страна, происходит сбой, поскольку есть пустые имена.

Как может достичь этого?

Спасибо

ОБНОВЛЕНИЕ:

LOAD CSV WITH HEADERS FROM 'file:///diag.csv' AS row FIELDTERMINATOR ';' 
MERGE (c:Country{name:row.Country})
WITH CASE row.name1 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name1] END as 
name1List ,c
WITH CASE row.name2 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name2] END as 
name2List ,c
WITH CASE row.name3 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name3] END as 
name3List ,c
FOREACH (x IN name1List | MERGE (n:Node{name : x} ) 
  MERGE (n)-[:REL_TYPE]->(c)
)
FOREACH (x IN name2List | MERGE (n:Node{name : x} ) 
  MERGE (n)-[:REL_TYPE]->(c)
)
FOREACH (x IN name3List | MERGE (n:Node{name : x} ) 
  MERGE (n)-[:REL_TYPE]->(c)
)
RETURN  SUM(1) 

Получение ошибки:

Переменная row не определена (строка 4, столбец 11 (смещение: 209)) "WITH CASE row.name2 КОГДА NULL THEN [] WHEN 'THEN [] ELSE [row.name2] END as> name2List, c"

Ответы [ 2 ]

0 голосов
/ 16 марта 2020
LOAD CSV WITH HEADERS FROM 'file:///diag.csv' AS row FIELDTERMINATOR ';' MERGE (c:Country{name:row.Country}) 
WITH CASE row.name1 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name1] END as name1List ,
CASE row.name2 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name2] END as name2List ,
CASE row.name3 WHEN NULL THEN [] WHEN '' THEN [] ELSE [row.name3] END as name3List ,c,row
FOREACH (x IN name1List | MERGE (n:Node{name : x} ) MERGE (n)-[:REL_TYPE]->(c) )
FOREACH (x IN name2List | MERGE (n:Node{name : x} ) MERGE (n)-[:REL_TYPE]->(c) ) 
FOREACH (x IN name3List | MERGE (n:Node{name : x} ) MERGE (n)-[:REL_TYPE]->(c) ) RETURN SUM(1)  

здесь, с помощью выражения 'case' для cypher, мы создаем либо пустой список, когда он нулевой, либо пустой, либо список с одним значением, т.е. (row.name3). После проверки регистра мы можем использовать это список для итерации и создания узла со свойством name3. поэтому, когда он равен нулю или пуст, вы повторяете ноль раз, поэтому вы не получите ошибку. Наконец, sum (1) даст вам количество обработанных вами строк. Таким образом, вы можете перепроверить, обработали ли вы все строки в CSV-файле или нет

0 голосов
/ 15 марта 2020

Последняя строка имеет пустое поле Name3. Попробуйте добавить Имя3 в последнюю строку в вашем наборе данных.

Испания, Хуан, Джон, {пусто - заполните это}, 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...