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-файле или нет