看到this question之后,我一直在读this blog post,这是关于将非常大的CSV加载到Neo4J中时避免避免使用Eager
的需要。
就我而言,我有一个约2700万行的CSV,总大小约为8.5 GB。为避免Eager
交易,我将查询分为几个查询似乎很重要。
EXPLAIN and PROFILE都提供了“测试”查询的方法。在上方的Mark Needham的博客文章中,他提到:
您会注意到,当我们分析每个查询时,我们正在剥离 定期提交部分,并添加“ WITH row LIMIT 0”。这允许 我们生成足够的查询计划以识别“渴望” 运算符而实际上不导入任何数据。
但是,当我尝试使用PROFILE
作为前缀在cypher外壳上测试查询时,没有任何反应。我没有任何输出或报告。
$ ./bin/cypher-shell
Connected to Neo4j 3.3.5 at bolt://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j> :begin
neo4j# PROFILE LOAD CSV WITH HEADERS FROM "file:///myfile.tsv" AS line FIELDTERMINATOR '\t'
WITH line LIMIT 0
MERGE ...
我也EXPLAIN
看到了相同的行为-没有报告或输出。
如果我将相同的PROFILE ...
命令粘贴到Neo4J Web界面中,则确实会看到图形化计划,甚至出现警告标签,告诉我有关EAGER
的信息。我想那总比没有好,但是很难看懂这个图形显示。我真的很想为此使用cypher-shell
,但奇怪的是它没有显示任何内容。
我还尝试过将EXPLAIN
或PROFILE
查询传递到cypher-shell
,但这只是给我一些元数据,而不是实际的计划。
$ cat query.cypher | ./bin/cypher-shell --format plain
Plan: "EXPLAIN"
Statement: "READ_WRITE"
Version: "CYPHER 3.3"
Planner: "COST"
Runtime: "INTERPRETED"
Time: 155
配置文件:
$ cat query.cypher | ./bin/cypher-shell --format plain
Plan: "PROFILE"
Statement: "READ_WRITE"
Version: "CYPHER 3.3"
Planner: "COST"
Runtime: "INTERPRETED"
Time: 285
DbHits: 0
Rows: 1
count(*)
0
有什么想法吗?
答案 0 :(得分:1)
:begin打开一个事务,直到您以:commit结尾,查询本身才会执行。
在这种情况下,您可以完全不使用:begin,只用分号结束查询。另外,由于您只是在这里查询计划,因此请使用EXPLAIN,这样它实际上就不会执行查询。