【问题标题】:PROFILE and EXPLAIN not showing anything on cypher-shellPROFILE 和 EXPLAIN 在 cypher-shell 上没有显示任何内容
【发布时间】:2018-07-13 01:07:50
【问题描述】:

在看到this question 之后,我一直在阅读this blog post,了解在将非常大的CSV 加载到Neo4J 时需要避免Eager

就我而言,我有大约 2700 万行 CSV,总大小约为 8.5 GB。将查询分解为几个查询以避免Eager 事务似乎非常重要。

EXPLAIN and PROFILE 都提供了“测试”查询的方法。在上面链接的 Mark Needham 的博客文章中,他提到:

您会注意到,当我们分析每个查询时,我们正在剥离 定期提交部分并添加“WITH row LIMIT 0”。这允许 我们生成足够的查询计划来识别“渴望” 操作符,而无需实际导入任何数据。

但是,当我尝试在带有 PROFILE 前缀的密码 shell 上测试我的查询时......什么也没有发生。我没有得到任何输出或报告。

$ ./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

有什么想法吗?

【问题讨论】:

  • :begin 打开一个事务,查询本身不会执行,直到您以:commit 结束。在这种情况下,您可以完全放弃:begin,只需用分号结束查询。此外,由于您只是在此处执行查询计划,因此请使用 EXPLAIN,因此它不会实际执行查询。
  • @InverseFalcon 你能把你的评论作为答案吗?那我就可以接受了。 (谢谢)

标签: neo4j cypher


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2020-03-24
    • 2014-07-21
    • 2016-02-19
    相关资源
    最近更新 更多