MATCH、LOOKUP、STUDIO查询结果不一样

  • nebula 版本:3.0.2
  • nebula studio 版本: 3.2.3
  • 部署方式:单机
  • 安装方式:源码编译
  • 是否为线上版本:Y
  • 硬件信息:虚拟机CentOS 7, 1 core, 8G内存
  • 点/边数量:多种点和边的类型,共几百个点,几百条边,点和边全都有属性。
  • 数据导入方式:用nebula-spark-writer从csv文件导入

问题描述:我在console和nebula studio中遇到相同的问题——执行MATCH语句搜索clientof边无结果,而执行LOOKUP语句搜索clientof边正常返回几十条结果。在studio中对已知有clientof边的节点展开无结果,在studio中运行LOOKUP语句后查看子图,有结果,但是属性都没能展示出来。请问这是什么原因?

MATCH ()-[e:clientof]->() return e limit 10 无结果(下图)

LOOKUP ON clientof YIELD edge AS e 有结果(下图)

利用上图中200000005这个点在Nebula-studio中双向扩展clientof边,无结果(下图)



在studio中执行上述LOOKUP语句后,点击查看子图,有结果(下图)

在console中执行下 GO FROM 20000005 over clientof YIELD id($$) as dst 看看有结果吗

GO FROM 20000005 over clientof YIELD id($$) as dst


GO FROM 20000068 over clientof YIELD id($$) as dst

20000068这个点有两条clientof出边

FETCH PROP ON clientof 20000068 -> 20000028 YIELD properties(edge); 验证下边数据是否能读到


看起来是能读到的

那说明边信息是正确存储在kv中的, 贴一下 match 和 lookup 语句的执行计划吧, 在语句前加 PROFILE 执行

PROFILE LOOKUP.txt (24.4 KB)
PROFILE MATCH.txt (100.8 KB)
您看这样可不可以

看了你的计划, Match 在 AppendVertices 算子执行之后没有结果了, 之前的 edgeIndexScan还是正常的, 但是我在本地用 3.0.2 和 最新的 3.1.0 都没有复现这个问题

你把 limit 去掉执行有结果吗?

看起来是悬挂边,你 fetch 一下点,看看是什么

FETCH PROP ON * 20000068 YIELD vertex AS v;
FETCH PROP ON * 20000028 YIELD vertex AS v;

更新一下, 本地插入悬挂边后出现了 lookup 和 match 结果不一样的现象, 原因是在 match 语句中是按照 pattern 去匹配的, ()-[e:clientof]->() 这个 pattern 中包含了 vertex, 由于没有实际的 vertex 所以这个 pattern 没有匹配上, 导致没有结果


都是空的。
如果起点、终点都找不到,那LOOKUP输出出来的路径的起点和终点又是什么呢?

插入数据的时候是先写入所有的点,再写入的边。点的id的格式是INT64。

  1. fetch prop 为空说明点上没有属性, lookup 的输出只是纯粹的 vid, 两者不矛盾
  2. 插入的点后有删除过点吗? 悬挂边的产生可以参考 https://docs.nebula-graph.com.cn/master/8.service-tuning/2.graph-modeling/#_7 现在现象也符合悬挂边的特性

用户可以使用 GO 和 LOOKUP 语句查询到悬挂边,但无法使用 MATCH 语句查询到悬挂边。

1 个赞

嗯嗯,看起来是这样的。但这又产生了两个问题 :thinking:

  1. 当我运行 MATCH ()-[e:issue]->() return e limit 10 时,是有正确结果的;但是 FETCH PROP ON * 20000026 YIELD vertex AS v 依然没有结果 (20000026是图中第一条issue边的起点)。



    PROFILE MATCH issue.txt (24.5 KB)
    PROFILE FETCH PROP ON 20000026.txt (15.7 KB)

  2. 用nebula-spark-writer插入点和边的时候看起来一切顺利,一次成功(先插入所有的点、再插入所有的边),也没有update、delete过点或边,可能是什么原因导致插入的边没有关联到此前插入的点上、变成了悬挂边呢?
    test.zip (8.3 KB)

我找到问题了,company点插入时失败了,csv的header中有一列少了一个字母,这个错误信息被淹没在太多的info中了导致没有看到。所以和company相关的边都变成了悬挂边。重新插入后问题解决了。非常感谢! :heart:

4 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。