为了更快地定位、解决问题,麻烦参考下面模版提问(不符合提问规范的问题,会被隐藏待补充相关信息之后再发布 )
提问参考模版:
nebula 版本:nebula-1.2.0
部署方式(分布式 / 单机 / Docker / DBaaS):分布式
是否为线上版本:Y
硬件信息
磁盘( 推荐使用 SSD):SSD
CPU、内存信息 : 4C, 8G。
问题的具体描述
您好,请教一个关于边属性设置默认值的问题。
我这边有一条边,称为 beManaged, 原本没有属性。后来业务需求,新增了属性,并设置了索引。语句如下:
alter edge beManaged add (managerRank int default -1);
create edge index beManaged_managerRank on beManaged(managerRank);
通过nebula-studio 也确认了生效,截图如下:
但是我在使用nebula-studio随意进行查询时,发现了两个问题。
1.查询到的默认值为 0。
2.此边已经创建了索引,但是根据默认值确无法进行查询。
辛苦了,期待您的回答。
谢谢您的回复。
nebula-studio的版本是:V-1.2.7-beta。
不过我在 nebula的console端,使用命令行测试了下,也是直接返回 0。
应该与 studio的版本无关。
steam
2021 年7 月 19 日 09:53
4
那你创建索引之后 rebuild 过吗,如果没有重新 rebuild 的话,是找不到数据的。
我没有进行rebuild。因为这个属性是我新增的,不是原有的。新增属性之后,立刻创建的索引。按照文档上的提示,应该不需要rebuild。
目前可以根据这个属性索引查询到数据。【其中managerRank == 1, 是业务重新写入的边。】
wey
2021 年7 月 19 日 10:22
6
@echozheng 您好,关于默认值的我再看看哈,关于索引数据无法被查出:
这里有一些误解哈,如果您只是新修改了边的属性,而不是在创建 index 之后才插入的边本身,这个索引里还是没有现存的边的数据的哈,还是需要重建。
索引数据的建立是两种情况,一个是数据写入(同步阻塞地更新索引数据),一个是通过 job manager 执行 job 去重建(创建索引时候现存的点边数据)。您这些能查到的就是index创建之后写入的数据,有了 index,但是现存数据还是需要 rebuild job 的哈。
这里有一个我录的短视频介绍了索引写入过程 新手玩转 Nebula vol.05:原生索引_哔哩哔哩_bilibili ,更详细的信息可以去官方博客搜文章了解哈。
谢谢。的确,我执行rebuild命令之后,使用预设的默认值可以查询到相关值了。
辛苦确认了 默认值的问题之后,请同步我一下。
1 个赞
@wey 另外还有一个问题,rebuild 操作之后,如何判断rebuild完成执行完成了呢?
我使用go语句,在使用边属性过滤时,发现无法正常过滤。
wey
2021 年7 月 20 日 01:36
9
wey
2021 年7 月 20 日 01:40
10
关于 schema 修改,我去和开发同学 @liuyu85cn 学习了一下哈。
这个修改只会在 metaD 中为相应的 tag/edge type 增加一个更新版本的 schema,仅此而已,之后相应schema 新增数据会根据 schema 应用新的数据(修改的字段、默认值),而旧有的存留数据并不会做任何修改,除非对它们做 update 哈,所以获取旧有数据的时候,新的字段能够返回,但是默认值并不会应用 schema 里增加的默认值。 我们有做工作使得值会尝试返回为新schema默认值,稍等,我确认一下新版本的行为。
wey
2021 年7 月 20 日 02:04
11
在 2.x 的 master 上,这个问题已经修复了哈
(root@nebula) [basketballplayer]> alter edge follow add (managerRank int default -1);
Execution succeeded (time spent 3909/46652 us)
Tue, 20 Jul 2021 10:01:00 CST
(root@nebula) [basketballplayer]> fetch prop on follow "player100"->"player101"
+---------------------------------------------------------------------+
| edges_ |
+---------------------------------------------------------------------+
| [:follow "player100"->"player101" @0 {degree: 95, managerRank: -1}] |
+---------------------------------------------------------------------+
Got 1 rows (time spent 2802/41453 us)
1 个赞
谢谢您的回复。我看了好几遍,还是不大明白,所以再来请教下。
我的问题一共是两个。
第一个是我设置默认值为-1,但查询到的值是 0。从你下面的回复中,是确认了这个问题是 nebula-1.2.0的bug,并且在nebula-2.x上修复完成,这个理解没错吧。
第二个问题,是rebuild 索引之后,单独使用lookup语句进行过滤筛选没有问题。但是用在 go语句中,作为where的条件却过滤失败。您上面的这段回复,着实没看懂。
wey
2021 年7 月 20 日 08:58
13
第一个是我设置默认值为-1,但查询到的值是 0。从你下面的回复中,是确认了这个问题是 nebula-1.2.0的bug,并且在nebula-2.x上修复完成,这个理解没错吧。
是的
第二个问题,是rebuild 索引之后,单独使用lookup语句进行过滤筛选没有问题。但是用在 go语句中,作为where的条件却过滤失败。您上面的这段回复,着实没看懂。
抱歉这个问题我之前忽略掉了,请问 181->2046 是 edge alt(增加 mamagerRank) 之前 就有的数据对么?这个应该和你查询到是 0 的问题都是 bug,我在2.x master 上看也是修复了的。
(root@nebula) [basketballplayer]> go from "player100" over follow where follow.managerRank == -1;
+-------------+
| follow._dst |
+-------------+
| "player101" |
+-------------+
| "player125" |
+-------------+
Got 2 rows (time spent 5142/45611 us)
1 个赞
system
关闭
2021 年7 月 27 日 08:59
14
该话题在最后一个回复创建后7天后自动关闭。不再允许新的回复。