Nebula使用中间变量进行查询报错

提问参考模版:

  • nebula 版本:v1.2.0
  • 问题的具体描述
  • 我使用多个中间变量$var1, $var2, $var3,然后用一个中间变量$var4记录它们的并集,在使用$var4进行查询报错
$var1 = go from hash('6C5UTc6T44E=') over human_enterprise_holder where human_enterprise_holder.history == 0 yield human_enterprise_holder._dst as e_holder_id; $var2 = go from hash('6C5UTc6T44E=') over human_enterprise_legal_represent where human_enterprise_legal_represent.history == 0 yield human_enterprise_legal_represent._dst as e_legal_id; $var3 = go from hash('6C5UTc6T44E=') over human_enterprise_member where human_enterprise_member.history == 0 and human_enterprise_member.isExecutive == 1 yield human_enterprise_member._dst as e_member_id; $var4 = yield $var1.* union yield $var2.* union yield $var3.*; yield $var4.*
  • 查询结果-查看$var4
    image
  • 通过$var4进行最终查询
$var1 = go from hash('6C5UTc6T44E=') over human_enterprise_holder where human_enterprise_holder.history == 0 yield human_enterprise_holder._dst as e_holder_id; $var2 = go from hash('6C5UTc6T44E=') over human_enterprise_legal_represent where human_enterprise_legal_represent.history == 0 yield human_enterprise_legal_represent._dst as e_legal_id; $var3 = go from hash('6C5UTc6T44E=') over human_enterprise_member where human_enterprise_member.history == 0 and human_enterprise_member.isExecutive == 1 yield human_enterprise_member._dst as e_member_id; $var4 = yield $var1.* union yield $var2.* union yield $var3.*; go from $var4.$var1.e_holder_id over human_enterprise_holder,human_enterprise_legal_represent,human_enterprise_member reversely

可以仿照这个写法:

$var1=go from hash("V1") over E1 yield E1._dst as dst; 
$var2=go from hash("V2") over E2 yield E2._dst as dst;
$var3=yield $var1.dst as dst union yield $var2.dst;
go from $var3.dst over E3 reversely 
1 个赞

-1005:NULL', the srcs should be type of STRING, but wasNULL’

这样配置报这个错误

你的 vid 是不是 int 报错是说你的 vid 需要是个 string。我大概明白了,上面大兄弟是 v1.x 版本的,那时候 vid 只能是 int,所以需要做 hash 生成 vid。

如果你要用一样的话,直接

$var1=go from "V1" over E1 yield E1._dst as dst; 
$var2=go from "V2" over E2 yield E2._dst as dst;
$var3=yield $var1.dst as dst union yield $var2.dst;
go from $var3.dst over E3 reversely 

试试

我的是$var3中要引用$var2的结果字段,$var2要引用$var1的结果字段,最后$var1 union $var2 union $var3,这样支持吗?谢谢

$var1=go from “V1” over E1 yield E1._dst as dst;
$var2=go from $var1.dst over E2 yield E2._dst as dst;
$var3=yield $var1.dst as dst union yield $var2.dst;
go from $var3.dst over E3 reversely

$var2 的 from id是引用$var1的结果,执行就报这个错:-1005:NULL', the srcs should be type of STRING, but wasNULL’

(root@nebula) [nba]> $v1 = go from “Tony Parker” over like yield like._dst as dst; $v2 = go from $v1.dst over like yield like._dst as dst
±----------------+
| dst |
±----------------+
| “Tim Duncan” |
| “Tony Parker” |
| “Tim Duncan” |
| “Manu Ginobili” |
| “Tony Parker” |
±----------------+
Got 5 rows (time spent 4.876ms/5.260135ms)

我用nebula 3.x nigthly跑没问题呀.
你用的啥版本?

再加一步 yield $v1.dst union $v2.dst 看看会不会报错?

(root@nebula) [nba]> $v1 = go from “Tony Parker” over like yield like._dst as dst; $v2 = go from $v1.dst over like yield like._dst as dst; yield $v1.dst union yield $v2.dst
[ERROR (-1009)]: SemanticError: different column names to UNION/INTERSECT/MINUS are not supported
Wed, 18 Jan 2023 16:09:41 CST

(root@nebula) [nba]> $v1 = go from “Tony Parker” over like yield like._dst as dst; $v2 = go from $v1.dst over like yield like._dst as dst; yield $v1.dst as dst union yield $v2.dst as dst
±--------------------+
| dst |
±--------------------+
| “LaMarcus Aldridge” |
| “Manu Ginobili” |
| “Tim Duncan” |
| “Tony Parker” |
±--------------------+
Got 4 rows (time spent 6.657ms/7.07614ms)

1 个赞

我用的3.3.0版本,我这里报错

请问下一版预计什么时间发布?

我感觉可能是你语句写错了. 方便发下你实际写的语句吗?
我印象中这个地方最近没发现过什么bug.

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