2017-02-08 1 views
1

file_A을 사용하여 생성 된 노드 세트는 각 노드의 'id'가있는 열을 포함합니다. (자바)이 사이퍼 쿼리를 사용하여 만들어졌습니다 : ID, 설명, prop2 및 prop3 : Neo4j Cypher - LOAD CSV로 특성 추가하기

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'file:file_A' AS line FIELDTERMINATOR '\t' 
CREATE (c:Node {nodeId:line.id}) 

가 지금은 다른 파일 네 개의 열을 포함 ( file_B)가 있습니다. 전에 작성한 각 노드에 설명 (특성 'nodeDesc')을 지정해야합니다. 이 설명은 file_B의 '설명'열에서 읽습니다. 또한이 값을 노드의 'nodoDesc'속성에 할당하려면 'prop2'와 'prop3'모두 '1'과 같아야합니다. 이를 위해 나는이 사이퍼 쿼리 사용

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'file:file_B' AS line FIELDTERMINATOR '\t' 
MATCH (c:Node) 
WHERE c.nodeId=line.id AND line.prop2='1' AND line.prop3='1' 
SET c.nodeDesc = line.description 

file_B 각 노드에 대한 몇 가지 설명이 포함되어 있습니다,하지만 단지 그들 중 하나는 모두 'prop2'와 'prop3'동일 '1'이있다. 그리고 그 노드의 속성에 할당하려는 하나입니다.

이전 쿼리를 실행 한 후 얻을 수있는 문제는 일부 노드에 설명이 없다는 것입니다. 몇 가지 테스트를 수행 한 결과, 'id'가 인 file_B 인 'nodeId'의 MATCH는 수행하지 않지만 해당 열에서는 'nodeId'이고 'prop2'와 ' prop3 '은 1'과 같습니다.

참고 :. file_A이 함께 aprox 400.000 행을 가지고 있으며, file_B 함께 aprox 1.300.000 행이 있습니다.

감사합니다.

답변

0

정수를 문자열과 비교하지 않을 수도 있습니다. 이것은 종종 이러한 불일치의 원천이 될 수 있습니다.

두 값이 모두 문자열 인 경우 문자열 하나에 후행 (또는 선행) 공백이 있는지 확인해야 할 수 있습니다.

+0

안녕하십니까. 답변 해 주셔서 감사합니다. 값은 모두 문자열입니다. 뒤 또는 앞의 공백이 없습니다. 사실, 일치하지 않는 파일 중 하나만 제외하고 file_B의 모든 행을 수동으로 삭제하면 두 번째 파일 인 cypher 쿼리를 실행하면 일치합니다. – Vicente

+0

또한 일치하지 않고 붙여 넣은 행 중 하나를 file_B의 행의 첫 번째 위치로 자른 경우에도 일치합니다. 이상한 행동 ... – Vicente