2017-10-24 2 views
1

이것은 매우 쉬운 작업인데도 고심하고 있습니다. 그래프 데이터베이스와 Neo4j에 능숙한 모든 사람들에게 정말 도움이되어 주셔서 감사합니다. CSV 파일에 NULL 값이있는이 MERGE 절을 파악할 수 없습니다. 나는 팀과 같은 일부 필드를 볼 수 있고 객실이 null 값이Neo4j에서 null 값을 사용하여 CSV 파일 가져 오기

LOAD CSV WITH HEADERS FROM 'file:///EXAMPLE.csv' AS row WITH row RETURN row 

을 실행할 때

Example.csv 파일


Name,Lastname,Team,Room 

AAAA,BBBB,CCCC,1111 

DDDD,EEEE,FFFF,2222 

GGGG,HHHH,,3333 

IIII,JJJJ,KKKK, 

LLLL,MMMM,CCCC,1111 

NNNN,OOOO,,2222 

가 포함되어 있습니다. Employees, Team 및 Room에 대한 노드를 만들고 싶습니다. 여기에 지금까지 작성한 코드가 있습니다.

CREATE CONSTRAINT ON (t:Team) ASSERT t.name IS UNIQUE; 

CREATE CONSTRAINT ON (r:Room) ASSERT r.name IS UNIQUE; 

LOAD CSV WITH HEADERS FROM 'file:///EXAMPLE.csv' AS row WITH row WHERE row.Room <> '' AND row.Room IS NOT NULL AND row.Team <> '' AND row.Team IS NOT NULL 

CREATE (m:Employee {name: toUpper(row.Lastname), firstname: toUpper(row.Name)}) 

MERGE (r:Room { name:row.Room}) 

MERGE (t.Team {name:row.Team}) 

CREATE (m)-[:WORKS_IN]->(r) 

CREATE (m)-[:WORKS_WITH]->(t); 


나는 당신이 이미 null 값 일부 항목이 취소되고 촬영되지 않은 추측 같아요. 부서 또는 팀에 항목이 없는데도 직원들도 데이터베이스에 보관하고 싶습니다. null 인 경우 관계가 존재하지 않습니다.

저는 사전에 많은 도움과 많은 감사를드립니다.

답변

1

FOREACHCASE WHEN에서 handle conditions까지 사용해보세요. 이런 식으로 뭔가 : 관련 라인이 null의 다른 경우

CREATE (m:Employee {name: toUpper(row.Lastname), firstname: toUpper(row.Name)}) 
FOREACH (n IN (CASE WHEN row.Room IS NULL THEN [] ELSE [1] END) | 
    MERGE (r:Room { name:row.Room}) 
    CREATE (m)-[:WORKS_IN]->(r) 
) 
FOREACH (n IN (CASE WHEN row.Team IS NULL THEN [] ELSE [1] END) | 
    MERGE (t:Team {name:row.Team}) 
    CREATE (m)-[:WORKS_WITH]->(t) 
) 

FOREACH 블록이 한 번만 실행됩니다.

+0

감사합니다. Bruno! – jorzylicious

+0

안녕하세요 @ jorzylicious 당신은 환영합니다! 또한이 답변으로 문제가 해결되면 체크 표시를 클릭하여 [수락] (https://meta.stackexchange.com/q/5234/179419)을 고려하십시오. 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. –

+0

나를 도울 수 있다면 한 가지 더 질문이 있습니다. 데이터 세트를 업로드 한 후 일부 이름에 쉼표 앞에 공백이있는 것으로 나타났습니다 (예 : AAAA, BBBB, CCCC, 1111 여기 AAAA ). 그래서 Cypher MATCH (n : Employee {name : 'AAAA'}) RETURN n에서 쿼리해야 할 때 공간을 두어야합니다. 업로드하기 전에 공간을 확보하거나 포맷하는 방법을 피할 수있는 방법이 있습니까? – jorzylicious