2017-02-03 2 views
0

Я загрузки данных из CSV в Neo4j с помощью следующего запроса:Пакетная обработка в Cypher или загрузить несколько файлов из Neo4j браузера

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 заранее (и только один раз).

Например:

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); 
    ", 
    {}); 

Этот запрос будет выполнять LOAD CSV утверждения 3 раз (последовательно, так как parallel варианта процедуры является false по умолчанию), передавая одну из строк («file1», «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 указать несколько файлов, которые будут импортированы.

Смежные вопросы