Gremlin - 批量查询添加不存在的顶点
Gremlin - batch query for adding a vertices if it doesn't exist
我们在我们的项目中使用 Gremlin JavaScript 语言变体和 Amazon Neptune,我们有多个用于批量创建顶点和边的用例。
一个简单的示例是包含 200 - 1000 个用户的数组。我需要执行一个批处理查询来检查用户是否存在。如果用户存在,则添加具有属性的顶点,否则忽略该用户。这些条件都需要批量完成。
注意:需要避免使用 Gremlin 脚本。所以遍历就是我要找的。
可以使用包含要插入的数据的地图列表为查询提供种子。您可以进一步扩展该模式以使用 coalesce
步骤来执行条件插入。使用此处的航线数据集是一个简单的示例,它创建一个新的 XYZ
机场并计算出其他机场已经存在。请注意,中间遍历 V
步骤使得此查询有点昂贵,因为对于列表中的每个地图,都必须“搜索”所有顶点。
g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
unfold().as('data').
coalesce(V().hasLabel('airport').
where(eq('data')).
by('code').
by(select('code')),
addV('airport').
property('code',select('code')))
关于使用此模式避免查询中 addV
和 addE
步骤的长链的其他讨论。
https://tinkerpop.apache.org/docs/current/recipes/#long-traversals
当查询为 运行 时,您可以看到为 XYZ 机场创建了一个新 ID,并为其他机场找到了现有 ID。
gremlin> g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
......1> unfold().as('data').
......2> coalesce(V().hasLabel('airport').
......3> where(eq('data')).
......4> by('code').
......5> by(select('code')),
......6> addV('airport').
......7> property('code',select('code')))
==>v[3]
==>v[61286]
==>v[23]
我们在我们的项目中使用 Gremlin JavaScript 语言变体和 Amazon Neptune,我们有多个用于批量创建顶点和边的用例。
一个简单的示例是包含 200 - 1000 个用户的数组。我需要执行一个批处理查询来检查用户是否存在。如果用户存在,则添加具有属性的顶点,否则忽略该用户。这些条件都需要批量完成。
注意:需要避免使用 Gremlin 脚本。所以遍历就是我要找的。
可以使用包含要插入的数据的地图列表为查询提供种子。您可以进一步扩展该模式以使用 coalesce
步骤来执行条件插入。使用此处的航线数据集是一个简单的示例,它创建一个新的 XYZ
机场并计算出其他机场已经存在。请注意,中间遍历 V
步骤使得此查询有点昂贵,因为对于列表中的每个地图,都必须“搜索”所有顶点。
g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
unfold().as('data').
coalesce(V().hasLabel('airport').
where(eq('data')).
by('code').
by(select('code')),
addV('airport').
property('code',select('code')))
关于使用此模式避免查询中 addV
和 addE
步骤的长链的其他讨论。
https://tinkerpop.apache.org/docs/current/recipes/#long-traversals
当查询为 运行 时,您可以看到为 XYZ 机场创建了一个新 ID,并为其他机场找到了现有 ID。
gremlin> g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
......1> unfold().as('data').
......2> coalesce(V().hasLabel('airport').
......3> where(eq('data')).
......4> by('code').
......5> by(select('code')),
......6> addV('airport').
......7> property('code',select('code')))
==>v[3]
==>v[61286]
==>v[23]