cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

Warning on: The execution plan for this query contains the Eager operator. Comment le résoudre?

cnhx27
Node Link

Bonjour,

J'ai ce warning:


avec la requête Cypher suivante:

MATCH ()-[r:LINK_TO]-() DELETE r;

CREATE CONSTRAINT ON (n:f4b1_com) ASSERT n.url IS UNIQUE;

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///f4b1_com_Links.csv" AS csvLine
MATCH (source:f4b1_com {url: csvLine.sourceUrl})
MERGE (target:f4b1_com {url: csvLine.targetUrl})
WITH source, target, csvLine
CALL apoc.create.relationship(source, "LINK_TO", NULL, target) YIELD rel
RETURN COUNT(rel);

DROP CONSTRAINT ON (n:f4b1_com) ASSERT n.url IS UNIQUE;

Le plan d’exécution étant le suivant:

Ma difficulté étant que je ne comprends pas le Warning sur Eager operator et de là comment résoudre ce Warning.

Merci de votre aidie

1 ACCEPTED SOLUTION

Bonjour,

Pouvez vous essayer la requete suivante?

MATCH (:f4b1_com)-[r:LINK_TO]-(:f4b1_com) DELETE r;

CALL apoc.periodic.iterate(
CALL apoc.load.csv( 
"file:///f4b1_com_Links.csv" ) yield map as row return row
','
MATCH (source:f4b1_com {url: row.sourceUrl})
MERGE (target:f4b1_com {url: row.targetUrl})
WITH source, target, csvLine
CALL apoc.create.relationship(source, "LINK_TO", NULL, target) YIELD rel
RETURN COUNT(rel);
‘, {batchSize:1000, iterateList:true, parallel:false});

Cordialement,
Jérémie

View solution in original post

3 REPLIES 3

Bonjour,

Pouvez vous essayer la requete suivante?

MATCH (:f4b1_com)-[r:LINK_TO]-(:f4b1_com) DELETE r;

CALL apoc.periodic.iterate(
CALL apoc.load.csv( 
"file:///f4b1_com_Links.csv" ) yield map as row return row
','
MATCH (source:f4b1_com {url: row.sourceUrl})
MERGE (target:f4b1_com {url: row.targetUrl})
WITH source, target, csvLine
CALL apoc.create.relationship(source, "LINK_TO", NULL, target) YIELD rel
RETURN COUNT(rel);
‘, {batchSize:1000, iterateList:true, parallel:false});

Cordialement,
Jérémie

cnhx27
Node Link

Bonjour Jérémie,

Merci de ton aide. Voici le résultat sous Neo4j Browser. Plus de Warning!

J'ai corrigée un petite erreur (manquait un ')

MATCH (:f4b1_com)-[r:LINK_TO]-(:f4b1_com) DELETE r;

CALL apoc.periodic.iterate(
'CALL apoc.load.csv("file:///f4b1_com_Links.csv") YIELD map AS row RETURN row
','
MATCH (source:f4b1_com {url: row.sourceUrl})
MERGE (target:f4b1_com {url: row.targetUrl})
WITH source, target, csvLine
CALL apoc.create.relationship(source, "LINK_TO", NULL, target) YIELD rel RETURN COUNT(rel);
', {batchSize:1000, iterateList:true, parallel:false});

De ce que je comprends de cette requête : Traitement batch de la requête Cypher avec un commit tous les 1000 enregistrements. Est ce bien cela ?

C'est exactement cela.
Vous pouvez aussi augmenter la taille des batchs, configurer le nombre de retries.

Je recommande vivement d'utiliser la derniere maintenance release et la derniere version d'apoc.