Dans un environnement Windows, j'essaie de charger un fichier .csv avec la déclaration suivante:
LOAD CSV WITH HEADERS FROM "file:///E:/Neo4j/customers.csv" AS row
Il semble ne pas fonctionner correctement et renvoie: Impossible de charger la ressource externe à:
fichier:/E: /Neo4j/Customers.csv Neo.TransientError.Statement.ExternalResourceFailure
Qu'est-ce que je fais mal? Merci d'avance
Je recevais cette erreur sur Community Edition 3.0.1 sur Mac OS X 10.10 Il semble que LOAD CSV file:///
cherche des fichiers dans un répertoire prédéfini. On pourrait penser que dans l’argument selon lequel on donnerait à l’énoncé Cypher le chemin complet mais ce n’est pas le cas.
Le file:///
- pour ma situation "signifiait que neo4j ajoutait l'argument donné que vous aviez donné à un argument déjà prédéfini, puis cherchait ce chemin combiné Le répertoire de répertoire file:///
prédéfini n'existe pas entièrement /Users/User/Documents/Neo4j/default.graphdb/import
, dans la structure de répertoire de mon ordinateur, il me manquait le dossier "/ import", qui n'a pas été créé à l'installation
Pour réparer mon système, j'ai créé un répertoire "import", placez le fichier à lire dans ce répertoire. J'ai exécuté l'instruction de chargement Cypher. J'ai UNIQUEMENT mis le nom du fichier à lire dans l'argument de fichier i.e.
LOAD CSV file:///data.csv
cela a fonctionné pour moi.
Cela semble être une configuration de sécurité. Voici la réponse originale que j'ai trouvée: https://stackoverflow.com/a/37444571/327004
Vous pouvez ajouter le paramètre suivant dans conf/neo4j.conf afin de contourner cela:
dbms.security.allow_csv_import_from_file_urls=true
Ou changez le répertoire d'importation dbms.directories.import=import
Vous pouvez trouver la réponse dans le fichier
"C:\Users\Jack\AppData\Roaming\Neo4j Community Edition\neo4j.conf"
(ci-dessus "dbms.directories.import = import")
Pour la version neo4j-community_windows-x64_3_1_1, vous devez mettre cette ligne en commentaire ou vous devez créer le dossier\import (qui n’a pas été créé par l’installation) et ajouter votre fichier dans le dossier.
Pour des raisons de sécurité, ils n’autorisent le chargement de fichier que depuis le dossier\Documents\Neo4j\default.graphdb\import
Après avoir commenté # dbms.directories.import = import, vous pouvez exécuter par exemple de
LOAD CSV FROM "file:///C:/Users/Jack/Documents/products.csv" AS row
Dans neo4j.conf je n'ai pas eu à ajouter/définir
dbms.security.allow_csv_import_from_file_urls=true
C'est probablement un problème d'URL, essayez file:c:/path/to/data.csv
Voir mes articles de blog:
Dans le bureau Neo4j, sélectionnez la base de données que vous utilisez, accédez au paramètre et vous y trouverez la solution ... commentez simplement la ligne "dbms.directories.import = import"
# Ce paramètre contraint tous les fichiers d'importation LOAD CSV
à se trouver dans le répertoire import
. Supprimer ou commenter
# permettre aux fichiers d'être chargés n'importe où dans le système de fichiers; cela introduit des problèmes de sécurité possibles. Voir le
# LOAD CSV
section du manuel pour plus de détails.
dbms.directories.import = importer ### COMMENT CETTE LIGNE
Sous (Arch) Linux + neo4j-community-3.4.0-alpha09
, éditez $NEO4J_HOME/conf
/neo4j.conf
:
dbms.security.allow_csv_import_from_file_urls=true
#dbms.directories.import=import
Redémarrez neo4j (dans le terminal: neo4j restart
) et rechargez le navigateur Neo4j (http://localhost:7474/browser/
) si vous utilisez un navigateur Web comme interface/interface graphique Neo4j.
Ensuite, vous devriez pouvoir charger un csv en dehors de votre répertoire $NEO4J_HOME/...
Par exemple.,
LOAD CSV WITH HEADERS FROM "file:///mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS ...
où mon $NEO4J_HOME/
est /mnt/Vancouver/apps/neo4j/neo4j-community-3.4.0-alpha09/
LOAD CSV WITH HEADERS FROM "file:/mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS ...
fonctionne aussi, mais pas
LOAD CSV WITH HEADERS FROM "file://mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS...
ou
LOAD CSV WITH HEADERS FROM "/mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS...
i.e. utiliser ...file:/...
ou ...file:///...
De plus, après avoir exécuté la ligne, vous pouvez analyser ce qui ne va pas dans la section de code pour mieux comprendre.
Pour le système Ubuntu, j'ai placé le fichier dans /usr/lib/neo4j
, ce qui m'a aidé à résoudre le problème. Sur tous les autres sites, j'ai essayé de donner des autorisations complètes (777) mais le problème reste le même. Après être passé par un autre poste de stackoverflow, j’ai réalisé que le fichier devait être conservé dans le répertoire neo4j.
La version de Neo4j est 3.1.1, le système d'exploitation est win10.
Pour moi, LOAD CSV lirait à partir de Neo4j_Database_Location/testDB/import/artists.csv.
Au début, je mets le fichier csv sur le chemin F:\code\Java\helloworld\artists.csv, et ma phrase cypher est
LOAD CSV FROM 'file:///F:\\code\\Java\\helloworld\\artists.csv' AS line
CREATE(:Artist {name:line[1],year:toInt(line[2])})
Ensuite, je reçois le message d'erreur renvoyé comme suit:
Couldn't load the external resource at: file:/D:/Neo4j/db/testDB/import/code/Java/helloworld/artists.csv
Cela signifie que neo4j concerte lui-même le chemin du fichier . "D:/Neo4j/db/testDB/import /" est l'emplacement de la base de données Neo4j et que "code/Java/helloworld/artists.csv" est l'emplacement du fichier csv.
Par exemple, j'installe Neo4j sur le chemin D:\Neo4j\Neo4j CE 3.1.1 et la base de données est D:\Neo4j\db. Je mets le fichier CSV sur le chemin D:\Neo4j\db\testDB\import\artist.csv. Si vous n'avez pas le dossier "import" sur le chemin, vous devez le créer vous-même et placer votre fichier dans le dossier "import".
Ensuite, placez votre fichier csv dans le chemin et saisissez la phrase suivante:
LOAD CSV from 'file:///artist.csv' as LINE
CREATE(:Artist {name:line[1],year:toInt(line[2])})
Dans un Word, le problème peut être résolu une fois que vous avez placé le fichier CSV dans le bon chemin.
Explication associée dans LOAD CSV developer-manal
Si dbms.directories.import est défini sur la valeur par défaut import, l'utilisation des URL ci-dessus dans LOAD CSV lirait respectivement dans /import/myfile.csv et import/myproject/myfile.csv . S'il est défini sur/data/csv, l'utilisation des URL ci-dessus dans LOAD CSV lirait respectivement dans /data/csv/myfile.csv et /data/csv/myproject/myfile.csv.