nebula 查询问题 what(): Invalid varint value: too few bytes.

lookup查询yield type属性的时候出现的问题;

查询语句:

LOOKUP ON phone WHERE phone.name== “*******” YIELD phone.name AS name, phone.type as type

type属性是在修改tag的时候新加进去的,int属性,未设置默认值;

该节点为修改tag之前添加的节点,在alter之后,fetch节点属性发现该type属性已经显示为0;

fetch 可以 yield 出 type属性,而在lookup查询中,yield phone.type 触发以上错误,导致graphd进程中断;

也许需要rebuild下index,似乎是个多版本的bug

1 个赞

赞同

流程是插数据, 加一个没有默认值的字段, rebuild index, look up?

可是这个没有在这个新加的字段上加索引呀。。

按照文档rebuild的时候遇到一下问题:

索引是建立在了name上,如果查询是:

LOOKUP ON phone WHERE phone.name== “*******” YIELD phone.name AS name

这个是没有问题的。但是如果加上新家的属性type的话:

LOOKUP ON phone WHERE phone.name== “*******” YIELD phone.name AS name, phone.type as type

这个查询是会让graphd服务挂掉的。。

大概明白问题了, 你新加了type字段以后, LOOKUP ON phone WHERE phone.name== “*”这么用是没问题的, 但是这个index在lookup中不能加type字段, 一方面index只建在name上, 另一方面因为加字段本身不会去改storage的数据(通过fetch看到的0, 是固定的默认值, 并不是真的写入到storage中), 所以这个时候你想直接通过look up查type是会遇到问题. 当然, crash的问题之后会修复, 感谢反馈.

1 个赞