希望Exchange支持的两种插入场景

数据信息

源数据中包含两张数据表

用户表

id name device_id
11 jack 1
22 rose 2

设备表

device_id os
1 ios
2 android
3 windows

源数据与tag的关系

  • nebula中构建device这个tag
  • 设备表中,device_id列作为VertexID,os列作为属性,导入至device这个tag
  • 用户表中,device_id列作为VertexID,导入至device这个tag

特殊的插入场景

  • 针对设备表和用户表中可能有相同device_id的情况,目前看起来Exchange使用的是INSERT,遵循的是依照最新的插入为准。因此,设备表对应信息的插入将覆盖用户表先前的插入,这是我们希望的。
  • 不过,对于来自用户表的对同一个device_id的新插入,我们希望消极处理,即不做插入。

现状

  • 目前,对于初始数据,我们可通过先导入用户表信息,再导入设备表信息的方式达到上述目的

  • 但是,对于后续的增量数据,用户表和设备表的到来没有先后顺序,因此会存在用户表的相关信息覆盖掉设备表之前的插入

  • 总之,不知道Exchange是否有或者可以提供一种配置参数,用于指定VertexID已存在于tag的场景下,是进行覆盖插入或者忽略这次插入。不知道这个需求是否合理以及常见?

感觉你这个建模不是很图数据库,关联属性最好做成边

1 个赞

噢,是指os不作为device的属性,而作为一个新的tag,和device进行建边是吗

我是指用户表就不要存device_id了,通过边指向device表示

是的,现在是这么设计的。

提问里面的用户表其实是源数据的格式,最终图数据库会拆成用户tag和设备tag进行建边。

对于设备tag,除了通过上面说的用户表的相关信息进行插入,还有来自设备表的插入。

于是会产生一种插入场景,即设备表与用户表存在相同device_id的场景,由于设备表包含完整的设备信息,不希望用户表产生的最新插入将原先设备表的插入给覆盖掉。

所以问题主要是,对于不同的数据源,在其数据冲突情况下,是否有参数可以指定是覆盖插入还是忽略其插入呢?

不同的tag插入不会相互覆盖

你好,exchange没有参数可以指定 忽略已有数据的插入,你说的场景 需要对每条数据进行查询判断是否已存在,然后再进行插入。

ps:用户表和设备表作为两个tag,数据插入彼此不会覆盖的。

1 个赞

了解了解,不同tag不会彼此覆盖,这个没有问题。

不过这边确实有来自两个不同类型的数据源选取相应字段插入到同个tag的场景。我们这边先自己看看怎么调整吧。