insert vertex时如果该字段无值应该怎么处理?

在tag中,我们定义的tag属性超过10个,为了保证入库速度,我们会将同样tag的点合并在一个insert语句中进行插入,插入语句为 INSERT VERTEX t2 (name, age) VALUES “11”:(“n1”, 12);
在上面的例子中,如果我们的age无值,但是已经插入的点中可能已经存在age,我们应该如何将只有name的点进行插入? 如果使用例子中的 INSERT VERTEX t2 (name, age) VALUES “11”:(“n1”, NULL); 那么可能t2中存在的name会被覆盖,请问应该如何保证tag的所有属性都列出的情况下将该属性不存在值的不替换

创建 schema 的时候允许这个字段为 null 就好啦。

你是想替换某这个属性值,可以用UPDATE 或者 UPSERT UPDATE VERTEX - NebulaGraph Database 手册

1 个赞

可能是我没有描述清楚,我们之所以想要把所有属性放在一起导入是为了加速导入速度,所以将同一tag的所有数据放到一个insert vertex中,比如我们导入表a,表a共有10列,可能每一列都有数据,导入时需要将有数据的列进行融合然后导入,这中间可能牵扯到查询组合问题,而我们想将这10列数据直接融合,类似importer的工作,不知道有什么好的方法,可以直接将所有列数据拼接进行insert
INSERT VERTEX t2 (name, age) VALUES “13”:(“n3”, 12), “14”:(“n4”, 8),“15”:(“n4”, ); 可能有1000行,其中有50行数据不全,需要将这50行单独取出处理吗?

可以直接插入吧,只不过后面的50行会覆盖前面的值。你是不想覆盖前面相同vid 的点吗?

是的,不想覆盖没有值的那些点

那这个情况,你最好是在写入数据的之前,把原始的表数据根据vid合并形成最终的点结果

但是我们还可能存在的情况是同一个属性值多于一个,比如我们有个属性为来源,其值多于一个,那么我们应该如何精准搜索?比如tag 人的来源为表a,表b,表c,无法提前知道具体有多少来源,那么来源这个属性应该如何存值?我想知道表a的人有哪些应该如何存储?
不知道in是否可以?

nebula 在你不知道来源这个属性的值是多少的时候,好像不好查询用, where contains 不太匹配这个场景。你这个好像用es 好做。

1 个赞

几种方法;

  1. 把来源做成平行边,一条边一个来源即可;
  2. 你数据比如每天T+1更新,然后你可以把T+1的数据和T的数据做diff,新增的数据用insert,更新的数据 用update。删除的数据用delete。
1 个赞

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