PROFILE和EXPLAIN在cypher-shell上未显示任何内容

时间:2018-07-13 01:07:51

标签: neo4j cypher

看到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,但奇怪的是它没有显示任何内容。

我还尝试过将EXPLAINPROFILE查询传递到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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

:begin打开一个事务,直到您以:commit结尾,查询本身才会执行。

在这种情况下,您可以完全不使用:begin,只用分号结束查询。另外,由于您只是在这里查询计划,因此请使用EXPLAIN,这样它实际上就不会执行查询。