0

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

导入语句在密码脚本文件中定义。

我已将 conf 文件中的正确导入目录设置为“导入 CSV 文件的 conf-path”。

当我按如下方式输入命令时:

cat <path to the Cypher script file> | $NEO4J_HOME/bin/cypher-shell -u user -p password --format auto

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

file:/<path to the Neo4j App/neo4j-community-3.x>/file:<path to the CSV file set within conf>/Import.CSV

并引发“无法在以下位置加载外部资源:...”错误

Cypher 脚本已正确加载,因为前面的 CONSTRAINT 命令已按预期执行。Cypher 脚本在尝试使用“LOAD_CSV”访问 CSV 文件时失败。

我是否需要进行任何其他设置才能让 Cypher Shell 知道它不应该添加 Neo4j App 目录?

我试图在文档中找到它,但运气不佳。

任何帮助是极大的赞赏。

谢谢

克里德

4

2 回答 2

2

开箱即用,可以从中导入 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 将相对于该位置。

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

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

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

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

于 2018-04-19T12:32:39.260 回答
0

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

  • 复制import到 Neo4j 文件夹下
  • 在您的密码脚本中,路径文件将是file:///MY_CSV_FILE.csv
于 2018-04-19T12:05:19.810 回答