Hi,Nebula 产品官:你的需求里有 Nebula 未来的身影

近日,Nebula Graph v3.1.0 内核同社区小伙伴见面了。在新版本中,Nebula 支持在表达式中使用模式,如:MATCH (v:player) WHERE (v)-[:like]->() RETURN v;增加了对 CLEAR SPACE 的支持用来保留清除图空间数据后的图 Schema…除了新增特性之外,在 Nebula 开发工程师和社区小伙伴的共同努力下,提升了路径、MATCH、GO 等常见查询的性能。具体的新版本 Release Note 参见:Nebula Graph v3.1.0 Release Note,优化 MATCH、GO 等多个子句

从 2019.05.15 发布第一个 v1.0-alpha 版本开始,Nebula 陆续发布了包含 v3.1.0 在内的 22 个版本,每个版本都让社区小伙伴看到不一样的 Nebula。借着 Nebula 开源 3 周年以及 v3.1.0 新版的“东风”,这里邀请社区的小伙伴们,一起想象 Nebula 未来的样子,将你对 Nebula 的想象变成需求 issue 留在后续 Nebula 迭代中。

Nebula 未来的样子,由你话事。

活动内容

即日起至 2022.05.15,在本帖或者 Nebula GitHub 仓库(https://github.com/vesoft-inc/nebula )提出你的产品需求,它可能是一个新功能,比如:支持一条语句删除多种类型边;也可以是一个优化点,比如:优化 error code…即视为参加活动。

需求可参考模版(同 GitHub 对应 issue)

功能模版

  • 问题背景:我想删除两个点之间的所有边,但是目前不支持一条 DELETE 语句删除多种类型的边;
  • 功能描述:支持一条语句删除多种类型边;
  • 代替方案:执行多条删除边语句;
  • 其他:补充信息。

优化模版

  • 优化背景:目前 error code 不方便定位到具体的问题;
  • 优化内容描述:针对各类问题产生的具体原因,优化 error code;
  • 其他:优化 error code 你有什么好的建议方案。

活动礼

在活动期间留言本帖或者给 GitHub 提交 feature / enhancement issue 的小伙伴,将会收到一份限量 Nebula 开源周年礼。

感恩有你的三周年,来当 Nebula 产品官一起完善它吧~

2 个赞

问题背景

我想直接展开返回点的属性,并对指定属性进行排序
类似于 mysql 里做这样一个查询

SELECT
    * 
FROM
    player 
ORDER BY
    name
LIMIT 5

但在 nebula 里我这样查询

MATCH (v:player)
  RETURN properties(v)
  ORDER BY v.name DESC LIMIT 5;

会报一个

Only column name can be used as sort item

错误

功能描述

支持展开点属性的函数,并支持对属性排序

比如有个 expand_properties 这样的函数
查询:

MATCH (v:player)
  RETURN expand_properties(v)
  ORDER BY v.player.name DESC LIMIT 5;

返回:

v.player.name v.player.age
Yao Ming 38
Vince Carter 42
Tracy McGrady 39
Tony Parker 36
Tim Duncan 42

代替方案

我现在的方案有两种

  1. 官方文档的方案,把所有属性都写出来,加别名并排序
    查询:
MATCH (v:player)
  RETURN v.player.name AS name, v.player.age AS age
  ORDER BY name DESC LIMIT 5;

返回:

name age
Yao Ming 38
Vince Carter 42
Tracy McGrady 39
Tony Parker 36
Tim Duncan 42

这种方案对应用程序来说,需要先拿到 tag 的所有属性名,多了一个步骤

  1. 我对要排序的字段做了冗余

查询:

MATCH (v:player)
  RETURN properties(v), v.player.name AS name
  ORDER BY name DESC LIMIT 5;

返回:

properties(v) name
{age: 38, name: “Yao Ming”} Yao Ming
{age: 42, name: “Vince Carter”} Vince Carter
{age: 39, name: “Tracy McGrady”} Tracy McGrady
{age: 36, name: “Tony Parker”} Tony Parker
{age: 42, name: “Tim Duncan”} Tim Duncan

简化了操作,但有冗余不够完美,而且排序的字段还需要有别名才行

4 个赞

谢谢建议,非常详细的介绍 ~

功能描述

如果我想要多个tag类型查询,该如何实现

例如我想查询 playerteam

那么我的ngql会写成这样

match (v:player) return v limit 10
union
match (v:team) return v limit 10

返回:

p
(“player106” :player{age: 25, name: “Kyle Anderson”})
(“team204” :team{name: “Spurs”})

如果能同一个match语句能支持多个tag就更好了,例如:

match p=((:player),(:team)) return p limit 10

返回:

p
(“player106” :player{age: 25, name: “Kyle Anderson”})
(“team204” :team{name: “Spurs”})

因为当我使用字段进行排序,那么union操作就会失效

例如我想查询playerteam,并且要求对 player.name 进行排序

match (v:player) return v, v.player.name as name order by name limit 10
union
match (v:team) return v limit 10;

会报一个

-1009:SemanticError: number of columns to UNION/INTERSECT/MINUS must be same

我觉得可以支持这样的形式:

match p=((:player),(:team)) return p order by p.player.name desc limit 10

返回

p
(“player106” :player{age: 25, name: “Kyle Anderson”})
(“player106” :player{age: 25, name: “Yao Ming”})
(“team204” :team{name: “Spurs”})

当然我只是建议,希望能采纳,谢谢

2 个赞