我正在尝试通过macOS开发机器上的Cypher Shell (而不是Neo4j - Shell)将一个大型CSV文件导入到Neo4j 3.x中。
import语句在cypher脚本文件中定义。
我已经在conf文件中将正确的导入目录设置为"conf-path for import CSV files“。
当我输入如下命令时:
cat <path to the Cypher script file> | $NEO4J_HOME/bin/cypher-shell -u user -p password --format auto当shell尝试访问Neo4j文件时,会预先添加CSV应用程序的路径。这会导致类似下面这样的连接路径:
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应用程序目录,我还需要做什么额外的设置吗?
我试图在文档中找到这一点,但没有太多的运气。
任何帮助都是非常感谢的。
谢谢
克里德
发布于 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将相对于该位置。
如果需要,您甚至可以在导入目录中设置目录层次结构,以便组织导入的文件。例如,您可以将dataset1和dataset2目录放入导入目录,然后将名为members.csv的文件放入dataset1,将名为events.csv的文件放入dataset2。然后,您将通过分别执行LOAD CSV FROM "file:///dataset1/members.csv和LOAD CSV FROM "file:///dataset2/events.csv来加载每个文件。
如果您希望能够从任何位置上传,请将其设置为“/”。
如果将dbms.directories.import设置为根("/"),则可以导入整个文件系统上的任何文件。但是,您需要在上载时指定相对于文件系统根目录的路径。
请注意,此选项将使潜在攻击者更容易上载恶意导入脚本。
发布于 2018-04-19 20:05:20
要简单地加载CSV,您必须:
import文件夹下,路径文件将为file:///MY_CSV_FILE.csvhttps://stackoverflow.com/questions/49920588
复制相似问题