Cypher Neo4j无法加载外部资源

时间:2015-02-08 20:07:47

标签: csv neo4j load

在Windows环境中,我尝试使用statement:

加载.csv文件
LOAD CSV WITH HEADERS FROM "file:///E:/Neo4j/customers.csv" AS row

似乎无法正常工作并返回: 无法在以下位置加载外部资源:

  

文件:/ E:/Neo4j/Customers.csv   Neo.TransientError.Statement.ExternalResourceFailure

我做错了什么?提前谢谢

15 个答案:

答案 0 :(得分:22)

我在Mac OS X 10.10上的Community Edition 3.0.1上收到此错误 LOAD CSV file:///似乎在预定义目录中查找文件。人们会认为,在论证中,人们会给Cypher声明提供完整的路径,但事实并非如此。

file:/// - 针对我的情况"意味着neo4j会将您给出的给定参数附加到已经预定义的参数上,然后查找该组合路径 file:///预定义的目录目录并不完全存在 /Users/User/Documents/Neo4j/default.graphdb/import,在我的计算机目录结构中,我错过了" / import"文件夹,不是在安装时创建的

要修复我的系统,我创建了一个" import"目录,将要读取的文件放在该目录中。我执行了Cypher加载语句我只将要读取的文件的名称放在文件参数中,即

LOAD CSV file:///data.csv
这对我有用。

答案 1 :(得分:7)

它似乎是一种安全配置。这是我找到的原始答案:https://stackoverflow.com/a/37444571/327004

  

您可以在conf / neo4j.conf中添加以下设置以绕过此:

     

dbms.security.allow_csv_import_from_file_urls=true

或更改导入目录dbms.directories.import=import

答案 2 :(得分:4)

您可以在文件中找到答案

"C:\Users\Jack\AppData\Roaming\Neo4j Community Edition\neo4j.conf"

(上面的“dbms.directories.import = import”)

对于neo4j-community_windows-x64_3_1_1版本,你必须注释掉这一行,或者你必须创建文件夹\ import(它不是通过安装创建的)并将你的文件添加到文件夹中。

有人写道,由于安全原因,他们只允许来自\ Documents \ Neo4j \ default.graphdb \ import文件夹的文件加载

在评论#dbms.directories.import = import之后,你可以执行例如从

LOAD CSV FROM "file:///C:/Users/Jack/Documents/products.csv" AS row 

在neo4j.conf中我没有添加/设置

dbms.security.allow_csv_import_from_file_urls=true

答案 3 :(得分:2)

可能是网址问题,请尝试file:c:/path/to/data.csv

查看我的博文:

答案 4 :(得分:2)

On(Arch)Linux + neo4j-community-3.4.0-alpha09,编辑$NEO4J_HOME/conf /neo4j.conf

  • 取消注释或添加:dbms.security.allow_csv_import_from_file_urls=true
  • 评论:#dbms.directories.import=import

