首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Neo4j 3.x中通过Cypher-Shell导入CSV文件

在Neo4j 3.x中通过Cypher-Shell导入CSV文件
EN

Stack Overflow用户
提问于 2018-04-19 19:59:51
回答 2查看 631关注 0票数 0

我正在尝试通过macOS开发机器上的Cypher Shell (而不是Neo4j - Shell)将一个大型CSV文件导入到Neo4j 3.x中。

import语句在cypher脚本文件中定义。

我已经在conf文件中将正确的导入目录设置为"conf-path for import CSV files“。

当我输入如下命令时:

代码语言:javascript
复制
cat <path to the Cypher script file> | $NEO4J_HOME/bin/cypher-shell -u user -p password --format auto

当shell尝试访问Neo4j文件时,会预先添加CSV应用程序的路径。这会导致类似下面这样的连接路径:

代码语言:javascript
复制
file:/<path to the Neo4j App/neo4j-community-3.x>/file:<path to the CSV file set within conf>/Import.CSV

这会抛出一个“无法在以下位置加载外部资源:...”错误

由于按照预期执行了前期约束命令,因此可以正确加载Cypher脚本。Cypher脚本在尝试使用"LOAD_CSV“访问CSV文件时会失败。

要让Cypher Shell知道不应该添加Neo4j应用程序目录,我还需要做什么额外的设置吗?

我试图在文档中找到这一点,但没有太多的运气。

任何帮助都是非常感谢的。

谢谢

克里德

EN

回答 2

Stack Overflow用户

发布于 2018-04-19 20:32:39

CSV开箱即用,唯一可以导入CSV的位置是 import 文件夹。

任何LOAD CSV语句都必须相对于此目录;即LOAD CSV FROM "file:///mydata.csv"加载位于导入文件夹中的文件mydata.csv

这是有充分理由的;文件系统的保护非常重要,并且能够从任何位置导入任意CSV文件会扩大恶意上传和/或执行的攻击范围。

但是,如果您想要更改被视为导入目录的目录,这是完全可能的。

您可以更改被视为导入文件夹的目录。

这可以通过在配置中将dbms.directories.import设置为指向不同的文件夹来完成;例如,将其设置为/var/uploads将允许从该目录加载CSV,或者将其设置为类似于/home/krid/my-neo-imports/的内容以使用该目录。然后,LOAD CSV文件的URL将相对于该位置。

如果需要,您甚至可以在导入目录中设置目录层次结构,以便组织导入的文件。例如,您可以将dataset1dataset2目录放入导入目录,然后将名为members.csv的文件放入dataset1,将名为events.csv的文件放入dataset2。然后,您将通过分别执行LOAD CSV FROM "file:///dataset1/members.csvLOAD CSV FROM "file:///dataset2/events.csv来加载每个文件。

如果您希望能够从任何位置上传,请将其设置为“/”。

如果将dbms.directories.import设置为根("/"),则可以导入整个文件系统上的任何文件。但是,您需要在上载时指定相对于文件系统根目录的路径。

请注意,此选项将使潜在攻击者更容易上载恶意导入脚本。

票数 2
EN

Stack Overflow用户

发布于 2018-04-19 20:05:20

要简单地加载CSV,您必须:

  • 将其复制到您的cypher脚本中Neo4j
  • import文件夹下,路径文件将为file:///MY_CSV_FILE.csv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49920588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档