cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! Site maintenance this Wednesday, February 1. Disruptions expected as we migrate the forums.

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

jeremie
Neo4j
Neo4j

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

jeremie
Neo4j
Neo4j

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.

Nodes 2022
Nodes
NODES 2022, Neo4j Online Education Summit

All the sessions of the conference are now available online