重新启动neo4j(在终端:neo4j restart),如果您使用网络浏览器作为Neo4j界面/ GUI,则重新加载Neo4j浏览器(http://localhost:7474/browser/)。

然后,您应该能够从$NEO4J_HOME/...目录

之外加载csv

如,

LOAD CSV WITH HEADERS FROM "file:///mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS ...

我的$NEO4J_HOME//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 ...

也有效,但不是

LOAD CSV WITH HEADERS FROM "file://mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS...

LOAD CSV WITH HEADERS FROM "/mnt/Vancouver/Programming/data/metabolism/practice/a.csv" AS...

即。使用...file:/......file:///...

答案 5 :(得分:1)

在Neo4j桌面中选择您正在使用的数据库,转到设置,您将找到解决方案......只需注释" dbms.directories.import = import"行

#此设置将所有LOAD CSV导入文件限制在import目录下。删除或评论

#允许从文件系统中的任何位置加载文件;这引入了可能的安全问题。见

有关详细信息,请参阅本手册的

LOAD CSV部分。

dbms.directories.import = import ### COMMENT THIS LINE

答案 6 :(得分:0)

对于ubuntu系统,我将文件放在/usr/lib/neo4j中,这帮助我解决了这个问题。在每个其他位置,我尝试给予完全权限(777),但问题仍然是相同的。经过另一个stackoverflow帖子后,我意识到该文件应保存在neo4j目录中。

答案 7 :(得分:0)

Neo4j版本是3.1.1,OS是win10。

对我来说,LOAD CSV会从 Neo4j_Database_Location / testDB / import / artists.csv 中读取。

首先,我把csv文件放在路径F:\ code \ java \ helloworld \ artists.csv上,我的密码句子是

LOAD CSV FROM 'file:///F:\\code\\java\\helloworld\\artists.csv' AS line  
CREATE(:Artist {name:line[1],year:toInt(line[2])})

然后我收到如下返回的错误消息:

Couldn't load the external resource at: file:/D:/Neo4j/db/testDB/import/code/java/helloworld/artists.csv

这意味着neo4j本身会连接文件路径。 “D:/ Neo4j / db / testDB / import /”是Neo4j数据库位置,“code / java / helloworld / artists.csv”是csv文件位置。

例如,我在路径D:\ Neo4j \ Neo4j CE 3.1.1上安装Neo4j,数据库loaction是D:\ Neo4j \ db。我将CSV文件放在路径D:\ Neo4j \ db \ testDB \ import \ artist.csv上。如果路径上没有文件夹“import”,则应自行创建并将文件放在“import”文件夹中。

然后,将您的csv文件放在路径中,并输入cyper语句:

LOAD CSV from 'file:///artist.csv' as LINE
CREATE(:Artist {name:line[1],year:toInt(line[2])})

总之,一旦将CSV文件放在正确的路径中,就可以解决问题。

LOAD CSV developer-manal

中的相关解释
  

如果dbms.directories.import设置为默认值import,则使用LOAD CSV中的上述URL将分别从/import/myfile.csv和import / myproject / myfile.csv中读取。   如果设置为/ data / csv,则在LOAD CSV中使用上述URL将分别从/data/csv/myfile.csv和/data/csv/myproject/myfile.csv中读取。

答案 8 :(得分:0)

  1. 设置属性“ dbms.directories.import = import”
  2. 因为预先定义的目录并不完全存在,所以在“ /Users/User/Documents/Neo4j/default.graphdb/”处显式创建文件夹“ import”
  3. 将此处的csv数据放置在导入文件夹中
  4. 然后运行类似的代码-从“ file:/// C:/customers.csv” AS行中加载CSV

另外,在运行该行之后,您可以在代码部分中分析出了什么问题以得到更好的理解

答案 9 :(得分:0)

您将数据集放在neo4j-community路径中的导入目录中。 然后重新运行您的命令。

答案 10 :(得分:0)

对于macOS Mojave v 10.14.5

实际上,我不得不从dbms.directories.import=import取消注释~/Library/Application Support/Neo4j Desktop/Application/neo4jDatabases/database-e2dd2a9c-d450-4639-861b-1e7e42b56b31/installation-3.5.5/conf/neo4j.conf并重新启动服务。然后它起作用了。所有文件都必须放置在import目录中。

运行命令LOAD CSV WITH HEADERS FROM 'FILE:/<yourCSV>.csv' as l return l

答案 11 :(得分:0)

我正在使用Neo4j Desktop,正如其他人所说,默认图形数据库具有预定义的导入位置。您可以使用用户界面找到位置。如果将CSV放入 jQuery.getJSON('json/animals.aspx') .done( function( data ) { data = $.map(data, function(item) { // replace item. id and text with your animal json properties. return { id: item.id, text: item.name}; }); jQuery('#animals').select2({ placeholder: 'Type any ....', allowClear: true, minimumInputLength: 0, multiple: true, data: data }); } ); 目录中,则可以直接通过import命令使用相对路径

enter image description here enter image description here

答案 12 :(得分:0)

将您的csv文件添加到neo4j安装指南的import文件夹中。

  1. 打开neo4j并启动您的项目图

  2. 然后在“打开文件夹”选项卡中打开导入文件夹

  3. 在此文件夹中复制ur csv文件

  4. 因为ur neo4j正在运行,所以将您的加载语法中的该部分复制为file:/// C:/neo4j_module_datasets/test.csv 在C盘中

Snapshot for your reference

答案 13 :(得分:0)

使用以下语法:

LOAD CSV WITH HEADERS FROM "file:///my_collection.csv" AS row CREATE (n:myCollection) SET n = row

如果您正在运行docker,请在运行上面的查询之前遵循以下命令:

docker run \
-p=7474:7474 \
-p=7687:7687 \
-v=$HOME/neo4j/data:/data \
-v=$HOME/neo4j/logs:/logs \
-v=$HOME/local_import_dir:/var/lib/neo4j/import \
neo4j:3.0

然后

sudo cp my_collection.csv /home/bajju/local_import_dir/

答案 14 :(得分:-1)

最简单的方法(请注意安全性)是通过http为您提供目录并使用http导入

  • 在命令行中,将csv文件涂在其中的文件夹中
  • 根据您的python env运行以下命令。

Python 2 $ python -m SimpleHTTPServer 8000 Python 3 $ python3 -m http.server 8000 -现在您可以从本地主机加载文件 从“ http://localhost:8000/mycsvfile.csv” AS行加载CSV 返回行 -实际上,您可以通过公开文件夹并将localhost替换为IP来将文件公开到一台主机上,并将其加载到运行DB的地方