2017-02-03 3 views
0

나는 다음과 같은 쿼리를 사용하여 Neo4j에 CSV 데이터를 로딩하고 있습니다 :일괄 처리

CREATE CONSTRAINT ON (e:Entity) ASSERT e.entity IS UNIQUE; 

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'file:/file1.csv' AS line FIELDTERMINATOR '|' 

WITH line 

MERGE (e0:Entity {entity: line.entities_0_entity}) 
ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence) 

MERGE (e1:Entity {entity: line.entities_1_entity}) 
ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence) 

MERGE (e0)-[r:REL {name: line.relation_relation, confidence: toFloat(line.relation_confidence)}]->(e1) 

RETURN * 

사람이 Neo4j 명령 줄이나 방법에서 데이터를로드하기 위해 해당 쿼리를 알 수 브라우저에서 파일 이름을 동적으로 변경하거나 "file :/file *"과 같이 전달하십시오.

답변

2

동일한 Cypher 문을 여러 번 처리하고 각 값을 하나 이상 조정하려는 경우 APOC 절차 apoc.periodic.iterate을 사용할 수 있습니다.

예제에서 미리 CREATE CONSTRAINT 문을 수행하고 싶을 것입니다. 예를 들어

은 (절차의 parallel 옵션은 기본적으로 false 때문에, 순차적으로)

CALL apoc.periodic.iterate(
    " 
    WITH ['file1', 'x', 'y'] AS filenames, 
    UNWIND filenames AS name 
    RETURN name; 
    ", 
    " 
    USING PERIODIC COMMIT 1000 
    LOAD CSV WITH HEADERS FROM 'file:/' + {name} + '.csv' AS line FIELDTERMINATOR '|' 
    WITH line 
    MERGE (e0:Entity {entity: line.entities_0_entity}) 
    ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence) 
    MERGE (e1:Entity {entity: line.entities_1_entity}) 
    ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence) 
    MERGE (e0)-[r:REL {name: line.relation_relation, confidence: toFloat(line.relation_confidence)}]->(e1); 
    ", 
    {}); 

이 쿼리 문자열 중 하나 ("파일 1"을 전달하는 LOAD CSV 문 3 회를 실행, "y"및 "z")를 name 매개 변수로 사용합니다.

0

당신은 단순히 neo4j의 수입 디렉토리에있는 모든 파일을 저장 한 다음 모두로드 떠들썩한 파티 스크립트를 사용할 수 있습니다 :

#!bin/sh 

for file in /Users/ikwattro/dev/_graphs/310/import/* 
do 
    curl -H "Content-Type: application/json" \ 
     -d '{"statements": [{"statement": "LOAD CSV WITH HEADERS FROM file:///$file AS row ..."}]' \ 
     http://localhost:7474/db/data/transaction/commit 
done 

이 가져올 여러 개의 파일을 지정하는 Neo4j 자체 표준 방법은 없습니다.