nebula集成问题求解

1、nebula能否通过一个sql完成批量删除点并返回受影响的记录数,目前翻阅文档没有找到如何去写这样的sql
2、如何通过ngql来支持带条件批量更新点属性的场景

使用问题的话记得选对分类(用户问答-使用问题),我在审核页面给你修改回来了。不正确的分类使用是会延长你的帖子审核通过时间的,参考:关于论坛帖子审核和回复时间的说明(最后更新 2022.12.13)

可以先把点查询出来,得到 vid,再去删除,参考文档中的示例:DELETE VERTEX - NebulaGraph Database 手册

delete 语句目前不返回被删除的点的数量。

update vertex 语句可以更新点属性,可以带条件。

1 个赞

update vertex语句目前是要带vid,只能单条更新,我们目前的需求是通关条件查询出匹配的点,然后批量更新这些点。通过管道符方式报了语法不支持的问题。有没有办法通过ngql语句解决这个问题吗?
批量删除的问题已经解决了,ngql语句如下:

目前需要一个一个点的更新。还是建议考虑先把 vid 查询出来,再一个个处理。

目前版本没有办法用一条语句搞定。一方面是语法要求 vid。另一方面我们的事务功能还没有发布,在没有原子性保证的情况下,多条 update 拼在一起后,不能保证其全部成功或全部失败的原子性。还是一条一条处理,逐条检查执行是否成功,比较好。

有计划那个版本支持这个批量更新的功能吗

目前没有可公开的版本计划。


$pro3对应的值是一个list列表对象,通过session.executeWithParameter方法执行底层报错。

list参数通过命名参数方式不支持吗?

支持的。可能是你的 pro 参数没有正确定义。


这个是可以执行成功的。但是通过命名参数方式就出现上面说的问题。

执行下这个 :RETURN $pro3

出现问题是通过java客户端调用executeWithParameter方法出现的。
ngql如下:


参数map组装如下:
Map<String,Object> params=new HashMap<>();
params.put(“pro3”,Arrays.asList(true,false));

应该是in条件方式不支持命名参数方式。pro3底层类型是boolean,通过命名参数传入的对象是list类型,在执行的时候就报pro3类型不正确的异常

在nebula3.通过java客户端执行语句


hold_pro1、hold_pro4是通过命名参数方式传入。底层报E_RPC_FAILURE错误

发现后台storaged进程被关闭
image
grapherror的日志如下:

但是奇怪的是同样的语句通过console控制台是可以执行的。

这个客户端跟console平台调用的还不一样吗?

console 是调用 nebula-go client 的

那java客户端调用同样的语句为啥会导致storaged进程挂了?

上面不是报错吗?storage 挂是执行这条语句吗,发一下 core 栈吧。

断点到 Session.java:108 看下 map 的值,怀疑有可能是转换错了。

这个core栈在哪里获取?


就是执行这个语句的时候storage进程就挂了